A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará.

Apresentações semelhantes


Apresentação em tema: "Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará."— Transcrição da apresentação:

1

2 Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará

3 © José Maria Monteiro2 Sumário Sistemas de Banco de Dados Bancos de Dados Relacionais O Modelo Relacional Modelagem de Dados Álgebra Relacional Linguagem de Manipulação e Consulta Transações de Bancos de Dados Servidores de Bancos de Dados

4 © José Maria Monteiro3 Structured Query Language (SQL) IBM (1973) Linguagem de SGBDs Relacionais Padronização pela ISO SQL-89: Maioria dos SGBDs SQL-92: Alguns SGBDs SQL3: Relacionais-objeto Mais simples e mais completa que a álgebra Linguagem declarativa NÃO tem completude computacional Orientada a conjunto

5 © José Maria Monteiro4 Propriedades Linguagem interativa de consultas ad hoc Linguagem de programação de BD Linguagem de definição e manipulação dos dados Linguagem de servidores de bancos de dados em rede Protege os dados em ambientes multi- usuários

6 © José Maria Monteiro5 SQL-89 Definição de dados (DDL) Criação de tabelas, índices, visões, integridade referencial Definição de privilégios de acesso Manipulação de dados (DML) Consulta e atualização dos dados Gerenciamento de transações Navegação através de cursor SQL embutido

7 © José Maria Monteiro6 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 +

8 © José Maria Monteiro7 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 +

9 © José Maria Monteiro8 SQL3 Tipo abstratos de dados Call-Level Interface - CLI Persistent Storage Modules - PSM Transações globais SQL multimídia

10 © José Maria Monteiro9 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), );

11 © José Maria Monteiro10 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), )

12 © José Maria Monteiro11 Ling. Manipulação de Dados Consultas SQL Três cláusulas: SELECT, FROM, WHERE SELECT : define os valores que constituem cada linha do resultado FROM : 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

13 © José Maria Monteiro12 Exemplos Recuperar o código e o nome das disciplinas de 6 créditos SELECT codigo, nome FROM Disciplina WHERE creditos=6 Recuperar todos os cursos SELECT * FROM Cursos

14 © José Maria Monteiro13 Exemplos Recuperar todos os alunos do oitavo semestre dos cursos com mais de 30 alunos aprovados por ano SELECT matricula, Estudante.nome FROM Estudante, Curso WHERE Estudante.semestre = 8 and Curso.aprov_ano > 30 and Estudante.curso = Curso.nome

15 © José Maria Monteiro14 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

16 © José Maria Monteiro15 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 salario FROM Empregados

17 © José Maria Monteiro16 Operações de Conjunto (SELECT CPF FROM Empregados WHERE CDep = 2) UNION (SELECT DISTINCT Chefe FROM Empregados WHERE CDep = 2) SQL2: UNION, MINUS (EXCEPT), INTERSECT

18 © José Maria Monteiro17 Consultas Aninhadas IN, NOT IN SELECT DISTINCT CPF FROM Empregados WHERE CPF IN (SELECT CPF FROM Empregados WHERE CDep = 2) OR CPF IN (SELECT Chefe FROM Empregados WHERE CDep = 2) Consulta completa na cláusula WHERE WHERE retorna TRUE se atributo está no resultado da consulta aninhada

19 © José Maria Monteiro18 Consultas Aninhadas ALL, ANY (SOME) SELECT ENome FROM Empregados WHERE Salario > ALL(SELECT Salario FROM Empregados WHERE CDep = 2) WHERE retorna TRUE se atributo satisfaz a condição em todas as tuplas resultantes da consulta aninhada

20 © José Maria Monteiro19 Cláusula Exist Verifica se o resultado de uma consulta aninhada não é vazio SELECT DNome FROM Departamentos WHERE Exist (SELECT * FROM Projetos WHERE CDep = Código) Recupere o nome dos departamentos que têm pelo menos um projeto

