Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade...
Transcript of Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade...
![Page 1: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/1.jpg)
Introdução a Bancos de Dados
José Maria MonteiroDepartamento de Computação
Universidade Federal do Ceará
![Page 2: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/2.jpg)
© 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
![Page 3: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/3.jpg)
© 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
![Page 4: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/4.jpg)
© 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
![Page 5: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/5.jpg)
© 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
![Page 6: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/6.jpg)
© 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 +
![Page 7: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/7.jpg)
© 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 +
![Page 8: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/8.jpg)
© 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
![Page 9: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/9.jpg)
© 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),);
![Page 10: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/10.jpg)
© 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),
)
![Page 11: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/11.jpg)
© 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
![Page 12: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/12.jpg)
© 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
![Page 13: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/13.jpg)
© 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
![Page 14: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/14.jpg)
© 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
![Page 15: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/15.jpg)
© 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
![Page 16: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/16.jpg)
© 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
![Page 17: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/17.jpg)
© 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
![Page 18: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/18.jpg)
© 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
![Page 19: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/19.jpg)
© 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
![Page 20: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/20.jpg)
© 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
![Page 21: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/21.jpg)
© 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
![Page 22: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/22.jpg)
© 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
![Page 23: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/23.jpg)
© 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
![Page 24: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/24.jpg)
© 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
![Page 25: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/25.jpg)
© 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
![Page 26: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/26.jpg)
© 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
![Page 27: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/27.jpg)
© 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
![Page 28: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/28.jpg)
© 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
![Page 29: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/29.jpg)
© 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
![Page 30: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/30.jpg)
© 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
![Page 31: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/31.jpg)
© 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
![Page 32: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/32.jpg)
© 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)
![Page 33: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/33.jpg)
© 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)
![Page 34: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/34.jpg)
© 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
![Page 35: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/35.jpg)
© 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’.
![Page 36: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/36.jpg)
© 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
![Page 37: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/37.jpg)
© 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
![Page 38: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/38.jpg)
© José Maria Monteiro 38
Comando DELETE
DELETE FROM EmpregadosWHERE CPF = ‘3456’
DELETE FROM EmpregadosWHERE CDep IN (SELECT Codigo
FROM Departamentos WHERE DNome =
‘Administração’)
![Page 39: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/39.jpg)
© 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’)
![Page 40: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/40.jpg)
© 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
![Page 41: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/41.jpg)
© 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
![Page 42: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/42.jpg)
© 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
![Page 43: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/43.jpg)
© 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
![Page 44: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/44.jpg)
© 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
![Page 45: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/45.jpg)
© José Maria Monteiro 45
Triggers
insert
update
delete
Eventos
ComandoSQL
StoredProcedureReação automática a
eventos monitorados
![Page 46: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/46.jpg)
© 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
![Page 47: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/47.jpg)
© 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
![Page 48: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/48.jpg)
© 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
![Page 49: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/49.jpg)
© 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
![Page 50: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/50.jpg)
© 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!!!
![Page 51: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/51.jpg)
© 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
![Page 52: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/52.jpg)
© 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;
![Page 53: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/53.jpg)
© 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;
![Page 54: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/54.jpg)
© 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
![Page 55: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/55.jpg)
© José Maria Monteiro 55
SQL Call-Level Interfaces
![Page 56: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/56.jpg)
© 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
![Page 57: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/57.jpg)
© 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
![Page 58: Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.](https://reader037.fdocumentos.com/reader037/viewer/2022102705/552fc134497959413d8d7d24/html5/thumbnails/58.jpg)
© 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