Upload
internet
View
118
Download
9
Embed Size (px)
Citation preview
Introdução a Bancos de Dados
José Maria MonteiroDepartamento de Computação
Universidade Federal do Ceará
© José Maria Monteiro 2
Sumário
Sistemas de Banco de DadosBancos de Dados Relacionais
O Modelo RelacionalModelagem de DadosÁlgebra RelacionalLinguagem de Manipulação e Consulta
Transações de Bancos de DadosServidores de Bancos de Dados
© José Maria Monteiro 3
Structured Query Language (SQL)
IBM (1973)
Linguagem de SGBDs RelacionaisPadronização pela ISO
SQL-89: Maioria dos SGBDsSQL-92: Alguns SGBDsSQL3: Relacionais-objeto
Mais simples e mais completa que a álgebra
Linguagem declarativaNÃO tem completude computacionalOrientada a conjunto
© José Maria Monteiro 4
Propriedades
Linguagem interativa de consultas ad hocLinguagem de programação de BDLinguagem de definição e manipulação dos
dadosLinguagem de servidores de bancos de
dados em redeProtege os dados em ambientes multi-
usuários
© José Maria Monteiro 5
SQL-89
Definição de dados (DDL)Criação de tabelas, índices, visões,
integridade referencialDefinição de privilégios de acesso
Manipulação de dados (DML)Consulta e atualização dos dadosGerenciamento de transaçõesNavegação através de cursorSQL embutido
© José Maria Monteiro 6
SQL-92 Agentes SQL: programas ou usuários que
produzem comandos SQL Conexões SQL C/S: estabelece uma sessão
SQL entre cliente e servidor Controle transacional mais detalhado:
transações read-only e níveis de isolamento Catálogo padronizado: coleção de esquemas
que descrevem uma base SQL Dinâmico: gera código SQL em tempo
de execução Novos tipos de dados Tabelas temporárias: espaço de trabalho
destruído ao final da sessão
SQL-89 +
© José Maria Monteiro 7
SQL-92
Suporte a operações de junção: diferentes tipos de junções na cláusula Where
Códigos de erro padronizados: SQLSTATE contém valores padronizados
Restrições de domínio: regras definidas pelo usuário que determinam valores possíveis para um atributo
Outros avanços: cursor para frente e para trás; conversão de tipos; refinamento no modelo de integridade referencial
SQL-89 +
© José Maria Monteiro 8
SQL3
Tipo abstratos de dadosTipo abstratos de dadosCall-Level Interface - CLICall-Level Interface - CLI
Persistent Storage Modules - PSMPersistent Storage Modules - PSMTransações globaisTransações globais
SQL multimídiaSQL multimídia
© José Maria Monteiro 9
Ling. de Definição de Dados
CREATE TABLE: criação de uma relação ALTER TABLE: adição de atributos a uma relação DROP TABLE: destruição de uma relação
Exemplo
CREATE TABLE Curso( nome: CHARACTER(30), creditos: INTEGER, aprov_ano: INTEGER, coordenador: CHARACTER(30),);
© José Maria Monteiro 10
Expressão de Restrições
CREATE TABLE Disciplina( codigo: CHAR(5) NOT NULL, nome: CHAR(40) NOT NULL, creditos: INTEGER NOT NULL,
departamento: CHAR(7), CONSTRAINT pk PRIMARY KEY (codigo),
CONSTRAINT depart_fk FOREIGN KEY
(departamento) REFERENCES Departamento (nome),
)
© José Maria Monteiro 11
Ling. Manipulação de Dados
Consultas SQL Três cláusulas: SELECT, FROM, WHERE SELECT: define os valores que constituem cada
linha do resultadoFROM: define as tabelas das quais o resultado é
produzido WHERE: define a condição de seleção que será
satisfeita para as tuplas que formam o resultado
© José Maria Monteiro 12
Exemplos
Recuperar o código e o nome das disciplinas de 6 créditos
SELECT codigo, nomeFROM DisciplinaWHERE creditos=6
Recuperar todos os cursos SELECT *FROM Cursos
© José Maria Monteiro 13
Exemplos
Recuperar todos os alunos do oitavo semestre dos cursos com mais de 30 alunos aprovados por ano
SELECT matricula, Estudante.nomeFROM Estudante, CursoWHERE Estudante.semestre = 8 and
Curso.aprov_ano > 30 and Estudante.curso = Curso.nome
© José Maria Monteiro 14
Banco de Dados Companhia
Nome CPF Endereco Nasc Sexo Salario Chefe CDep
DNome Codigo Gerente
Pcodigo PNome Cidade CDep
Empregado
Departamento
Projeto
Cpf Pcodigo Horas
Tarefa
© José Maria Monteiro 15
Eliminação de Duplicatas
SQL não trata relação como um conjunto
Resultado de uma consulta pode conter tuplas duplicadas
Cláusula DISTINCT: elimina duplicações
Recupere os salários pagos pela empresa
SELECT DISTINCT salarioFROM Empregados
© José Maria Monteiro 16
Operações de Conjunto
(SELECT CPFFROM EmpregadosWHERE CDep = 2)UNION(SELECT DISTINCT ChefeFROM EmpregadosWHERE CDep = 2)
SQL2: UNION, MINUS (EXCEPT), INTERSECT
© José Maria Monteiro 17
Consultas Aninhadas IN, NOT IN
SELECT DISTINCT CPFFROM EmpregadosWHERE CPF IN (SELECT CPF
FROM EmpregadosWHERE CDep = 2)
OR CPF IN (SELECT Chefe
FROM EmpregadosWHERE CDep = 2)
Consulta completa na cláusula WHERE WHERE retorna TRUE se atributo está no resultado da
consulta aninhada
© José Maria Monteiro 18
Consultas Aninhadas ALL, ANY (SOME)
SELECT ENomeFROM EmpregadosWHERE Salario > ALL(SELECT Salario
FROM EmpregadosWHERE CDep = 2)
WHERE retorna TRUE se atributo satisfaz a condição em todas as tuplas resultantes da consulta aninhada
© José Maria Monteiro 19
Cláusula Exist
Verifica se o resultado de uma consulta aninhada não é vazio
SELECT DNomeFROM DepartamentosWHERE Exist (SELECT *
FROM ProjetosWHERE CDep = Código)
Recupere o nome dos departamentos que têm pelo menos um projeto
© José Maria Monteiro 20
Cláusula Not Exist
Verifica se o resultado de uma consulta aninhada é vazio
SELECT DNomeFROM DepartamentosWHERE Not Exist (SELECT *
FROM ProjetosWHERE CDep = Código)
Recupere o nome dos departamentos que não têm projetos
© José Maria Monteiro 21
Cláusula NULLIS NULL, IS NOT NULL
Permite recuperar tuplas onde o valor de um atributo (não) é NULL
SELECT ENomeFROM EmpregadosWHERE Chefe IS NULL
Recupere o nome dos empregados que não têm chefe
© José Maria Monteiro 22
Aliases
Renomear atributos e relações
SELECT ENome as Empregado_Nome, SalárioFROM Empregados AS E, Empregados AS CWHERE E.Salario > C.Salario AND
E.Chefe = C.CPF
Recupere o nome e o salário dos empregados cujo salário é maior do que o salário do seu chefe
© José Maria Monteiro 23
Funções Agregadas
SUM, AVG, MAX, MIN
SELECT SUM(Salario), AVG(Salario)FROM EmpregadosWHERE CDep = 3
Recupere a média e o total dos saláriosdos empregados do Departamento 3
© José Maria Monteiro 24
Funções Agregadas - COUNT
Retorna o número de tuplas de uma relação
SELECT COUNT *FROM Projetos, TarefasWHERE Projetos.Nome = ‘Informatização’ AND
Projetos.PCodigo = Tarefas.PCodigo
Recupere o número de empregados que trabalham no projeto de Informatização
© José Maria Monteiro 25
Agrupamento de Tuplas
Subgrupo de tuplas segundo o valor de um atributo
Aplicar funções de agregação sobre subgrupos
Atributo de agrupamento deve estar na cláusula SELECT
GROUB BY é aplicado após junção
© José Maria Monteiro 26
GROUP BY
SELECT CDep, COUNT(*), AVG(Salario)FROM EmpregadosGROUP BY CDep
CDep COUNT(*) AVG(Salario)
3 3 11000,00
2 2 10334,00
4 1 15000,00
© José Maria Monteiro 27
Cláusula Having
Usada em conjunto com cláusula GROUP BY
Determina condição sobre subgrupos de tuplas
Condição aplicada após a cláusula WHERE
SELECT Projetos.PCodigo, PNome, COUNT(*)FROM Projetos, TarefasWHERE Projetos.PCodigo = Tarefas.PCodigoGROUP BY Projetos.PCodigoHAVING COUNT(*) > 2
Para cada projeto onde trabalham mais de 2 empregados, recupere o código do projeto, seu nome e o número de empregados que trabalham no projeto
© José Maria Monteiro 28
Cláusula Like
Permite comparação de substrings% representa strings parciais_ representa um único caracter
SELECT ENome, CPFFROM EmpregadosWHERE Nasc LIKE ‘______6_’
Recupere o nome e o CPF de cada empregado que nasceu nos anos 60
© José Maria Monteiro 29
Operações Aritméticas
Uso de operações aritméticas sobre valores numéricos
Adição, subtração, multiplicação e divisão
SELECT DISTINCT ENome, 1.1*SalarioFROM Empregados, Tarefas, ProjetosWHERE Empregados.CPF = Tarefas.CPF AND
Tarefas.PCodigo = Projetos.PCodigo AND Projetos.PName LIKE ‘Inf%’
Mostre o salário resultante de um aumento de 10% sobre o salário dos empregados que trabalham na Informatização
© José Maria Monteiro 30
Cláusula Order ByClassificação do resultado segundo uma
ordem total sobre os valores de um ou mais atributos
SELECT Codigo, DNome, ENomeFROM Departamentos, EmpregadosWHERE Departamentos.Codigo = Empregados.CDepORDER BY Codigo DESC, ENome ASC
Recupere o código e o nome dos departamentos e de todos os seus empregados na ordem decrescente de departamento e crescente de empregado
© José Maria Monteiro 31
Subconsultas na Cláusula FROM
SELECT dnomeFROM (SELECT DNome, AVG(Sal)
FROM Departamentos D, Empregados E WHERE D.Codigo = E.Cdep GROUP BY DNome) AS resultado(dnome,avgsal)
WHERE avgsal > 2.000
Quais departamentos têm uma média de salários maior que R$ 2.000
© José Maria Monteiro 32
Compute e Compute By
SELECT tipo, precoFROM TITULOSWHERE tipo like ‘%info’ORDER BY tipo, precoCOMPUTE SUM(preco)
Liste todos os tipos de livros que terminam com ‘info’ e a soma total dos seus preços. TITULO(titulo, tipo, preco)
© José Maria Monteiro 33
Compute e Compute By
SELECT tipo, precoFROM TITULOSWHERE tipo like ‘%info’ORDER BY tipo, precoCOMPUTE SUM(preco) By tipoCOMPUTE SUM(preco)
Liste todos os tipos de livros que terminam com ‘info’ e a soma total dos seus preços. TITULO(titulo, tipo, preco)
© José Maria Monteiro 34
Contains e Not Contains
SQL tem especificado o operador de comparação CONTAINS
S1 CONTAINS S2 Retorna verdadeiro se S1 contém todos os
valores de S2A maioria dos sistemas não implementam
este operador
© José Maria Monteiro 35
Contains e Not Contains
SELECT DISTINCT S.cliente-nomeFROM deposito SWHERE (SELECT T.agencia-nome
FROM deposito T WHERE S.cliente-nome = T.cliente-
nome) CONTAINS (SELECT agencia-nome FROM agencia WHERE agencia-
cidade=‘Fortaleza’)
Liste todos os clientes que possuem uma conta em todas as agências localizadas em ‘Fortaleza’.
© José Maria Monteiro 36
Comandos de Atualização
INSERT: Adiciona tuplas a uma relação
DELETE: Exclui tuplas de uma relação
UPDATE: Modifica valores de atributos de uma relação
© José Maria Monteiro 37
Comando INSERT
INSERT INTO EmpregadosVALUES (‘Chiquin’,‘1234’, ‘rua 1, 1’, ‘02/02/62’,
‘M’, 10000.00, ‘8765’, ‘3’)
INSERT INTO Empregados (ENome, CPF, Salário)VALUES (‘Zulmira’,‘3456’, 12000.00,)
INSERT INTO DUnidadeSELECT CDep,
CidadeFROM ProjetosGROUP BY CDep
© José Maria Monteiro 38
Comando DELETE
DELETE FROM EmpregadosWHERE CPF = ‘3456’
DELETE FROM EmpregadosWHERE CDep IN (SELECT Codigo
FROM Departamentos WHERE DNome =
‘Administração’)
© José Maria Monteiro 39
Comando UPDATE
UPDATE ProjetosSET Cidade = ‘Taíba’WHERE CDep = ‘3’
UPDATE EmpregadosSET Salario = Salario * 1.5WHERE CDep IN (SELECT Codigo
FROM Departamentos WHERE DNome = ‘Pesquisa’)
© José Maria Monteiro 40
Visões
Tabelas virtuais
Derivadas de tabelas base através de comandos SQL
Limitações de atualização
Interessantes para consultas freqüentes
© José Maria Monteiro 41
Especificação de Visões
CREATE VIEW INFO_DEP (DNome, NEmp, SalTotal)AS SELECT DNome, COUNT(*), SUM(Salario)
FROM Departamentos, EmpregadosWHERE Departamentos.Codigo =
Empregados.DCodGROUP BY DNome
SELECT DNomeFROM Info_DepWHERE NEmp < 10
Recupere o nome dos departamentosque têm menos de 10 empregados
© José Maria Monteiro 42
Integridade Semântica
Restrição do domínio de um atributoCláusula CHECK do comando CREATE TABLE
Asserções declarativas (SQL2)Especificadas através de uma condição sobre a baseSGBD assegura que condição nunca é violada
Gatilhos (“Triggers”)Especifica ação no lugar do “abort transaction”Condição é equivalente a uma asserçãoAção é procedural
© José Maria Monteiro 43
CHECK
CREATE TABLE Empregados ( ....
salario DECIMAL(6,2),....sexo CHAR,....CHECK (salario <= 11000.00),CHECK (sexo IN ( ‘M’, ‘F’ ) )
)
O salário de um empregado não pode ser maior do que R$11000,00 e ele sópode ser homem ou mulher
© José Maria Monteiro 44
Asserções
CREATE ASSERTION SalEmpCHECK ( NOT EXISTS (SELECT *
FROM Departamentos D, Empregados E, Empregados G
WHERE E.Salário > G.Salario AND E.CDep = D.Codigo AND D.Gerente = G.CPF) )
O salário de um empregado não pode ser maior do que o salário do gerente do departamento em que ele trabalha
© José Maria Monteiro 45
Triggers
insert
update
delete
Eventos
ComandoSQL
StoredProcedureReação automática a
eventos monitorados
© José Maria Monteiro 46
Triggers
Usar 650 parafusos
“estoque de parafusos: 850”
parafusos 1500 850
Se quantidade de parafusos em estoque é menor que 1000, então “acordar” comprador
= > comprar 1000
SGBD Ativo
© José Maria Monteiro 47
Trigger - Exemplo
DEFINE TRIGGER Departamentos D, Empregados E, Empregados G: WHERE E.Salario > G.Salario AND
E.CDep = D.Codigo AND D.Gerente = G.CPF
ACTION_PROCEDURE(NOTIF_GERENTE(D.Gerente);
Notificar o gerente se qualquer empregado do seu departamento tem o salário maior do que o seu
© José Maria Monteiro 48
Stored Procedures
Coleção denominada de comandos SQL
Mecanismo semelhante ao RPC Código sob o controle do SGBD Passagem de parâmetros 1 chamada n procedures Diminui tráfego de rede
Aplicação
StoredProcedures
execprocedure
retornaresultado
© José Maria Monteiro 49
Stored Procedures
FunçõesRegras de negócio e integridade dos dados no SGBDAdministração do sistemaLado “servidor” da lógica da aplicação
CaracterísticasComandos SQL compartilhados por aplicaçõesMelhor desempenho em ambientes C/SMelhora autonomia de sítio
© José Maria Monteiro 50
Stored Procedures
Menor flexibilidade
Pode piorar desempenho se o plano de execução não for periodicamente refeito
Cada procedure é por default uma transação separada
Falta de padronização!!!
© José Maria Monteiro 51
Integração com LPs
Servidor de BD
Protocolos
SQL FAP
SQLembutido
Chamadas CLI
SQL-CLI
Run-time dopré-compilador
Run-timedo CLI
Drivers do BD
Protocolos
Pré-compilador
© José Maria Monteiro 52
SQL Embutido
Padronização na ISO SQL-92
Fonte SQL tratado por um pré-compilador
Pré-compilador é projetado para um servidor de BD específico
Exec SQLselect nome, endereçofrom Empregadoswhere idade<30;
© José Maria Monteiro 53
SQL Embutido
DCL apnome char (30);DCL apmatricula char (7);DCL apfone char (8);
EXEC SQL DECLARE curs CURSOR FORSELECT nome, matricula, telefoneFROM EstudanteWHERE Semestre = 8
EXEC SQL OPEN curs;IF SQLCODE <> 0
THEN erro;Else
DO WHILE SQLCODE = 0;EXEC SQL FETCH curs
INTO apnome, apmat, apfone;END;
EXEC SQL CLOSE curs;
© José Maria Monteiro 54
SQL Embutido
Código mudado
Código SQL
Cod. Objeto
Plano de acesso
Pré-compilador
Compilador
SQL Binder
Ligação
Programa ExecutávelPrograma Executável
Código fonte
© José Maria Monteiro 55
SQL Call-Level Interfaces
© José Maria Monteiro 56
X/Open SAG CLI
DB2
Aplicação Aplicação
Gateway - DRDA
Driver DB2 CLI
X/Open CLI
Idéia: mesma interface de programação para acesso a qualquer BD
Funções que correspondem a especificação SQL-89
Somente SQL dinâmico
X/Open CLI SQL3 CLI
© José Maria Monteiro 57
Microsoft ODBCAPI Windows outras plataformas
Chamadas API divididas em níveisNúcleo: conexão, comandos SQL, transaçõesNível 1: catálogo, BLOBs, funções de driversNível 2: recuperação de dados usando cursor
Fabricantes de SGBDs fornecem drivers em um dos níveis
Fabricantes suportam ODBC e APIs SQL nativas
© José Maria Monteiro 58
ODBC
DB2 Oracle NonStop SQL SQL Server
Gerenciador de driver ODBC
API ODBC
Aplicação Aplicação Aplicação
API de Serviço
DriverOracle
DriverDB2
DriverTandem
DriverSQL Server
ESQL/DRDA SQL*Net NS SQL Net Lib