21 © José Maria Monteiro20 Cláusula Not Exist Verifica se o resultado de uma consulta aninhada é vazio SELECT DNome FROM Departamentos WHERE Not Exist (SELECT * FROM Projetos WHERE CDep = Código) Recupere o nome dos departamentos que não têm projetos

22 © José Maria Monteiro21 Cláusula NULL IS NULL, IS NOT NULL Permite recuperar tuplas onde o valor de um atributo (não) é NULL SELECT ENome FROM Empregados WHERE Chefe IS NULL Recupere o nome dos empregados que não têm chefe

23 © José Maria Monteiro22 Aliases Renomear atributos e relações SELECT ENome as Empregado_Nome, Salário FROM Empregados AS E, Empregados AS C WHERE 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

24 © José Maria Monteiro23 Funções Agregadas SUM, AVG, MAX, MIN SELECT SUM(Salario), AVG(Salario) FROM Empregados WHERE CDep = 3 Recupere a média e o total dos salários dos empregados do Departamento 3

25 © José Maria Monteiro24 Funções Agregadas - COUNT Retorna o número de tuplas de uma relação SELECT COUNT * FROM Projetos, Tarefas WHERE Projetos.Nome = Informatização AND Projetos.PCodigo = Tarefas.PCodigo Recupere o número de empregados que trabalham no projeto de Informatização

26 © José Maria Monteiro25 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

27 © José Maria Monteiro26 GROUP BY SELECT CDep, COUNT(*), AVG(Salario) FROM Empregados GROUP BY CDep

28 © José Maria Monteiro27 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, Tarefas WHERE Projetos.PCodigo = Tarefas.PCodigo GROUP BY Projetos.PCodigo HAVING 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

29 © José Maria Monteiro28 Cláusula Like Permite comparação de substrings % representa strings parciais _ representa um único caracter SELECT ENome, CPF FROM Empregados WHERE Nasc LIKE ______6_ Recupere o nome e o CPF de cada empregado que nasceu nos anos 60

30 © José Maria Monteiro29 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*Salario FROM Empregados, Tarefas, Projetos WHERE 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

31 © José Maria Monteiro30 Cláusula Order By Classificação do resultado segundo uma ordem total sobre os valores de um ou mais atributos SELECT Codigo, DNome, ENome FROM Departamentos, Empregados WHERE Departamentos.Codigo = Empregados.CDep ORDER 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

32 © José Maria Monteiro31 Subconsultas na Cláusula FROM SELECT dnome FROM (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

33 © José Maria Monteiro32 Compute e Compute By SELECT tipo, preco FROM TITULOS WHERE tipo like %info ORDER BY tipo, preco COMPUTE SUM(preco) Liste todos os tipos de livros que terminam com info e a soma total dos seus preços. TITULO(titulo, tipo, preco)

34 © José Maria Monteiro33 Compute e Compute By SELECT tipo, preco FROM TITULOS WHERE tipo like %info ORDER BY tipo, preco COMPUTE SUM(preco) By tipo COMPUTE SUM(preco) Liste todos os tipos de livros que terminam com info e a soma total dos seus preços. TITULO(titulo, tipo, preco)

35 © José Maria Monteiro34 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 S2 A maioria dos sistemas não implementam este operador

36 © José Maria Monteiro35 Contains e Not Contains SELECT DISTINCT S.cliente-nome FROM deposito S WHERE (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.

37 © José Maria Monteiro36 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

38 © José Maria Monteiro37 Comando INSERT INSERT INTO Empregados VALUES (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 DUnidade SELECT CDep, Cidade FROM Projetos GROUP BY CDep

39 © José Maria Monteiro38 Comando DELETE DELETE FROM Empregados WHERE CPF = 3456 DELETE FROM Empregados WHERE CDep IN (SELECT Codigo FROM Departamentos WHERE DNome = Administração)

40 © José Maria Monteiro39 Comando UPDATE UPDATE Projetos SET Cidade = Taíba WHERE CDep = 3 UPDATE Empregados SET Salario = Salario * 1.5 WHERE CDep IN (SELECT Codigo FROM Departamentos WHERE DNome = Pesquisa)

41 © José Maria Monteiro40 Visões Tabelas virtuais Derivadas de tabelas base através de comandos SQL Limitações de atualização Interessantes para consultas freqüentes

42 © José Maria Monteiro41 Especificação de Visões CREATE VIEW INFO_DEP (DNome, NEmp, SalTotal) ASSELECT DNome, COUNT(*), SUM(Salario) FROM Departamentos, Empregados WHERE Departamentos.Codigo = Empregados.DCod GROUP BY DNome SELECT DNome FROM Info_Dep WHERE NEmp < 10 Recupere o nome dos departamentos que têm menos de 10 empregados

43 © José Maria Monteiro42 Integridade Semântica Restrição do domínio de um atributo Cláusula CHECK do comando CREATE TABLE Asserções declarativas (SQL2) Especificadas através de uma condição sobre a base SGBD assegura que condição nunca é violada Gatilhos (Triggers) Especifica ação no lugar do abort transaction Condição é equivalente a uma asserção Ação é procedural

44 © José Maria Monteiro43 CHECK CREATE TABLE Empregados (.... salario DECIMAL(6,2),.... sexoCHAR,.... 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

45 © José Maria Monteiro44 Asserções CREATE ASSERTION SalEmp CHECK ( 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

46 © José Maria Monteiro45 Triggers insert update delete Eventos Comando SQL Stored Procedure Reação automática a eventos monitorados

47 © José Maria Monteiro46 Triggers Usar 650 parafusos estoque de parafusos: 850 parafusos 1500 85 0 Se quantidade de parafusos em estoque é menor que 1000, então acordar comprador = > comprar 1000 SGBD Ativo

48 © José Maria Monteiro47 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

49 © José Maria Monteiro48 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 Stored Procedures exec procedure retorna resultado

50 © José Maria Monteiro49 Stored Procedures Funções Regras de negócio e integridade dos dados no SGBD Administração do sistema Lado servidor da lógica da aplicação Características Comandos SQL compartilhados por aplicações Melhor desempenho em ambientes C/S Melhora autonomia de sítio

51 © José Maria Monteiro50 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!!!

52 © José Maria Monteiro51 Integração com LPs Servidor de BD Protocolos SQL FAP SQL embutido Chamadas CLI SQL-CLI Run-time do pré-compilador Run-time do CLI Drivers do BD Protocolos Pré-compilador

53 © José Maria Monteiro52 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 SQL select nome, endereço from Empregados where idade<30;

54 © José Maria Monteiro53 SQL Embutido DCL apnome char (30); DCL apmatricula char (7); DCL apfone char (8); EXEC SQL DECLARE curs CURSOR FOR SELECT nome, matricula, telefone FROM Estudante WHERE 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;

55 © José Maria Monteiro54 SQL Embutido Código mudado Código SQL Cod. Objeto Plano de acesso Pré-compilador Compilador SQL Binder Ligação Programa Executável Código fonte

56 © José Maria Monteiro55 SQL Call-Level Interfaces

57 © José Maria Monteiro56

58 © José Maria Monteiro57 Microsoft ODBC API Windows outras plataformas Chamadas API divididas em níveis Núcleo: conexão, comandos SQL, transações Nível 1: catálogo, BLOBs, funções de drivers Ní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

59 © José Maria Monteiro58 ODBC DB2OracleNonStop SQLSQL Server Gerenciador de driver ODBC API ODBC Aplicação API de Serviço Driver Oracle Driver DB2 Driver Tandem Driver SQL Server ESQL/DRDA SQL*NetNS SQLNet Lib


Carregar ppt "Introdução a Bancos de Dados José Maria Monteiro Departamento de Computação Universidade Federal do Ceará."

Apresentações semelhantes


Anúncios Google