Fernando Lobo. Base de Dados, Universidade do Algarve 1/19. Professores da disciplina. Fernando Lobo (T e P) Alvaro Barradas (P) 2/19

Tamanho: px
Começar a partir da página:

Download "Fernando Lobo. Base de Dados, Universidade do Algarve 1/19. Professores da disciplina. Fernando Lobo (T e P) Alvaro Barradas (P) 2/19"

Transcrição

1 Apresentação Fernando Lobo Base de Dados, Universidade do Algarve 1/19 Professores da disciplina Fernando Lobo (T e P) Alvaro Barradas (P) 2/19

2 Livro recomendado A First Course in Database Systems, Je rey Ullman & Jennifer Widom, Prentice Hall, 3rd edition, /19 Avaliação Trabalho prático (30%), exame (70%) Necessitam nota não inferior a 7.0 valores no trabalho prático para serem admitidos a exame. Trabalho prático pode ser feito individualmente ou em grupo de 2 alunos. Discussão dos trabalhos na última semana de aulas. 4/19

3 Objectivos Gerais Dominar técnicas de análise e modelação de dados. Conhecer o modelo relacional. Saber definir o esquema de uma base de dados relacional. Saber inserir, modificar, e extrair informação de uma BD usando SQL. Saber especificar restrições, vistas, índices, e elementos activos. Compreender o mecanismo de transacções. 5/19 Programa resumido Conceitos introdutórios Modelação conceptual I UML Modelo relacional I Normalização Programação I Álgebra relacional I SQL I SQL + programação convencional 6/19

4 Trabalho prático Consiste em 4 partes: 1 Escolher tema, fazer modelo conceptual. 2 Converter modelo conceptual no modelo relacional, definir esquema em SQL. 3 Elaborar queries em SQL. 4 Juntar linguagem de programação convencional com SQL. 7/19 Exemplos de temas escolhidos pelos alunos no passado Receitas de culinária Campeonatos de surf Vinhos Borga Gest: Saídas à noite... 8/19

5 OqueéumSistemadeGestãodeBasedeDados? Éumsistemaque: 1 armazena e manipula grandes volumes de informação. 2 suporta acesso simultâneo por vários utilizadores. 3 permite acesso eficiente aos dados. 9/19 Exemplo: bancos Informação: contas, clientes, saldos, movimentos, etc. Grandes volumes: gigabytes. Multi-utilizador: várias pessoas/programas acedem à BD em simultâneo. I requer cuidados especiais. 10 / 19

6 Várias facetas no estudo de base de dados 1 Análise/Modelação 2 Programação I SQL + linguagem de programação 3 Implementação de SGBDs Nesta disciplina apenas estudamos os itens (1) e (2) 11 / 19 Um SGBD é um tipo de software Compra-se (pode ser gratuito), instala-se, configura-se. Disponível para todo o tipo de computadores. 12 / 19

7 Principais SGBDs Oracle DB2 (IBM) SQL-Server (Microsoft) PostgreSQL (open source) MySQL (open source) SQL Lite (open source) 13 / 19 Modelo conceptual Actor Filme PK nome PK ano duracao acores 0..* 0..* participa 0..* PK nome morada sexo data_nascimento produz 0..1 Estudio PK nome morada 14 / 19

8 Conversão para o modelo relacional Filmes( nome, ano, duracao, acores, estudio ) Actores( nome, morada, sexo, datanascimento ) Participa( actor, nomefilme, anofilme ) Estudios( nome, morada) 15 / 19 Normalização Eliminar redundância nas relações de modo a que não haja anomalias quando se modifica a BD. Exemplo concreto: se a BD estiver mal concebida, podemos ter de especificar a mesma informação várias vezes e isso poderá dar origem a inconsistência nos dados. 16 / 19

9 Álgebra relacional e SQL Álgebra relacional permite manipular relações (tabelas). Os operandos são relações e os resultados são relações. SQL é uma implementação desta álgebra. 17 / 19 Exemplo: Natural Join (./) Filmes: Estudios: Filmes./ Estudios nome ano estudio Star Wars 1977 Fox Pocahontas 1995 Disney King Kong 1933 MGM Lion King 1994 Disney estudio Fox Disney MGM morada Elm St. Pine St. Oak Dr. nome ano estudio morada Star Wars 1977 Fox Elm St. Pocahontas 1995 Disney Pine St. King Kong 1933 MGM Oak Dr. Lion King 1994 Disney Pine St. 18 / 19

10 Manipulação de dados com SQL Qual o nome e ano dos filmes produzidos pelo estúdio Disney entre 1992 e 1996? Código SQL: SELECT nome, ano FROM Filmes WHERE estudio = Disney AND ano >= 1992 AND ano <= 1996; Resultado: nome ano Pocahontas 1995 Lion King / 19

11 Modelação Conceptual de Base de Dados Fernando Lobo Base de Dados, Universidade do Algarve 1/56 Passos para criar uma base de dados 1 Compreender o problema no mundo real. 2 Especificá-lo usando um modelo conceptual. 3 Traduzir o modelo para um SGBD. 4 Criar esquema da BD usando uma Data Definition Language (DDL) 5 Carregar os dados 6 Desenvolver aplicações 2/56

12 Passos para criar uma base de dados (cont.) Para o passo 2 pode usar-se o modelo Entidade-Associação, UML, ou outro modelo conceptual. Por vezes o passo 2 é omitido (mas não é boa prática) e passa-se directamente para o modelo de dados do SGBD. A passagem de 2 para 3 pode ser automatizada. 3/56 Modelos conceptuais Modelos conceptuais mais usuais para BD: I I Modelo Entidade-Associação (E/A) UML Iremos aprender apenas modelação com UML 4/56

13 Unified Modeling Language (UML) UML é usado essencialmente para modelação de software com uma abordagem orientada a objectos. Um subconjunto do UML pode ser usado para modelação conceptual de base de dados. Tem uma notação gráfica. 5/56 Diagrama de classe Notação para descrever atributos (propriedades) e comportamentos (métodos) de objectos de uma classe. <nome da classe> <atributos> <metodos> 6/56

14 Diagrama de classe Vamos ignorar os métodos nesta disciplina. <nome da classe> <atributos> 7/56 Exemplo Imaginem que têm de fazer uma BD para os Serviços Académicos. Vamos ter de guardar informação sobre os alunos. Para cada aluno podemos querer guardar o seu número de aluno, nome, telefone, morada, etc. Tudo isso são atributos/propriedades de um aluno. 8/56

15 Exemplo Faz sentido termos uma classe de alunos. Pensem numa classe como sendo um tipo de dados (uma estrutura em C) Aluno numero: int nome: string telefone: string morada: string 9/56 Exemplo Numa fase inicial, podemos omitir o tipo de dados dos atributos. Aluno numero nome telefone morada 10 / 56

16 Chave primária Conjunto de atributos que determina de forma única um objecto de uma classe. Especifica-se usando PK junto do(s) atributo(s). Aluno PK numero nome telefone morada 11 / 56 Conjunto de objectos de uma classe A futura BD terá um conjunto de objectos da classe Aluno. Esse conjunto pode ser visualizado na forma de uma tabela. Cada linha da tabela é um objecto da classe Aluno. numero nome morada telefone José Almeida Rua da Prata, 27, Faro Maria Tavares Av. da Liberdade, 13, Faro Paula Soares Av. de Paris, 14, Olhão / 56

17 Associações Podemos ter associações entre objectos de classes diferentes. A associação é representada por uma linha com um nome. Exemplo: Podemos querer saber quais as disciplinas que cada aluno já fez. I I Criamos uma classe Disciplina com atributos sigla e nome. Unimos Aluno e Disciplina com uma linha e damos um nome que reflecte o tipo de ligação que existe. 13 / 56 Exemplo Aluno Disciplina PK numero nome telefone morada realiza 0..* 0..* PK sigla nome A seta facilita a leitura em português corrente. Um aluno realiza várias (0 ou mais) disciplinas. Uma disciplina é realizada por vários (0 ou mais) alunos. 14 / 56

18 Associações podem ser vistas em forma de tabela Alunos numero nome morada telefone José Almeida Rua da Prata, 27, Faro Maria Tavares Av. da Liberdade, 13, Faro Paula Soares Av. de Paris, 14, Olhão Disciplinas Realiza sigla nome BD Bases de Dados POO Programação Orientada a Objectos aluno disciplina BD POO POO / 56 Multiplicidade de associações Multiplicidade é especificada nas extremidades da linha. I I m..n significa que 1 objecto do outro extremo está associado com um mínimo de m e um máximo de n objectos deste extremo. *! infinito (ex: 1..* significa pelo menos um ) 16 / 56

19 Exemplo Aluno Disciplina PK numero nome telefone realiza PK sigla nome morada Um aluno realiza um mínimo de 0 e um máximo de 10 disciplinas. Uma disciplina é realizada por um mínimo de 5 e um máximo de 30 alunos. 17 / 56 Multiplicidade de associações Dadas duas classes, C1 e C2, um-um: cada objecto de C1 está associado no máximo a um objecto de C2 e vice-versa. muitos-um: cada objecto de C1 está associado no máximo a um objecto de C2. Mas um objecto de C2 pode estar associado a vários objectos de C1. muitos-muitos: cada objecto de C1 pode estar associado a vários objectos de C2 e vice-versa. 18 / 56

20 Multiplicidade um-um C1 C2 Cada objecto de C1 está associado no máximo a um objecto de C2 e vice-versa. 19 / 56 Multiplicidade muitos-um C1 C2 Cada objecto de C1 está associado no máximo a um objecto de C2. 20 / 56

21 Multiplicidade muitos-muitos C1 C2 Cada objecto de C1 pode estar associado a vários objectos de C2 e vice-versa. Mas um objecto de C2 pode estar associado a vários objectos de C1. 21 / 56 Classes associativas É permitido atributos em associações. Associação passa a ser uma Classe Associativa. 22 / 56

22 Exemplo Um aluno realiza uma disciplina e obtém uma nota. A nota é uma propriedade da associação aluno disciplina. Aluno Disciplina a61234 a61111 a62222 nota=13 nota=15 nota=15 nota=12 BD POO 23 / 56 Classe associativa em UML Aluno Disciplina PK numero nome telefone morada 0..* 0..* PK sigla nome Realiza nota 24 / 56

23 Énecessáriotomardecisõesnamodelação E se quisermos saber o ano em que o aluno realizou a disciplina? Onde colocar o atributo ano? Devemos considerar BD 2017 = BD 2018? 25 / 56 Se BD 2017 = BD 2018 então o ano pode ficar atributo de realiza. Aluno Disciplina PK numero nome telefone morada 0..* 0..* PK sigla nome Realiza nota ano 26 / 56

24 Aluno Disciplina nota=15, ano= / 56 Se BD = BD 2018, sigla não pode ser chave de Disciplina. Necessitaríamos de ter uma chave composta, ex: {sigla,ano}. Ou então um código de disciplina. Aluno Disciplina PK numero nome telefone morada 0..* 0..* PK sigla PK ano nome Realiza nota 28 / 56

25 Mais decisões... Estamos a assumir que Realiza significa ter aprovação à disciplina. É razoável assumir que tal só acontece uma vez. E se quisermos modelar inscrição à disciplina? Éperfeitamenterazoávelumalunoinscrever-seàmesmadisciplina várias vezes. 29 / 56 Conceptualmente... Aluno Disciplina nota=6, ano=2015 nota=8, ano=2016 nota=15, ano= / 56

26 Erro comum em UML Aluno Disciplina PK numero nome telefone morada 0..* 0..* 0..* Inscreve se nota ano PK sigla nome 31 / 56 Mas não se pode modelar assim Não é permitido ter mais do que uma associação com o mesmo nome entre dois objectos. i.e., não podemos ter várias associações de inscrição entre um determinado aluno e uma determinada disciplina. Aluno Disciplina nota=6, ano=2015 nota=8, ano=2016 nota=15, ano= / 56

27 Mais adiante vermos como modelar este problema correctamente. Não esqueçam este exemplo. É um erro frequente / 56 Exemplo do vosso livro: filmes Um filme tem: nome, ano, duração, colorido ou preto/branco. Um actor/actriz tem: nome, morada, data de nascimento. Um estúdio tem: nome, morada. Um filme tem vários actores e um actor pode participar em vários filmes. Um filme pode ser produzido por um estúdio, um estúdio pode produzir vários filmes. 34 / 56

28 Conhecimento do mundo real Usa-se conhecimento do mundo real para modelar o problema. Não há uma única solução correcta, pode haver várias abordagens. Devemos assumir pressupostos razoáveis. 35 / 56 Pressupostos para a BD de filmes Não há dois actores com o mesmo nome. Não há dois estúdios com o mesmo nome. Não há dois filmes com o mesmo nome produzidos no mesmo ano (mas pode haver em anos distintos: Ex: Há o King Kong de 1933, mas também há o King Kong de 1976, e até ha o King Kong de 2005). NOTA: na prática o melhor seria colocar um atributo artificial um código para identificar univocamente cada filme, mas para já vamos ignorar isso. 36 / 56

29 Modelo UML Actor Filme PK nome PK ano duracao acores 0..* 0..* participa 0..* PK nome morada sexo data_nascimento produz 0..1 Estudio PK nome morada 37 / 56 Sobre a chave primária composta No diagrama da classe Filme, colocamos PK em nome e PK em ano. Trata-se de uma chave composta. A chave primária é {nome,ano}. Nada impede que haja filmes com o mesmo nome. Nada impede que haja filmes produzidos no mesmo ano. O que estamos a proibir é que haja dois filmes com o mesmo nome produzidos no mesmo ano. 38 / 56

30 Várias alternativas para chave primária Pode have várias alternativas para chaves primárias. Nesse caso escolhemos uma delas como chave primária. Exemplo: I I no caso da BD dos SA poderemos querer guardar o número do cartão de cidadão do(a) aluno(a). temos duas opções para chave primária: número-de-aluno ou numero-de-cc. 39 / 56 Um erro comum Aluno PK numero PK numcc nome telefone morada 40 / 56

31 Estúdio tem um presidente Um estúdio tem um e um só presidente. Vamos assumir que um presidente só pode ser presidente de um estúdio. Estudio Presidente PK nome morada 1..1 preside 1..1 PK nome morada data_nascimento 41 / 56 Vencimento dos actores Um actor recebe consoante o filme em que participa. Solução: Classe associativa. Filme Actor PK nome PK ano duracao acores 0..* 0..* PK nome morada sexo data_nascimento Participa salario 42 / 56

32 Associações com a própria classe Pode haver associações entre objectos da mesma classe. Cada objecto representa um papel diferente na associação. Ex: um filme pode ser sequência de um outro filme. Filme PK nome PK ano duracao acores * original sequencia 43 / 56 Visualizando em forma de tabela sequência original The Empire Strikes Back Star Wars The Return of the Jedi The Empire Strikes Back Rocky II Rocky I Rocky III Rocky II / 56

33 Subclasses Uma classe pode ter subclasses. Ex: Um Cartoon é um tipo de filme, Crime-Mistério também é um tipo de filme. Cartoons é uma subclasse de Filmes, Crime-Mistério é outra sub-classe de Filmes. Subclasse aponta para a superclasse com uma linha com um triângulo na extremidade. As subclasses podem ter atributos. I ex: arma do crime para os filmes de Crime-Mistério. 45 / 56 Subclasses Filmes PK nome PK ano duracao acores Crime Misterio Cartoons arma 46 / 56

34 Subclasses As subclasses de uma classe podem ser: I completas ou parciais F completa se cada objecto da superclasse está numa das subclasses, parcial caso contrário. I disjuntas ou sobrepostas F disjunta se um objecto não pode estar em mais do que uma subclasse, sobreposta caso contrário. I É costume anotar a classificação no diagrama de forma textual 47 / 56 Subclasses de Filmes (parciais e sobrepostas) Filmes PK nome PK ano duracao acores parcial, sobreposta Crime Misterio Cartoons arma Porquê sobrepostas? Porque um filme pode ser simultaneamente um cartoon e um filme de crime-mistério (ex: Who Framed Roger Rabbit? 48 / 56

35 Agregação Associação com o significado que objectos de um dos lados podem ser possuídos ou fazer parte de objectos do outro lado. Ex: um filme pode ser produzido por um estúdio. I (o estúdio é dono do filme) Filmes Estudios PK nome PK ano duracao acores 1..* PK nome morada representa se por no lado da classe que e "dona de" significa / 56 Composição Semelhante à agregação mas a posse é obrigatória. Ex: um filme tem de ser forçosamente produzido por um estúdio. Filmes Estudios PK nome PK ano duracao acores 1..* PK nome morada representa se por no lado da classe que e "dona de" significa / 56

36 Agregação e Composição Não é necessário dar um nome à associação. O nome está impĺıcito pela posse dos objectos. 51 / 56 Classe de suporte Por vezes podemos ter uma classe que serve de suporte a outra classe. Objectos desta classe só fazem sentido no contexto de outra classe. Ex: Um estúdio pode ter várias equipas de filmagem: equipa 1, 2, 3,... A equipa de filmagem é uma classe de suporte (ou classe fraca) a um estúdio. Modelamos este tipo de associação com composição e colocamos uma caixinha assinalada com PK no diagrama de classe de suporte. Uma equipa de filmagem só pode ser identificada se for buscar a chave do estúdio respectivo. 52 / 56

37 Classe de suporte Estudio Eq. Filmagem PK nome morada 0..* PK PK numero 53 / 56 Voltando ao problema das inscrições de alunos Aluno Disciplina nota=6, ano=2015 nota=8, ano=2016 nota=15, ano= / 56

38 Assim NÃO Aluno Disciplina PK numero nome telefone morada 0..* 0..* 0..* Inscreve se nota ano PK sigla nome 55 / 56 Assim SIM PK Inscriçao PK ano nota PK Aluno Disciplina PK numero nome telefone morada PK sigla nome 56 / 56

39 Modelo relacional Fernando Lobo Base de Dados, Universidade do Algarve 1/17 Modelo relacional Modelo simples e intuitivo baseado no conceito matemático de relação. Inventado em 1970 por Edgar Codd. Utilizado pela maioria dos SGBDs. SQL é baseado no modelo relacional. 2/17

40 Modelo relacional Uma relação é como se fosse uma tabela com linhas e colunas. Adiferençaéque: I uma relação não pode ter linhas repetidas. Muitas vezes irei usar o termo tabela para me referir a uma relação (mas devem estar conscientes de que tabela e relação são coisas distintas). BD = conjunto de relações/tabelas. 3/17 Definição formal de relação Dados n conjuntos C 1, C 2,...,C n (não necessariamente distintos), R é u m a relação sobre estes n conjuntos, se for um conjunto de tuplos da forma (v 1, v 2,...,v n )emque: I v1 2 C 1 I v2 2 C 2 I... I vn 2 C n Por outras palavras, R é subconjunto do Produto Cartesiano C 1 x C 2 x... x C n. 4/17

41 Produto Cartesiano. Exemplo: A B Porto Benfica Sporting Milan Barcelona Chelsea A x B (Porto, Milan) (Porto, Barcelona) (Porto, Chelsea) (Benfica, Milan) (Benfica, Barcelona) (Benfica, Chelsea) (Sporting, Milan) (Sporting, Barcelona) (Sporting, Chelsea) 5/17 Outro exemplo C nomes C anos C duracao C acores Star Wars King Kong A Maria da UAlg sim nao NOTA: Conjuntos podem ser infinitos. 6/17

42 Outro exemplo (cont.) C nomes x C anos x C duracao x C acores (Star Wars, 1900, 1, sim) (Star Wars, 1900, 1, nao) (Star Wars, 1900, 2, sim) (Star Wars, 1900, 2, nao) (Star Wars, 1900, 3, sim)... Produto cartesiano dá o conjunto de todos os possíveis tuplos (v 1, v 2, v 3, v 4 ), em que v 1 2 C nomes, v 2 2 C anos, v 3 2 C duracao, v 4 2 C acores. 7/17 Uma possível relação sobre C nomes, C anos, C duracao, C acores (Star Wars, 1977, 124, sim) (King Kong, 1930, 120, nao) (Moulin Rouge, 2001, 124, sim) 8/17

43 Dá jeito visualizar a relação como uma tabela nome ano duração acores Star Wars sim King Kong não Moulin Rouge sim Nome das colunas são atributos. tuplo = linha. 9/17 Estas 2 tabelas representam a mesma relação. Porquê? nome ano duração acores Lion King sim Star Wars sim King Kong não Lion King sim Lion King sim ano nome acores duração 1930 King Kong não Star Wars sim Lion King sim / 17

44 Esquema da BD = descrição completa da estrutura da BD Nome das relações/tabelas Nome dos atributos Domínio dos atributos (integer, string,...) Chaves / 17 Instância da BD O conteúdo (os tuplos) de todas as relações de uma BD constitui uma instância da BD. A instância da BD muda com frequência. O esquema da BD é feito uma vez (por pessoas como vocês) e não costuma mudar. 12 / 17

45 Definição de tabelas em SQL CREATE TABLE <nome> ( <lista de elementos> ); cada elemento consiste num atributo e no respectivo tipo de dados. os tipos mais comuns são: I I I I I I INT ou INTEGER REAL ou FLOAT CHAR(n), VARCHAR(n) BOOLEAN DATE TIME 13 / 17 Exemplo: Tabela de actores CREATE TABLE Actores( nome VARCHAR(50), morada VARCHAR(70), sexo CHAR, datanascimento DATE ); 14 / 17

46 DATE e TIME oformatodedateé yyyy-mm-dd. o formato de TIME é hh:mm:ss. I poderá ter ainda fracções de segundo. Exemplos: I DATE (5 de Janeiro de 2008) I TIME 15:32:04.5 (4 segundos e meio depois das 3:32 da tarde) 15 / 17 Declaração da chave um atributo ou lista de atributos pode ser declarado como chave em SQL utilizando PRIMARY KEY. Exemplo: CREATE TABLE Actores( nome VARCHAR(50) PRIMARY KEY, morada VARCHAR(70), sexo CHAR, datanascimento DATE ); 16 / 17

47 Declaração da chave (cont.) No caso da chave ser composta, temos de especificar um elemento à parte. Exemplo: CREATE TABLE Filmes( nome VARCHAR(50), ano INTEGER, duracao INTEGER, acores BOOLEAN, PRIMARY KEY (nome,ano) ); 17 / 17

48 Conversão de modelo UML para o modelo relacional Fernando Lobo Base de Dados, Universidade do Algarve 1/19 Conversão do modelo UML para o modelo relacional Diagrama de classe! Relação I atributos da classe! atributos da relação. I chave da classe! chave da relação. I Exemplo: Filmes PK nome: string PK ano: int duracao: int acores: boolean Filmes( nome, ano, duração, acores ) 2/19

49 Conversão do modelo UML para o modelo relacional Associação entre classes! Relação I os atributos são a união das chaves das classes envolvidas. I Nota: deve-se renomear o nome dos atributos para não haver conflito de nomes. Exemplo: Filme Actor PK nome PK ano duracao acores 0..* participa 0..* PK nome morada sexo data_nascimento Participa( nomefilme, anofilme, nomeactor ) 3/19 Associação entre classes! relação. Qual a chave? 3 casos: I muitos-muitos: a chave é a união das chaves dos conjuntos entidade envolvidos. I muitos-um: a chave é a chave correspondente ao muitos. I um-um: escolhe-se uma das duas. 4/19

50 Exemplo: Participa (muitos-muitos) Filme Actor PK nome PK ano duracao acores 0..* participa 0..* PK nome morada sexo data_nascimento União da chave de Actores (nomeactor) com a chave de Filmes (nomefilme,anofilme). Participa( nomefilme, anofilme, nomeactor ) 5/19 Outro exemplo: Produz (muitos-um) Filme PK nome PK ano duracao acores 0..* produz 0..1 Estudio PK nome morada Escolhe-se apenas a chave de Filmes (nomefilme,anofilme). Produz( nomeestúdio, nomefilme, anofilme ) 6/19

51 Simplificação Relações oriundas de associações muitos-um podem ser eliminadas. Mas temos que colocar a chave da classe do lado um como atributo da relação do lado muitos. No exemplo anterior, a relação Produz pode ser eliminada se colocarmos a chave de Estúdios (nomeestudio) como atributo da relação Filmes. Porquê? Filmes( nome, ano, duração, acores, nomeestúdio ) 7/19 Exemplo completo Actor Filme PK nome PK ano duracao acores 0..* 0..* participa 0..* PK nome morada sexo data_nascimento produz 0..1 Estudio PK nome morada 8/19

52 Vai dar origem a 4 relações Filmes( nome, ano, duração, acores, nomeestúdio ) Actores( nome, morada, sexo, datanascimento ) Estúdios( nome, morada) Participa( nomeactor, nomefilme, anofilme ) 9/19 Uma possível instância da BD Filmes: nome ano duração acores nomeestúdio Star Wars true Fox Indiana Jones true Universal Actores: nome morada sexo datanascimento Harrison Ford 789 Palm Dr, Hollywood m Carrie Fisher 123 Maple St, Hollywood f Emilio Estevez 32 Elm St, Beverly Hills m / 19

53 Uma possível instância da BD (cont.) Estúdios: nome Fox Disney Universal morada 127 Springfield Av, Hollywood 14 Lincoln St, Los Angeles 23 Universal Studies Dr., Los Angeles Participa: nomeactor nomefilme anofilme Carrie Fisher Star Wars 1977 Harrison Ford Star Wars 1997 Harrison Ford Indiana Jones / 19 Classe associativa Classe associativa! Relação I os atributos são a união das chaves das classes envolvidas na associação I mais os atributos da classe associativa Exemplo: Filme Actor PK nome PK ano duracao acores 0..* Participa 0..* PK nome morada sexo data_nascimento salario Participa( nomefilme, anofilme, nomeactor, salario) 12 / 19

54 Associação de uma classe com ela própria Quando temos uma associação envolvendo objectos da mesma classe com temos de colocar a chave 2 vezes, uma para cada papel. Exemplo: Filme PK nome PK ano duracao acores * original sequencia 13 / 19 Associação de uma classe com ela própria SequênciaDe( seqnome, seqano, orignome, origano ) SequênciaDe: seqnome seqano orignome origano Rocky II 1982 Rocky I 1980 Rocky III 1985 Rocky II / 19

55 Classes de suporte Estudio Eq. Filmagem PK nome morada 0..* PK PK numero Estúdios( nome, morada) EquipasFilmagem( número, nomeestúdio ) A associação entre a classe de suporte e a classe dona pode ser eliminada (porque é muitos-um). I e não é necessário acrescentar nada a EquipasFilmagem. Porquê? 15 / 19 Sub-classes Existem 2 alternativas: 1 Criar uma relação para cada sub-classe. 2 Combinar toda a hierarquia numa única classe e usar valores NULL sempre que um atributo não se aplica. 16 / 19

56 Exemplo: Filmes PK nome PK ano duracao acores Crime Misterio Cartoons arma 17 / 19 Alternativa 1 Filmes( nome, ano, duração, acores ) CrimeMistério( nome, ano, arma) Cartoons( nome, ano) Um filme que não seja Cartoon nem de Crime-Mistério, aparece apenas na relação Filmes. Um filme que seja apenas um Cartoon (ex: Lion King ) iráaparecer nas relações Filmes e Cartoons. Um filme que seja simultaneamente um Cartoon e um CrimeMistério (ex: Who Framed Roger Rabbit ) irá aparecer em 3 relações: Filmes, Cartoons e CrimeMistério. 18 / 19

57 Alternativa 2 Filmes( nome, ano, duração, acores, arma ) Gone with the wind tem um NULL para o atributo arma. Lion King tem um NULL para arma. Murder on the orient express não tem NULLs. NOTA: Perdemos informação. Não sabemos se um determinado filme é um cartoon (ou crime-mistério, ou ambos). Solução possível: colocar mais um atributo, ex: género. 19 / 19

58 Dependências Funcionais Fernando Lobo Base de Dados, Universidade do Algarve 1/26 Motivação: Normalização Por vezes o esquema relacional tem falhas. Geralmente são derivadas de falhas no modelo conceptual. Vamos aprender a teoria de Normalização de relações, a qual permite eliminar certo tipo de falhas. 2/26

59 Exemplo Filmes1( nome, ano, duração, nomeestúdio, moradaestúdio ) nome ano duração nomeestúdio moradaestúdio Star Wars Fox 10 Elm St., Los Angeles Empire Strikes Back Fox 10 Elm St., Los Angeles Gone With the Wind Paramount 44 Pine St., Los Angeles Lion King Disney 56 Oak St., Los Angeles Return of the Jedi Fox 10 Elm St., Los Angeles Pocahontas Disney 56 Oak St., Los Angeles Qual o problema desta relação? 3/26 Problemas 1 Redundâcia I amoradadeumestúdioaparecerepetidaváriasvezes. 2 Pode dar origem a anomalias em updates. I ex: actualizar a morada no 1 o tuplo e não o fazer no 2 o e5 o tuplo. 3 Pode dar origem a anomalias em deletes. I ex: se apagarmos o filme Gone With the Wind, o estúdio Paramount desaparece da BD! 4/26

60 Normalização Estudo de Normalização de relações permite-nos decompor uma relação em várias relações de modo a que não haja este tipo de anomalias. Antes de aprender a fazê-lo, precisamos de aprender o conceito de Dependência Funcional. 5/26 Dependências Funcionais Generalização do conceito de chave. Notação: X! Y Significado: se fixarmos valores para os atributos X, os valores dos atributos Y são únicos (i.e., não há repetidos). I Nota: X e Y são conjuntos de atributos. I Usaremos..., X, Y, Z para representar conjuntos de atributos; A, B, C,... para atributos individuais. I Por vezes vamos omitir o uso de chavetas para representar conjuntos, i.e. usaremos ABC em vez de {A,B,C}. 6/26

61 No nosso exemplo... Filmes1( nome, ano, duração, nomeestúdio, moradaestúdio ) nome ano duração nomeestúdio moradaestúdio Star Wars Fox 10 Elm St., Los Angeles Empire Strikes Back Fox 10 Elm St., Los Angeles Gone With the Wind Paramount 44 Pine St., Los Angeles Lion King Disney 56 Oak St., Los Angeles Return of the Jedi Fox 10 Elm St., Los Angeles Pocahontas Disney 56 Oak St., Los Angeles nome ano! duração nomeestúdio moradaestúdio nomeestúdio! moradaestúdio 7/26 Definição é independente da instância A definição de DF é independente da instância da relação. Uma DF é uma asserção que é obedecida por todas as possíveis instâncias de uma relação. O mesmo acontece com o conceito de chave. 8/26

62 Chaves e Superchaves X é u m a superchave da relação R se: I X! todos os atributos de R. X é u m a chave da relação R, se nenhum subconjunto próprio de X for superchave de R (i.e., X é uma superchave mínima ). I NOTA: Y é subconjunto próprio de X,seY X ^ Y 6= X X é c h a v e d e R ) X é s u p e r c h a v e d e R. 9/26 Exemplo Filmes1( nome, ano, duração, nomeestúdio, moradaestúdio ) Com DF s: nome ano! duração nomeestúdio moradaestúdio nomeestúdio! moradaestúdio {nome,ano} é chave de Filmes1. Porquê? Quantas superchaves há na relação Filmes1? 10 / 26

63 DF s triviais X! Y é trivial se Y X Exemplos I I nome ano! nome nome! nome 11 / 26 Regras sobre DF s X! A 1 A 2...A n Éequivalentea: I X! A1 I X! A2 I... I X! A n Em inglês, Splitting Rule. 12 / 26

64 Não se pode fazer o mesmo do lado esquerdo Exemplo: nome ano! duração não é equivalente a: I I nome! duração ano! duração Porquê? 13 / 26 Regras sobre DF s (cont.) Transitividade: SeX! Y e Y! Z, entãox! Z. Augmentation : SeX! Y,entãoXZ! Y. 14 / 26

65 De onde vêm as DF s 1 Chaves obtidas no modelo conceptual. 2 Relações muitos-um. 3 Conhecimento do problema. 15 / 26 Exemplo: casos 1 e 2 Filme PK nome PK ano duracao acores 0..* produz 0..1 Estudio PK nome morada Filmes( nome, ano, duração, acores, nomeestúdio ) nome ano! duração acores nome ano! nomeestúdio 16 / 26

66 Exemplo: conhecimento sobre o problema (caso 3) Não pode haver 2 disciplinas que funcionam no mesmo dia da semana, à mesma hora, e na mesma sala. I sala dia hora! disciplina 17 / 26 Fecho de um conjunto de atributos Notação: o fecho de X designa-se por X +. Significado: X + é o conjunto de todos os atributos que são funcionalmente determinados por X. Algoritmo para calcular X + : 1 X + = X 2 Se A 1, A 2,...,A m! B, e todos os A 0 s estão contidos em X +, adicionar B a X +. 3 Termina quando não conseguirmos adicionar mais nada a X / 26

67 Exemplo Dada a relação R(ABCDEF ) com as seguintes DF s: I AB! C I I I I BC! A BC! D D! E CF! B (AB) + =? = AB = ABC // porque AB! C = ABCD // porque BC! D = ABCDE // porque D! E 19 / 26 Projecção de DF s Nota: Projecção = eliminar algumas colunas. Motivação: Normalização, o processo de decompor uma relação em 2 ou mais relações. Exemplo: I R(ABCD) com DF s: AB! C, C! D, ed! A. I Decompor em R1 (ABC) er 2 (AD). I Quais as DF s em R1? I AB! C, mastambémc! A. 20 / 26

68 Projecção de DF s (cont.) Dada uma relação R com um conjunto de DF s, projectar R em R 1.Quais as DF s de R 1? 1 Começar com as DF s de R e encontrar todas as DF s não triviais que se podem deduzir a partir delas. 2 Ficar apenas com as DF s cujos atributos façam parte do esquema de R / 26 Algoritmo para projectar as DF s de uma relação R numa relação R 1 1 Seja T o eventual output. Inicialmente, T = ;. 2 Para cada subconjunto X de atributos de R 1,calcularX + (usando as DF s de R). 3 Inserir X! A em T,paratodooA2(X + X ), desde que A seja atributo de R / 26

69 Simplificação Calcular o fecho de todos os subconjuntos de atributos é trabalhoso. Simplificação n o 1: I Não é necessário calcular o fecho do conjunto vazio, nem do conjunto de todos os atributos. Simplificação n o 2: I Se X + = todos os atributos, não é necessário calcular o fecho de subconjuntos que contenham X. 23 / 26 Exemplo Seja R(ABCD) com DF s A! B, B! C, C! D. Projectar R em R 1 (ACD) (i.e.,eliminaroatributob). Fechos A + = ABCD C + = CD D + = D (CD) + = CD T A! C, A! D C! D T é o conjunto de DF s de R 1. Mas podemos eliminar A! D porque pode ser deduzida a partir das outras duas. DF s de R 1 : A! C, C! D. 24 / 26

70 Equivalência de conjuntos de DF s Dois conjuntos de DF s S e T são equivalentes, se o conjunto de instâncias que satisfaz S for o mesmo que o conjunto de instâncias que satisfaz T. No exemplo que vimos há pouco: I {A! C, A! D, C! D} é e q u i v a l e n t e a {A! C, C! D} 25 / 26 Base mínima de DF s Seja S um conjunto de DF s para uma relação R. Qualquer conjunto de DF s equivalente a S é u m a base para S. Uma base mínima para uma relação R, éumabaseb que satisfaça: 1 Todas as DF s em B, têm no lado direito um só atributo. 2 Se removermos uma das DF s de B, deixa-sedeterumabase. 3 Se removermos um atributo do lado esquerdo de uma das DF s de B, deixa-se de ter uma base. 26 / 26

71 Normalização: Forma Normal de Boyce Codd 3 a Forma Normal Fernando Lobo Base de Dados, Universidade do Algarve 1/38 Normalização O objectivo é obter esquemas relacionais sem redundância e sem anomalias. Exemplo: I Filmes1( nome ano duração nomeestúdio moradaestúdio ) com DF s: nome ano! duração nome ano! nomeestúdio nome ano! moradaestúdio nomeestúdio! moradaestúdio 2/38

72 Possível instância de Filmes1 nome ano duração nomeestúdio moradaestúdio Star Wars Fox 10 Elm St., Los Angeles Empire Strikes Back Fox 10 Elm St., Los Angeles Gone With the Wind Paramount 44 Pine St., Los Angeles Lion King Disney 56 Oak St., Los Angeles Return of the Jedi Fox 10 Elm St., Los Angeles Pocahontas Disney 56 Oak St., Los Angeles 3/38 Problemas 1 Redundâcia I amoradadeumestúdioaparecerepetidaváriasvezes. 2 Pode dar origem a anomalias em updates. I ex: actualizar a morada no 1 o tuplo e não o fazer no 2 o e5 o tuplo. 3 Pode dar origem a anomalias em deletes. I ex: se apagarmos o filme Gone With the Wind, o estúdio Paramount desaparece da BD! 4/38

73 Decomposição de relações Podemos decompor o esquema de uma relação em dois esquemas mais pequenos. Dado R(A 1 A 2...A n ), podemos decompor R em 2 relações: S(B 1 B 2...B m )et (C 1 C 2...C k )detalformaque: 1 {A 1, A 2,...,A n } = {B 1, B 2,...,B m } S {C 1, C 2,...,C k } 2 S = projecção de R em {B 1, B 2,...,B m } 3 T = projecção de R em {C 1, C 2,...,C k } A ideia é que possamos reconstituir a relação original juntando as relações decompostas. I A junção é feita igualando os atributos com o mesmo nome. 5/38 Exemplo Filmes1( nome ano duração nomeestúdio moradaestúdio ) nome ano duração nomeestúdio moradaestúdio Star Wars Fox 10 Elm St., Los Angeles Empire Strikes Back Fox 10 Elm St., Los Angeles Gone With the Wind Paramount 44 Pine St., Los Angeles Lion King Disney 56 Oak St., Los Angeles Return of the Jedi Fox 10 Elm St., Los Angeles Pocahontas Disney 56 Oak St., Los Angeles Pode ser decomposto em: I Filmes2( nome ano duração nomeestúdio ) I Filmes3( nomeestúdio moradaestúdio ) 6/38

74 Exemplo (cont.) Filmes2: nome ano duração nomeestúdio Star Wars Fox Empire Strikes Back Fox Gone With the Wind Paramount Lion King Disney Return of the Jedi Fox Pocahontas Disney Filmes3: nomeestúdio Fox Paramount Disney moradaestúdio 10 Elm St., Los Angeles 44 Pine St., Los Angeles 56 Oak St., Los Angeles 7/38 Forma normal de Boyce-Codd (BCNF) Uma relação R está em BCNF sse: para todas as DF s de R não triviais X! Y, X for superchave de R. Basta existir uma DF em que X não seja superchave, para R não estar em BCNF. Se isso acontecer, diz-se que essa DF viola a condição de BCNF. 8/38

75 Exemplo: Filmes1 Filmes1( nome ano duração nomeestúdio moradaestúdio ) com DF s: nome ano! duração nome ano! nomeestúdio nome ano! moradaestúdio nomeestúdio! moradaestúdio Achaveé{nome,ano} porque: I nome ano! duração nomeestúdio moradaestúdio Filmes1 não está em BCNF porque: I {nomeestúdio} não é superchave de Filmes1. nomeestúdio! moradaestúdio, viola a condição BCNF. 9/38 Outro exemplo: Filmes2 Filmes2( nome ano duração nomeestúdio ) com DF s: nome ano! duração nome ano! nomeestúdio Achaveé{nome,ano} porque: I nome ano! duração nomeestúdio Filmes2 está em BCNF porque em todas as DF s, o lado esquerdo contém a chave. I {nome,ano} é superchave de Filmes2. 10 / 38

76 Outro exemplo: Filmes3 Filmes3( nomeestúdio moradaestúdio ) com DF s: nomeestúdio! moradaestúdio Achaveé{nomeEstúdio} porque: I nomeestúdio! moradaestúdio Filmes3 está em BCNF porque {nomeestúdio} é superchave de Filmes3. 11 / 38 Possíveis instâncias de Filmes2 e Filmes3 Filmes2: nome ano duração nomeestúdio Star Wars Fox Empire Strikes Back Fox Gone With the Wind Paramount Lion King Disney Return of the Jedi Fox Pocahontas Disney Filmes3: nomeestúdio Fox Paramount Disney moradaestúdio 10 Elm St., Los Angeles 44 Pine St., Los Angeles 56 Oak St., Los Angeles 12 / 38

77 Decomposição de relações para BCNF Não é qualquer decomposição que resolve o problema. Exemplo: Decompor Filmes1 em: I Filmes4( nome ano duração ) I Filmes5( duração nomeestúdio moradaestúdio ) 13 / 38 Resultado Filmes4: nome ano duração Star Wars Empire Strikes Back Gone With the Wind Lion King Return of the Jedi Pocahontas Filmes5: duração nomeestúdio moradaestúdio 124 Fox 10 Elm St., Los Angeles 143 Fox 10 Elm St., Los Angeles 181 Paramount 44 Pine St., Los Angeles 124 Disney 56 Oak St., Los Angeles 165 Fox 10 Elm St., Los Angeles 115 Disney 56 Oak St., Los Angeles 14 / 38

78 Qual o problema? 1 Filmes5 continua sem estar em BCNF. 2 Mais grave: se juntarmos Filmes4 com Filmes5, vamos obter tuplos que não pertenciam à relação original! nome ano duração nomeestúdio moradaestúdio Star Wars Fox 10 Elm St., Los Angeles Star Wars Disney 56 Oak St., Los Angeles Empire Strikes Back Fox 10 Elm St., Los Angeles Gone With the Wind Paramount 44 Pine St., Los Angeles Lion King Disney 56 Oak St., Los Angeles Lion King Fox 10 Elm St., Los Angeles Return of the Jedi Fox 10 Elm St., Los Angeles Pocahontas Disney 56 Oak St., Los Angeles 15 / 38 Decomposição Lossless join Uma decomposição de R em R 1 e R 2 diz-se Lossless join se ao juntarmos os tuplos de R 1 com os tuplos de R 2 (igualando os atributos com o mesmo nome), obtivermos exactamente os tuplos de R. Ex: A decomposição de Filmes1 em Filmes2 e Filmes3 é Lossless join. Ex: A decomposição de Filmes1 em Filmes4 e Filmes5 não é Lossless join. 16 / 38

79 Decomposição para BCNF AideiaéusarumaDFX! Y que viole a condição de BCNF. Calcula-se X +. I Não dá todos os atributos, caso contrário X seria superchave. Decompõe-se R em duas relações, R 1 e R 2, com os seguintes esquemas: 1 R 1 X + 2 R 2 X S (atrib(r) (X + )) 17 / 38 Graficamente R 1 atrib(r) X + X X + X R 2 R 18 / 38

80 Exemplo Filmes1( nome ano duração nomeestúdio moradaestúdio ) com DF s: nome ano! duração nome ano! nomeestúdio nomeestúdio! moradaestúdio Escolhe-se uma DF que viole BCNF: I nomeestúdio! moradaestúdio Calcula-se: I nomeestúdio + = nomeestúdio moradaestúdio Decompõe-se Filmes1 em: I Filmes2( nomeestúdio moradaestúdio ) I Filmes3( nome ano duração nomeestúdio ) 19 / 38 Exemplo (cont.) Necessitamos de verificar se Filmes2 e Filmes3 estão ambas em BCNF. Projecta-se as DF s de Filmes1 em Filmes2 e Filmes3. Para Filmes2 temos: I nome ano! duração I nome ano! nomeestúdio {nome,ano} é c h a v e d e F i l m e s 2 ) Filmes2 está em BCNF. Para Filmes3 temos: I nomeestúdio! moradaestúdio {nomeestúdio} é c h a v e d e F i l m e s 3 ) Filmes3 está em BCNF. 20 / 38

81 Outro exemplo F 1 ( nome ano nomeestúdio nomepresidente moradapresidente ) com DF s: nome ano! nomeestúdio // DF 1 nomeestúdio! nomepresidente // DF 2 nomepresidente! moradapresidente // DF 3 Chave é {nome,ano}. Porquê? DF s 2 e 3 violam BCNF. Vamos decompor usando DF 2. I nomeestúdio + = {nomeestúdio,nomepresidente,moradapresidente} Decompomos F 1 em F 2 e F 3 : I F 2 ( nomeestúdio nomepresidente moradapresidente ) I F3 ( nome ano nomeestúdio ) 21 / 38 Outro exemplo (cont.) Agora é necessário ver se F 2 e F 3 estão em BCNF. Projecta-se as DF s de F 1 em F 2 e F 3. Para F 2 : nomeestúdio! nomepresidente nomepresidente! moradapresidente I chave é {nomeestúdio}. I nomepresidente! moradapresidente, viola BCNF. I é necessário decompor F2 em F 4 e F 5. Para F 3 : nome ano! nomeestúdio I chave é {nome,ano}. I F 3 está em BCNF. 22 / 38

82 Outro exemplo (cont.) Decomposição de F 2 em F 4 e F 5. F 2 ( nomeestúdio nomepresidente moradapresidente ) DF s: nomeestúdio! nomepresidente nomepresidente! moradapresidente nomepresidente + = {nomepresidente,moradapresidente} F 4 ( nomepresidente moradapresidente ) I DF s: nomepresidente! moradapresidente. I {nomepresidente} é c h a v e. F4 está em BCNF. F 5 ( nomeestúdio nomepresidente ) I DF s: nomeestúdio! nomepresidente. I {nomeestúdio} é c h a v e. F5 está em BCNF. 23 / 38 Em resumo F 1 ( nome ano nomeestúdio nomepresidente moradapresidente ) com DF s: nome ano! nomeestúdio nomeestúdio! nomepresidente nomepresidente! moradapresidente Foi decomposto em F 3, F 4, F 5 : F 3 ( nome ano nomeestúdio ) F 4 ( nomepresidente moradapresidente ) F 5 ( nomeestúdio nomepresidente ) 24 / 38

83 Decomposição para BCNF A decomposição baseada na utilização de uma DF que viole a condição de BCNF, é sempre lossless join. Qualquer relação com apenas 2 atributos está sempre em BCNF. Tentem prová-lo. 25 / 38 3 a Forma Normal: Motivação Por vezes a decomposição para BCNF não preserva as DF s da relação original. Nesses casos, não devemos decompor para BCNF. A situação ocorre tipicamente quando temos DF s com a seguinte estrutura: XY! Z Z! Y 26 / 38

84 Exemplo CartazFilmes( filme, cinema, cidade ) cinema cinema onde o filme passa (ex: Forum Algarve). cidade cidade onde se encontra o cinema. Vamos supor que na mesma cidade não pode passar o mesmo filme em cinemas diferentes. Vamos também supor que um cinema pode ter várias salas. DF s: cinema! cidade filme cidade! cinema 27 / 38 Exemplo (cont.) CartazFilmes tem 2 chaves I {filme,cidade} I {cinema,filme} cinema! cidade, viola BCNF. Somos tentados a decompor CartazFilmes. Obteríamos: I Cartaz1 (cinema,cidade), com DF s: cinema! cidade I Cartaz2 (filme,cinema), com DF s: {} Mas não conseguimos satisfazer a DF filme cidade! cinema em nenhuma das relações resultantes da decomposição! 28 / 38

85 Exemplo (cont.) É possível haver instâncias de Cartaz 1 ecartaz 2 que satisfaçam as respectivas DF s (i.e., cinema! cidade) Mas que a junção viole a DF original: filme cidade! cinema. 29 / 38 Exemplo (cont.) Cartaz 1 : cinema Forum Algarve Santo António cidade Faro Faro Cartaz 2 : filme Jesse James Jesse James cinema Forum Algarve Santo António Cartaz 1./ Cartaz 2 : cinema cidade filme Forum Algarve Faro Jesse James Santo António Faro Jesse James 30 / 38

86 3 a Forma Normal A3 a Forma Normal (3FN) relaxa a condição de BCNF. Uma relação R está na 3FN se para todas as DF s não triviais X! Y,severificarque: I I X é s u p e r c h a v e d e R, ou Y é m e m b r o d e u m a c h a v e d e R Se R está em BCNF ) R está em 3FN 31 / 38 Exemplo CartazFilmes( filme, cinema, cidade ) com DF s: cinema! cidade filme cidade! cinema está na 3FN porque cidade faz parte de uma chave. recordem-se que havia 2 chaves: {filme,cidade} e {cinema,filme}. 32 / 38

87 Propriedades importantes de uma decomposição Duas propriedades que uma decomposição deve obedecer: 1 Lossless join: ser possível reconstituir a relação original a partir das relações decompostas. 2 Preservação de dependências: ser possível verificar as DF s originais nas relações decompostas. BCNF garante (1). 3FN garante (1) e (2). 33 / 38 Decomposição para a 3FN Objectivo: Decompor uma relação R num conjunto de relações que estejam todas na 3FN. A decomposição terá a propriedade Lossless join e também irá preservar as dependências funcionais. 34 / 38

88 Algoritmo de decomposição para a 3FN Input: umarelaçãor com um conjunto de DF s F. Output: uma decomposição de R num conjunto de relações, todas elas na 3FN. Método: 1 G =basemínimaparaf. 2 Para cada DF X! A em G, usarxa como esquema de uma das relações decompostas. 3 Se nenhum dos esquemas resultantes do passo (2) for uma superchave de R, acrescentarumarelaçãocujoesquemasejaumachaveder. 35 / 38 Exemplo R(ABCDE) com DF s AB! C, C! B, ea! D. 1 As DF s dadas são uma base mínima (ver justificação nos próximos slides). 2 Obtemos as relações R 1 (ABC), R 2 (BC), R 3 (AD). (R 2 pode ser eliminada porque o seu esquema está contido no esquema de R 1 ). 3 R tem duas chaves: ABE e ACE. Temos de acrescentar uma delas, por exemplo R 4 (ABE). 36 / 38

89 Exemplo (cont.) Justificação para {AB! C, C! B, A! D} ser uma base mínima. 1 O lado direito de todas as DFs só tem 1 atributo. 2 Não conseguimos inferir nenhuma das DF s a partir das outras duas. Verificação: I será que AB! C pode ser inferido de {C! B, A! D}? calcular (AB) + usando {C! B, A! D}. (AB) + = ABD. ) AB! C não pode ser inferido de {C! B, A! D}. I fazer verificação análoga para provar que: F F C! B não pode ser inferido de {AB! C, A! D}. A! D não pode ser inferido de {AB! C, C! B}. 37 / 38 Exemplo (cont.) Justificação para {AB! C, C! B, A! D} ser uma base mínima. 3. não conseguimos eliminar atributos do lado esquerdo de nenhuma DF e continuar a ter uma base. I a única hipótese seria eliminar A ou B em AB! C. I se eliminarmos A, temos de demonstrar que B! C não pode ser inferido a partir de {AB! C, C! B, A! D}. B + = B. I fazer verificação análoga para o caso de eliminarmos B. 38 / 38

90 Álgebra Relacional Fernando Lobo Base de Dados, Universidade do Algarve 1 / 50 Álgebra relacional Conjunto de operadores que permitem manipular relações: 1 operações sobre conjuntos: [, \, 2 remover linhas (selecção), remover colunas (projecção). 3 operações que combinam informação contida em várias relações: produtos cartesianos e joins. 4 mudar o nome a relações e atributos. As expressões em álgebra relacional são uma espécie de programa. 2 / 50

91 Operações sobre conjuntos: União ([) Filmes 1 nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney Filmes 2 nome ano estúdio Indiana Jones 1981 Universal King Kong 1933 MGM Pocahontas 1998 Disney Filmes 1 [ Filmes 2 nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney Indiana Jones 1981 Universal 3 / 50 Operações sobre conjuntos: Intersecção (\) Filmes 1 nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney Filmes 2 nome ano estúdio Indiana Jones 1981 Universal King Kong 1933 MGM Pocahontas 1998 Disney Filmes 1 \ Filmes 2 nome ano estúdio Pocahontas 1998 Disney King Kong 1933 MGM 4 / 50

92 Operações sobre conjuntos: Diferença ( ) Filmes 1 : nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney Filmes 2 : nome ano estúdio Indiana Jones 1981 Universal King Kong 1933 MGM Pocahontas 1998 Disney Filmes 1 Filmes 2 nome ano estúdio Star Wars 1977 Fox Lion King 1997 Disney 5 / 50 Operações sobre conjuntos NOTA: Quando se aplica operadores sobre conjuntos, as relações têm de ter esquemas relacionais idênticos....e a lista de atributos de cada relação têm de aparecer pela mesma ordem. caso contrário estes operadores não fazem sentido. 6 / 50

93 Remover linhas: Selecção ( ) Notação: Filmes c(r), onde c é uma condição. nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney estúdio = Disney (Filmes) nome ano estúdio Pocahontas 1998 Disney Lion King 1997 Disney 7 / 50 Remover colunas: Projecção ( ) Notação: ` (R), onde ` é uma lista de atributos de R. Filmes nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney nome, estúdio (Filmes) nome Star Wars Pocahontas King Kong Lion King estúdio Fox Disney MGM Disney 8 / 50

94 Outro exemplo Filmes nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King King 1933 MGM Lion King 1997 Disney estúdio (Filmes) estúdio Fox Disney MGM 9 / 50 Selecção e projecção juntos Filmes nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King King 1933 MGM Lion King 1997 Disney nome, ano ano < 1990 (Filmes) nome ano Star Wars 1977 King Kong / 50

95 Combinar relações Produto Cartesiano: R = R 1 R 2 faz a concatenação de cada tuplo t 1 de R 1 com cada tuplo t 2 de R 2 e coloca o tuplo t 1 t 2 em R. Theta Join: R = R 1 Z c R 2 é equivalente a: R = c (R 1 R 2 ) Natural Join: R = R 1 Z R 2 é equivalente a um theta join em que a condição c diz que os atributos com o mesmo nome são igualados. Depois, uma das colunas é projectada. 11 / 50 Produto Cartesiano ( ) Filmes nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney Estúdios nome Fox Disney MGM morada Elm St. Pine St. Oak Dr. 12 / 50

96 Produto Cartesiano Filmes Estúdios Filmes.nome ano estúdio Estúdios.nome morada Star Wars 1977 Fox Fox Elm St. Star Wars 1977 Fox Disney Pine St. Star Wars 1977 Fox MGM Oak Dr. Pocahontas 1998 Disney Fox Elm St. Pocahontas 1998 Disney Disney Pine St. Pocahontas 1998 Disney MGM Oak Dr. King Kong 1933 MGM Fox Elm St. King Kong 1933 MGM Disney Pine St. King Kong 1933 MGM MGM Oak Dr. Lion King 1997 Disney Fox Elm St. Lion King 1997 Disney Disney Pine St. Lion King 1997 Disney MGM Oak Dr. 13 / 50 Theta Join (Z C ) Filmes nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney Estúdios nome Fox Disney MGM morada Elm St. Pine St. Oak Dr. Filmes Z Filmes.estúdio=Estúdios.nome Estúdios Filmes.nome ano estúdio Estúdios.nome morada Star Wars 1977 Fox Fox Elm St. Pocahontas 1998 Disney Disney Pine St. King Kong 1933 MGM MGM Oak Dr. Lion King 1997 Disney Disney Pine St. 14 / 50

97 Natural Join (Z) Filmes nome ano estúdio Star Wars 1977 Fox Pocahontas 1998 Disney King Kong 1933 MGM Lion King 1997 Disney Estúdios estúdio Fox Disney MGM morada Elm St. Pine St. Oak Dr. Filmes Z Estúdios nome ano estúdio morada Star Wars 1977 Fox Elm St. Pocahontas 1998 Disney Pine St. King Kong 1933 MGM Oak Dr. Lion King 1997 Disney Pine St. 15 / 50 Mudar o nome a relações e atributos ( ) Notação: S(A1,A 2,...,A n ) (R) Estúdios produz uma relação de nome S idêntica a R e com os atributos chamados A 1, A 2,...,A n estúdio Fox Disney MGM morada Elm St. Pine St. Oak Dr. S(nome,rua) (Estúdios) nome Fox Disney MGM rua Elm St. Pine St. Oak Dr. 16 / 50

98 Notação linear para expressões A ideia é atribuir nomes para relações intermédias. Exemplo: Dado o esquema relacional, Filmes( nome, ano, duração, acores, estúdio ) Participa( nomefilme, anofilme, nomeactor ) Qual o nome e ano dos filmes a cores em que participou Jack Nicholson? R 1 B nome,ano acores = TRUE (Filmes) R 2 B nomefilme,anofilme nomeactor = Jack Nicholson (Participa) R 3 B R 1 \ R 2 17 / 50 Expressões em forma de árvore U π nome,ano π nomefilme,anofilme σacores = TRUE σnomeactor = Jack Nicholson Filmes Participa 18 / 50

99 Restrições em relações R não tem tuplos. R = ; Todo o tuplo de R também é tuplo de S. R S R S R S = ; Pergunta: Qual o significado de, estúdio (Filmes) nome (Estúdios) 19 / 50 Exercício Actores( nome, morada ) nome morada Nicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., Hollywood Quais os actores que partilham a mesma morada? Isto é, pretende-se obter uma relação com dois atributos, nome1 e nome2, em que cada tuplo representa um par de actores com a mesma morada. nome1 nome2 Angelina Jolie Brad Pitt / 50

100 Exercício (cont.) Só com projecções e selecções não vamos lá... Necessitamos de comparar as moradas de actores diferentes e verificar se são iguais. Alguma ideia? 21 / 50 Exercício (cont.) A solução reside em combinar a relação Actores com ela própria. I obtemos uma cópia da relação Actores através do operador. I I fazemos um join de Actores com a cópia obtida, colocando como condição que os actores tenham a mesma morada (mas que se tratem de actores diferentes). e depois projectamos os atributos nome1 e nome2 Actores2( nome2, morada2 ) (Actores) morada=morada2 ^ nome,nome2 (Actores Actores2) nome,nome2 (...) 22 / 50

101 Debugging passo a passo Actores( nome, morada ) nome Nicole Kidman Brad Pitt Harrison Ford Angelina Jolie morada 26 Palm Dr., Hollywood 12 Oak St., Hollywood 789 Palm Dr., Beverly Hills 12 Oak St., Hollywood Actores2( nome2, morada2 ) (Actores) nome2 Nicole Kidman Brad Pitt Harrison Ford Angelina Jolie morada2 26 Palm Dr., Hollywood 12 Oak St., Hollywood 789 Palm Dr., Beverly Hills 12 Oak St., Hollywood 23 / 50 Debugging passo a passo (cont.) Actores Actores2 nome morada nome2 morada 2 Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood 24 / 50

102 Debugging passo a passo (cont.) morada=morada2 (Actores Actores2) nome morada nome2 morada 2 Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood 25 / 50 Debugging passo a passo (cont.) morada=morada2 ^ nome,nome2 (Actores Actores2) nome morada nome2 morada 2 Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood 26 / 50

103 Debugging passo a passo (cont.) nome1, nome2 morada=morada2 ^ nome,nome2 (Actores Actores2) nome Brad Pitt Angelina Jolie nome2 Angelina Jolie Brad Pitt Podemos fazer com que o mesmo par só apareça uma vez, colocando nome1 < nome2 (ou nome1 > nome2) em vez de nome1, nome2. 27 / 50 Debugging passo a passo (cont.) Para não termos expressões muito compridas, é útil utilizarmos a notação linear com relações intermédias. Actores2( nome2, morada 2) B Actores Temp B morada=morada2 ^ nome<nome2 (Actores Actores2) Resultado B nome, nome2 (Temp) 28 / 50

104 Operações sobre sacos (bags) Um conjunto não tem elementos repetidos. Um saco pode ter. Em ambos os casos a ordem dos elementos não interessa. I {1,2,3} = {3,1,2}. I {1,1,2,3,1,3} = {3,2,1,1,3,1}. 29 / 50 União, intersecção, e diferença de sacos Se R e S são sacos, e um tuplo t ocorre n vezes em R e m vezes em S, então: t ocorre n + m vezes em R [ S. t ocorre min(n, m) vezes em R \ S. t ocorre max(0, n m) vezes em R S. 30 / 50

105 Exemplos R R [ S R \ S R S A B A B A B A B S A B / 50 Projecção de sacos R A,B (R) A B C A B / 50

106 Porquê sacos em vez de conjuntos? Operadores podem ser implementados de forma mais eficiente. Exemplo: Projecção. (SGBD não necessita de verificar a existência de tuplos repetidos). Podemos querer calcular médias ou somas (ou outro tipo de estatística) aos componentes de um atributo. 33 / 50 Selecção, produto cartesiano, joins Idêntico ao caso de conjuntos. R R S R Z R.B < S.B (S) S A B B C A R.B S.B C A R.B S.B C / 50

107 Operadores extendidos de álgebra relacional 1 Eliminação de tuplos repetidos. 2 Operadores de agregação (utilizados juntamente com o operador de agrupamento). 3 Agrupamento de tuplos. 4 Projecção extendida. 5 Ordenação. 6 Outerjoin. 35 / 50 Eliminação de repetidos ( ) Converte um saco de tuplos num conjunto de tuplos. R (R) A B A B / 50

108 Operadores de agregação 1 SUM 2 AVG 3 MIN e MAX I pode ser aplicado a valores numéricos ou a strings de caracteres (MIN=1 o, MAX=último, na ordem lexicográfica) 4 COUNT I número de valores de uma coluna (incluindo repetidos). 37 / 50 Exemplos R A B SUM(B) = = 10 AVG(A) = ( )/4 = 1.5 MIN(A) = 1 MAX(A) = 3 COUNT(A) = 4 38 / 50

109 Agrupamento de tuplos ( ) Cria grupos de acordo com o valor de um ou mais atributos. Pode-se aplicar agregações (SUM, AVG, MAX,...) a cada grupo. Forma geral: L(R). L é uma lista de elementos, em que cada qual pode ser: I um atributo de R (sobre o qual R será agrupado). I uma agregação aplicada a um atributo de R. 39 / 50 Como funciona? A relação obtida L (R) é obtida por: 1 separando os tuplos de R em grupos (um grupo para todos os tuplos que tenham os mesmos valores nos atributos agrupados). 2 para cada grupo, produzir um tuplo que consiste em: I I os valores dos atributos agrupados para esse grupo, e as agregações, relativas a cada grupo, para cada operador de agregação que conste em L. 40 / 50

110 Exemplo Filmes nome ano duração acores estúdio Lion King true Disney Total Recall true Fox Pocahontas true Disney Return of the Jedi true Fox Gone With the Wind false Paramount Dances with Wolves true Fox Número de filmes feito por estúdio. estúdio, COUNT(nome)! num. filmes (Filmes) estúdio num. filmes Disney 2 Fox 3 Paramount 1 41 / 50 Como funciona? nome ano duração acores estúdio Lion King true Disney Pocahontas true Disney Total Recall true Fox Return of the Jedi true Fox Dances with Wolves true Fox Gone With the Wind false Paramount COUNT(nome) é aplicado a cada grupo. 42 / 50

111 Outro exemplo Filmes nome ano duração acores estúdio Lion King true Disney Total Recall true Fox Pocahontas true Disney Return of the Jedi true Fox Gone With the Wind false Paramount Dances with Wolves true Fox Duração mínima e máxima dos filmes feitos por cada estúdio num determinado ano. estúdio, ano, MIN(duração)! dur. mínima, MAX(duração)! dur. máxima (Filmes) estúdio ano dur. mínima dur. máxima Disney Disney Fox Fox Paramount / 50 Como funciona? nome ano duração acores estúdio Lion King true Disney Pocahontas true Disney Return of the Jedi true Fox Total Recall true Fox Dances with Wolves true Fox Gone With the Wind false Paramount grupos são feitos para cada par de valores distintos em (estúdio,ano). para cada grupo, calcula-se MIN(duração) e MAX(duração). 44 / 50

112 Projecção extendida, L (R) Cada elemento de L pode ser: 1 Um atributo de R. 2 Uma expressão x! y (em que x e y são nomes de atributos, equivalente a um rename de x para y). 3 Uma expressão E! z (em que E pode envolver atributos de R, constantes, e operadores aritméticos e de strings). 45 / 50 Exemplo R A, B+C! X (R) A B C A X / 50

113 Ordenação, L (R) Converte R para uma lista ordenada segundo os atributos especificados na lista L. Exemplo: B,C (R) ordena os tuplos de R por B, e em caso de empate por C. R B,C (R) A B C A B C / 50 Outerjoin (Z) Adiciona ao output tuplos que falham a condição de join. Esses tuplos ficam com o símbolo null (?) nos atributos que não possuem. Existem variantes: Outer Join, Left Outer Join, Right Outer Join. 48 / 50

114 Exemplo U U Z V V A B C B C D A B C D ? 7 8 9?? / 50 Left e Right Outerjoin (Z L e Z R ) U U Z L V V A B C B C D U Z R V A B C D ? 7 8 9? A B C D ? / 50

115 SQL: Interrogações simples Fernando Lobo Base de Dados, Universidade do Algarve 1 / 20 Structured Query Language (SQL) É uma implementação da álgebra relacional incluindo os operadores extendidos. Contém um ou outro aspecto que não existe em álgebra relacional. Para além de operadores de interrogação, contém comandos de inserção, actualização e remoção de tuplos. Contém também comandos de definição de relações/tabelas. É uma linguagem usada em praticamente todos os SGBDs. 2 / 20

116 Porquê SQL? É uma linguagem de muito alto nível. Bem mais adequada para manipular relações do que linguagens como o C ou Java. O programador apenas se tem de preocupar com o conceito de relação/tabela. Não necessita de saber detalhes físicos sobre, 1 o modo como as tabelas são implementadas, e 2 o modo como as interrogações são executadas. As interrogações em SQL são optimizadas pelo SGBD. 3 / 20 SQL também tem limitações Não é uma linguagem completa. Não se consegue calcular o factorial de um número em SQL. Mas consegue-se fazer programas de 5 linhas que necessitariam de centenas de linhas de código em C. 4 / 20

117 Vamos usar este esquema para a BD de filmes Estudios(nome, morada) Realizadores(nome, categoria) Filmes(nome, ano, duracao, acores, nomeestudio, nomerealizador) Actores(nome, morada, sexo, datanascimento) Participa(nomeFilme, anofilme, nomeactor) 5 / 20 Interrogações simples: SELECT-FROM-WHERE SELECT atributos FROM uma ou mais relações WHERE condição SELECT nome FROM Filmes WHERE ano=1977; 6 / 20

118 SELECT-FROM-WHERE Não confundir SELECT com o operador de selecção da álgebra relacional. SELECT é equivalente à projecção ( ). WHERE é equivalente à selecção ( ). 7 / 20 Operação em termos de álgebra relacional SELECT nome FROM Filmes WHERE ano=1977; 1 Começar com a relação que aparece a seguir a FROM. 2 Aplicar o operador usando a condição do WHERE. 3 Aplicar o operador usando os atributos de SELECT. 8 / 20

119 SQL versus Álgebra Relacional Quais os filmes feitos em 1977? SQL Álgebra Relacional SELECT nome FROM Filmes WHERE ano=1977; nome ano = 1977 (Filmes) 9 / 20 Outra maneira de pensar SELECT nome FROM Filmes WHERE ano=1977; Imaginem uma variável que percorre todos os tuplos da relação. Verifica se satisfaz a condição WHERE. Se sim, envia os atributos especificados em SELECT para o output. 10 / 20

120 Asterisco dá todos os atributos SELECT * FROM Participa WHERE nomefilme= Moulin Rouge ; nomefilme anofime nomeactor Moulin Rouge 2001 Nicole Kidman Moulin Rouge 2001 Ewan McGregor Moulin Rouge 2001 Jim Broadbent 11 / 20 Mudar o nome a colunas utilizar AS <novo nome> SELECT nome AS nome do filme FROM Filmes WHERE ano=1977; nome do filme Star Wars Saturday Night Fever / 20

121 Operadores lógicos a cláusula WHERE pode ter operadores lógicos (AND, OR, NOT) pode-se usar os operadores relacionais habituais ( =, <>, <, >, <=, >= ) SELECT nome, duracao FROM Filmes WHERE estudio= Disney AND ano=1977; 13 / 20 Expressões em SELECTs pode-se usar expressões como elementos da cláusula SELECT. SELECT nome, ano, duracao/60 AS duração em horas FROM Filmes; nome ano duração em horas Star Wars Empire Strikes Back Return of the Jedi Moulin Rouge / 20

122 Padrões (pattern matching em strings) a condição WHERE pode especificar uma comparação entre uma string e um padrão. <atributo> LIKE <padrão> <atributo> NOT LIKE <padrão> um padrão é uma string em que % significa 0 ou mais caracteres e significa apenas 1 caracter. 15 / 20 Exemplo Quais são os filmes cujo nome contem a palavra King? SELECT nome, ano FROM Filmes WHERE nome LIKE %King% ; nome ano King Kong 1933 King Kong 1976 Lion King / 20

123 SQL trabalha com sacos SELECT nomeestudio FROM Filmes; nomeestudio Fox Fox Fox Disney Paramount Disney / 20 Usar DISTINCT para eliminar repetidos SELECT DISTINCT(nomeEstudio) FROM Filmes; nomeestudio Fox Disney Paramount Universal Warner Brothers 18 / 20

124 Ordenação de tuplos ORDER BY <lista de atributos> ordem crescente por defeito (colocar DESC para ordem decrescente) ordem lexicográfica para strings. 19 / 20 Exemplos Filmes da Disney ordenados por ano, e dentro de cada ano, ordenados por nome. SELECT * FROM Filmes WHERE nomeestudio= Disney ORDER BY ano, nome; Filmes da Disney ordenados por ordem decrescente de duração, e em caso de empate, ordenados por ordem crescente de nome. SELECT * FROM Filmes WHERE nomeestudio= Disney ORDER BY duracao DESC, nome; 20 / 20

125 SQL: Definição de tabelas, Modificações à Base de Dados Fernando Lobo Base de Dados, Universidade do Algarve 1 / 24 Definição do esquema da base de dados O esquema da BD é composto pelas definições de todas as tabelas da BD. Existem outros elementos (views, índices, triggers) que também fazem parte do esquema e que veremos mais tarde. 2 / 24

126 Definição de tabelas CREATE TABLE <nome> ( <lista de elementos> ); Cada elemento consiste num atributo e no respectivo tipo de dados. Os tipos mais comuns são: INTEGER, FLOAT, BOOLEAN, CHAR(n), VARCHAR(n), DATE, TIME. Exemplo: CREATE TABLE Actores( nome VARCHAR(50), morada VARCHAR(70), sexo CHAR, datanascimento DATE ); 3 / 24 DATE e TIME O formato de DATE é yyyy-mm-dd O formato de TIME é hh:mm:ss. Poderá ter ainda fracções de segundo. Exemplos: I DATE (25 de Abril de 2003) I TIME 15:32:04.5 (4 segundos e meio depois das 3:32 da tarde) 4 / 24

127 Declaração de chaves Um atributo ou lista de atributos pode ser declarado como chave em SQL utilizando PRIMARY KEY ou UNIQUE. Exemplo: CREATE TABLE Actores( nome VARCHAR(50) PRIMARY KEY, morada VARCHAR(70), sexo CHAR, datanascimento DATE ); 5 / 24 Declaração de chaves (cont.) No caso da chave ser composta, temos de especificar um elemento à parte. Exemplo: CREATE TABLE Filmes( nome VARCHAR(50), ano INTEGER, duracao INTEGER, acores BOOLEAN, nomeestudio VARCHAR(30), nomerealizador VARCHAR(50), PRIMARY KEY (nome,ano) ); 6 / 24

128 PRIMARY KEY versus UNIQUE também se pode usar UNIQUE para especificar uma chave. cada tabela só pode ter uma PRIMARY KEY, mas pode ter vários UNIQUEs. os atributos declarados como PRIMARY KEY não podem ser NULL, mas os declarados como UNIQUE podem (e até podem ter vários NULLs). 7 / 24 Restrição NOT NULL Podemos forçar um atributo a não poder ser NULL. Exemplo: CREATE TABLE Alunos( nome VARCHAR(50) NOT NULL, numero CHAR(6) PRIMARY KEY, bi CHAR(10) UNIQUE, numcontrib CHAR(10) UNIQUE, morada VARCHAR(100) ); -- bi, numcontrib e morada ficam com NULL INSERT INTO Alunos(nome,numero) VALUES ( Tó Tabelas, ); -- SGBD rejeita porque nome não pode ser NULL INSERT INTO Alunos(numero,bi) VALUES ( 23384, ); 8 / 24

129 Chaves estrangeiras (integridade referencial) Uma chave estrangeira é um conjunto de atributos que faz referência a um conjunto de atributos de uma outra tabela (eventualmente até poderia ser a própria tabela). Os atributos referenciados têm de ser uma chave da outra tabela (declarados como PRIMARY KEY ou UNIQUE), daí o nome chave estrangeira. Em SQL: FOREIGN KEY( <lista de atributos> ) REFERENCES <tabela> ( <lista de atributos> ) 9 / 24 Exemplo Participa(nomeFilme, anofilme, nomeactor) O valor do atributo nomeactor tem de existir na tabela de Actores. A mesma coisa para o par {nomefilme,anofilme} relativamente à tabela de Filmes. CREATE TABLE Participa( nomefilme VARCHAR(50), anofilme INTEGER, nomeactor VARCHAR(50), PRIMARY KEY (nomefilme,anofilme,nomeactor), FOREIGN KEY (nomeactor) REFERENCES Actores(nome), FOREIGN KEY (nomefilme,anofilme) REFERENCES Filmes(nome,ano) ); 10 / 24

130 Forçar a integridade referencial Participa: Actores: nomefilme anofilme nomeactor The Fugitive 1993 Harrison Ford Moulin Rouge 2001 Nicole Kidman Indiana Jones 1981 Harrison Ford nome morada... Nicole Kidman 26 Palm Dr., Hollywood... Harrison Ford 789 Palm Dr., Beverly Hills... Kevin Costner 88 Palm Dr., Hollywood Vamos substituir Harrison Ford por Fernando Lobo no filme The Fugitive. O que é que vai acontecer? E se apagarmos a Nicole Kidman da tabela de Actores? 11 / 24 Forçar a integridade referencial (cont.) Um INSERT ou UPDATE na tabela Participa é rejeitado caso o actor não exista. I O SGBD rejeita a substituição de Harrison Ford por Fernando Lobo. Um DELETE ou UPDATE à tabela de Actores pode fazer com que determindos valores na tabela Participa deixem de fazer sentido. I I Ex: Apagar a Nicole Kidman da tabela de Actores. Existem 3 alternativas possiveis de resolver o problema em SQL. 12 / 24

131 Forçar a integridade referencial (cont.) As 3 alternativas são: 1 rejeitar modificações (opção por defeito em SQL). 2 SET NULL: nomeactor em Participa fica com NULL. 3 CASCADE: propagar as alterações. I I apagar actor da tabela de Actores =) SGBD apaga todos os tuplos de Participa que tenham esse actor. actualizar actor na tabela de Actores =) SGBD actualiza todos os tuplos de Participa que tenham esse actor. 13 / 24 Forçar a integridade referencial (cont.) Quando declaramos uma chave estrangeira, podemos especificar SET NULL ou CASCADE, quer para DELETEs quer para UPDATEs. Se não o fizermos, o SGBD rejeita as modificações. Sintaxe: FOREIGN KEY( <lista de atributos> ) REFERENCES <tabela> ( <lista de atributos> ) ON UPDATE [SET NULL CASCADE] ON DELETE [SET NULL CASCADE] 14 / 24

132 Exemplo CREATE TABLE Participa( nomefilme VARCHAR(50), anofilme INTEGER, nomeactor VARCHAR(50), PRIMARY KEY (nomefilme,anofilme,nomeactor), FOREIGN KEY (nomeactor) REFERENCES Actores(nome) ON UPDATE CASCADE ON DELETE SET NULL, FOREIGN KEY (nomefilme,anofilme) REFERENCES Filmes(nome,ano) ); Se actualizarmos o nome de um actor na tabela de Actores, essa modificação é propagada para todos os tuplos da tabela Participa que fazem referência a esse actor. E se apagarmos um actor na tabela de Actores? SET NULL só faz sentido se a chave for declarada como UNIQUE. 15 / 24 Modificações à BD Existem comandos para alterar o estado da BD. Ao contrário dos SELECTs, os comandos de modificação não retornam uma tabela. Existem 3 tipos de modificações: 1 INSERT insere um ou mais tuplos. 2 DELETE apaga um ou mais tuplos. 3 UPDATE actualiza os valores de um ou mais tuplos. 16 / 24

133 INSERT Para inserir um tuplo: INSERT INTO <tabela> VALUES( <lista de valores> ); Exemplo: INSERT INTO Actores VALUES ( Nicole Kidman, 26 Palm Dr., Hollywood, f, ); 17 / 24 INSERT (cont.) Pode-se especificar uma lista de atributos. Dois motivos para o fazer: 1 quando não nos lembramos da ordem pela qual os atributos foram definidos na criação da tabela. 2 quando não temos todos os valores e queremos que o SGBD preencha os atributos em falta com NULL (ou com um valor por defeito). Para especificar um valor por defeito faz-se: <atributo> <tipo> DEFAULT <valor> 18 / 24

134 Exemplo Se a tabela de filmes for definida assim: CREATE TABLE Filmes( nome VARCHAR(50), ano INTEGER, duracao INTEGER, acores BOOLEAN DEFAULT true, nomeestudio VARCHAR(30), PRIMARY KEY (nome,ano) ); e se fizermos, INSERT INTO Filmes(nome,ano,nomeEstudio) VALUES( Lion King,1994, Disney ); duracao fica com NULL, acores fica com True. 19 / 24 Inserir vários tuplos de uma vez só Podemos inserir o resultado de uma query numa tabela. INSERT INTO <tabela> ( <subquery> ); Exemplo: Inserir na tabela de actores todos os actores que tenham participado nalgum filme. INSERT INTO Actores(nome) ( SELECT DISTINCT nomeactor FROM Participa ); I morada dos actores fica com NULL. 20 / 24

135 DELETE Para apagar tuplos que satisfaçam uma determinada condição deve fazer-se: DELETE FROM <tabela> WHERE <condição>; Exemplo 1: Apagar todos os filmes cuja duração seja inferior a 120 minutos. DELETE FROM Filmes WHERE duracao < 120; Exemplo 2: Apagar todos os filmes. DELETE FROM Filmes; 21 / 24 UPDATE Para actualizar tuplos de uma tabela deve fazer-se: UPDATE <tabela> SET <lista de atribuições> WHERE <condição>; Exemplo 1: Actualizar a duração do filme King Kong realizado em 1976 para 127 minutos. UPDATE Filmes SET duracao = 127 WHERE nome = King Kong AND ano = 1976; Exemplo 2: Passar todos os filmes anteriores a 1970 para preto e branco. UPDATE Filmes SET acores = false WHERE ano < 1970; 22 / 24

136 Modificar a definição de uma tabela Retirar a coluna acores da tabela de Filmes. ALTER TABLE Filmes DROP acores; Voltar a colocar a coluna acores. ALTER TABLE Filmes ADD acores BOOLEAN; -- acores fica com NULL 23 / 24 Eliminar tabelas Utilizar DROP TABLE. -- apaga a tabela de filmes DROP TABLE Filmes; Qual a diferença entre estas duas instruções? DROP TABLE Filmes; DELETE FROM Filmes; 24 / 24

137 SQL: Joins e operações sobre conjuntos Fernando Lobo Base de Dados, Universidade do Algarve 1 / 11 Interrogações que envolvem mais do que uma tabela (produto cartesiano e Joins) Pode-se combinar informação de várias relações. Coloca-se o nome das relações a seguir a FROM. Atributos com o mesmo nome distinguem-se por <Nome da Relação>.<Atributo> 2 / 11

138 Operação em termos de álgebra relacional É semelhante às interrogações feitas a uma só relação: 1 Começa com o produto cartesiano das relações que aparecem a seguir a FROM. 2 Aplica o operador usando a condição do WHERE. 3 Aplica o operador usando os atributos de SELECT. 3 / 11 Outra maneira de pensar Imaginem n variáveis, uma para cada relação. Cada variável percorre os tuplos de uma relação (em todas as combinações possíveis como se fossem loops encadeados). Verifica se satisfaz a condição WHERE. Se sim, envia os atributos especificados em SELECT para o output. 4 / 11

139 Interpretação em termos de loops encadeados SELECT A1,A2,...,Ak FROM R1,R2,...,Rn WHERE C; for each t1 in R1 do for each t2 in R2 do... for each tn in Rn do if( condição C é verdadeira quando substituimos t1,t2,...,tn pelos tuplos respectivos ) then envia os valores das colunas A1,A2,...Ak para o output. 5 / 11 Exemplo Qual o nome, ano, e duração de todos os filmes do Harrison Ford? SELECT nome, ano, duracao FROM Filmes, Participa WHERE nome = nomefilme AND ano = anofilme AND nomeactor = Harrison Ford ; nome ano duracao The Fugitive Indiana Jones / 11

140 Exemplo (cont.) H. Ford nome ano duracao... nomefilme anofilme nomeactor p f I. Jones M.Rouge Fugitive I. Jones 1981 M.Rouge 2001 M.Rouge 2001 Fugitive 1993 H. Ford N. Kidman E. McGregor H. Ford = = 7 / 11 Self Joins Por vezes é necessário usar mais do que uma cópia da mesma tabela. Distingue-se cada cópia por um sinónimo. Exemplo: Quais os actores que têm a mesma morada? SELECT A1.nome, A2.nome FROM Actores AS A1, Actores AS A2 WHERE A1.morada = A2.morada AND A1.nome < A2.nome; A1.nome Alec Baldwin Angelina Jolie A2.nome Kim Basinger Brad Pitt 8 / 11

141 Interpretação em termos de loops encadeados FOR EACH A1 in Actores DO FOR EACH A2 in Actores DO IF A1.morada = A2.morada AND A1.nome < A2.nome THEN output (A1.nome, A2.nome) 9 / 11 Operações sobre conjuntos (união, intersecção, diferença) (subquery) UNION (subquery) (subquery) INTERSECT (subquery) (subquery) EXCEPT (subquery) 10 / 11

142 Exemplo Quais os filmes a preto e branco em que participou o Jack Nicholson? Solução possível: 1 Encontrar todos os filmes a preto e branco. 2 Encontrar todos os filmes do Jack Nicholson. 3 Fazer a interesecção dos resultados. ( SELECT nome, ano FROM Filmes WHERE acores = FALSE ) INTERSECT ( SELECT nomefilme, anofilme FROM Participa WHERE nomeactor = Jack Nicholson ); 11 / 11

143 SQL: Lógica a 3 valores, joins explícitos Fernando Lobo Base de Dados, Universidade do Algarve 1 / 16 Valores NULL Valor desconhecido ou inaplicável. I I Ex 1: Não se conhece a duração de um filme. Ex 2: Valor do atributo mulher/marido de uma pessoa solteira. Dá origem a um comportamento estranho em SQL. Lógica a 3 valores: True, False, Unknown. 2 / 16

144 Operações envolvendo valores NULL Se x tiver o valor NULL, então: 1 x + qqcoisa = NULL (a mesma coisa para,, /). 2 Quando comparamos x com outro valor, o resultado é Unknown. 3 / 16 Lógica com 3 valores Como é que funcionam os operadores lógicos AND, OR, e NOT, numa lógica com 3 valores? True=1, False=0, Unknown= 1 2 a AND b = min(a, b) a OR b = max(a, b) NOT a = 1 a 4 / 16

145 Lógica com 3 valores (cont.) Exemplo: True AND (False OR NOT(Unknown)) = min(1, max(0, (1-1 2 ))) = min(1, max(0, 1 2 ) = min(1, 1 2 ) = 1 2 = Unknown 5 / 16 Lógica com 3 valores (cont.) nome ano duracao Star Wars King Kong 1933 NULL Return of the Jedi SELECT * FROM Filmes WHERE duracao<100 OR duracao>=100; King Kong não aparece no output. NULL<100 = Unknown. NULL>=100 = Unknown. Unknown OR Unknown = Unknown. Para o output só vão os tuplos para os quais a cláusula WHERE tem o valor True. 6 / 16

146 Lógica com 3 valores (cont.) Para verificar se um atributo x tem ou não o valor NULL, deve utilizar-se: x IS NULL (ou x IS NOT NULL). -- Errado SELECT * FROM Filmes WHERE duracao=null; -- Correcto SELECT * FROM Filmes WHERE duracao IS NULL; 7 / 16 Joins explícitos podemos fazer joins usando a forma SELECT-FROM-WHERE. mas também podemos utilizar expressões de JOIN explícitas. essas expressões aparecem na cláusula FROM. 8 / 16

147 Produto cartesiano (CROSS JOIN) SELECT * FROM Filmes, Estudios; é equivalente a: SELECT * FROM Filmes CROSS JOIN Estudios; 9 / 16 Theta Join (JOIN...ON) SELECT * FROM Filmes, Participa WHERE nome = nomefilme AND ano = anofilme; é equivalente a: SELECT * FROM Filmes JOIN Participa ON nome = nomefilme AND ano = anofilme; 10 / 16

148 Natural Join SELECT Actores.*, categoria FROM Actores, Realizadores WHERE Actores.nome = Realizadores.nome é equivalente a: SELECT * FROM Actores NATURAL JOIN Realizadores; O que significa esta interrogação em Português corrente? 11 / 16 Outerjoins adiciona ao output os tuplos que não conseguem fazer join. esses tuplos ficam com NULL nos restantes atributos. em SQL: OUTER JOIN. existem variantes do OUTER JOIN: I LEFT: os tuplos da 1 a tabela vão para o output. I RIGHT: os tuplos da 2 a tabela vão para o output. I FULL: os tuplos de ambas as tabelas vão para o output. 12 / 16

149 Exemplos actores que não são realizadores aparecem -- com categoria NULL. Realizadores que não -- são actores aparecem com morada, sexo, e -- data de nascimento a NULL. -- SELECT * FROM Actores NATURAL FULL OUTER JOIN Realizadores; 13 / 16 Exemplos (cont.) filmes sem actores aparecem no output -- actores sem filmes também. -- SELECT * FROM Filmes FULL OUTER JOIN Participa ON nome = nomefilme AND ano = anofilme; 14 / 16

150 Exemplos (cont.) Filmes sem actores aparecem no output, -- mas actores que não tenham participado -- em filmes não aparecem. -- SELECT * FROM Filmes LEFT OUTER JOIN Participa ON nome = nomefilme AND ano = anofilme; 15 / 16 Exemplos (cont.) Actores que nunca participaram em nenhum -- filme aparecem no output, mas os filmes -- sem actores não aparecem. -- SELECT * FROM Filmes RIGHT OUTER JOIN Participa ON nome = nomefilme AND ano = anofilme; 16 / 16

151 SQL: Subqueries Fernando Lobo Base de Dados, Universidade do Algarve 1 / 15 Subqueries podemos ter uma query dentro de outra query. uma expressão do tipo SELECT-FROM-WHERE entre parêntesis é uma subquery. o resultado de uma subquery é uma tabela. pode ser usada em vários locais, incluindo as cláusulas FROM e WHERE. 2 / 15

152 Subqueries que retornam um tuplo Se a subquery retorna apenas um tuplo, então podemos usá-la como se fosse um valor. um tuplo único é geralmente garantido através do conceito de chave. obtêm-se um erro de execução se não existir nenhum tuplo, ou se existir mais do que um tuplo. caso mais habitual: tuplo com um só atributo. 3 / 15 Exemplo Qual a morada do estúdio que fez o Star Wars de 1977? abordagem 1: fazer um join de estúdios com filmes. abordagem 2: decompor o problema em dois. Primeiro, encontrar o nome do estúdio que fez o Star Wars de Depois encontrar a morada desse estúdio. 4 / 15

153 Abordagem 1 Qual a morada do estúdio que fez o Star Wars de 1977? SELECT morada FROM Estudios, Filmes WHERE Estudios.nome = Filmes.nomeEstudio AND Filmes.nome = Star Wars AND Filmes.ano = 1977; 5 / 15 Abordagem 2 Qual a morada do estúdio que fez o Star Wars de 1977? SELECT morada FROM Estudios WHERE nome = ( SELECT nomeestudio FROM Filmes WHERE nome = Star Wars AND ano = 1977 ); reparem na scoping rule de nome. o primeiro nome é o nome do estúdio, o segundo nome é o nome do filme. subquerie (SELECT nomeestudio...) produz um só tuplo. Porquê? 6 / 15

154 Subqueries que retornam mais do que um tuplo E se o resultado da subquery tiver mais do que 1 tuplo?...também se pode usar subqueries recorrendo a um destes 4 operadores: 1 IN 2 EXISTS 3 ALL 4 ANY 7 / 15 Operador IN IN é equivalente a 2 tuplo IN tabela é verdadeiro se e só se o tuplo pertencer à tabela. I tuplo NOT IN tabela significa o oposto. IN pode aparecer na cláusula WHERE. a tabela é normalmente uma subquery. 8 / 15

155 Exemplo Qual a morada dos estúdios que já produziram filmes a preto e branco? SELECT morada FROM Estudios WHERE nome IN ( SELECT nomeestudio FROM Filmes WHERE acores=false ); 9 / 15 Outro exemplo O operador IN também pode ser aplicado a tuplos. I I Quais são os estúdios que já produziram filmes do Harrison Ford? Primeiro encontramos os filmes do Harrison Ford. Depois temos de encontrar os estúdios que produziram esses filmes. SELECT nomeestudio FROM Filmes WHERE (nome,ano) IN ( SELECT nomefilme, anofilme FROM Participa WHERE nomeactor = Harrison Ford ); 10 / 15

156 Operador EXISTS EXISTS(tabela) é verdadeiro se e só se a tabela não é vazia. I NOT EXISTS(tabela) significa o oposto. EXISTS pode aparecer na cláusula WHERE. 11 / 15 Exemplo Quais os estúdios que produziram mais do que 1 filme? SELECT DISTINCT nomeestudio FROM Filmes AS f WHERE EXISTS ( SELECT * FROM Filmes WHERE nomeestudio = f.nomeestudio AND NOT (ano = f.ano AND nome = f.nome) ); a query acima é uma correlated subquery. subquery dá o conjunto de filmes que têm o mesmo estúdio que f, mas excluindo o próprio f. reparem novamente na scoping rule dos atributos. 12 / 15

157 Operador IN ALL e ANY são usados juntamente com os operadores relacionais =, >, >=,... x > ALL( tabela ) é verdadeiro se e só se x for maior do que todos os tuplos da tabela. x < ANY( tabela ) é verdadeiro se e só se x for menor do que pelo menos um tuplo da tabela. I I em vez de > e < podemos utilizar qualquer operador relacional. os tuplos da tabela têm de ter apenas um atributo. 13 / 15 Exemplo Qual o filme com a maior duração? SELECT nome, ano FROM Filmes WHERE duracao >= ALL ( SELECT duracao FROM Filmes WHERE duracao IS NOT NULL ); Há que ter cuidado com os NULLs. Porquê? 14 / 15

158 Outro exemplo Quais os filmes que não têm a maior duração? SELECT nome, ano FROM Filmes WHERE NOT duracao >= ALL ( SELECT duracao FROM Filmes WHERE duracao IS NOT NULL ); Ou então: SELECT nome, ano FROM Filmes WHERE duracao < ANY ( SELECT duracao FROM Filmes WHERE duracao IS NOT NULL ); 15 / 15

159 SQL: Agregações Fernando Lobo Base de Dados, Universidade do Algarve 1 / 15 Agregações os operadores SUM, MIN, MAX, AVG, e COUNT, podem ser aplicados a um atributo de uma tabela. os operadores aparecem na cláusula SELECT. O resultado é um valor agregado para o respectivo atributo. COUNT(*) conta o número de tuplos. 2 / 15

160 Exemplos Qual a duração média dos filmes da Disney? SELECT AVG(duracao) FROM Filmes WHERE nomeestudio = Disney ; avg Quantos actores existem na tabela de Actores? SELECT COUNT(*) FROM Actores; count 18 3 / 15 NULLs são ignorados um valor NULL não conta para uma soma, média ou contagem. um valor NULL nunca pode ser o mínimo ou máximo de uma coluna. mas se todos os valores de uma coluna forem NULL, então o resultado da agregação é NULL. 4 / 15

161 Exemplo número de filmes da Disney -- SELECT COUNT(*) FROM Filmes WHERE nomeestudio = Disney ; número de filmes da Disney -- cuja duração é conhecida -- SELECT COUNT(duracao) FROM Filmes WHERE nomeestudio = Disney ; 5 / 15 Agrupar após um SELECT-FROM-WHERE podemos utilizar GROUP BY seguido de uma lista de atributos. o resultado do SELECT-FROM-WHERE é agrupado de acordo com os valores desses atributos. as agregações são aplicadas a cada grupo. 6 / 15

162 Exemplo Quantos filmes é que cada estúdio já produziu? SELECT nomeestudio, COUNT(*) FROM Filmes GROUP BY nomeestudio; nomeestudio count Disney 3 Fox 8 Paramount 5 Universal 5 Warner Brothers 1 7 / 15 Como funciona? nome ano duracao acores nomeestudio Mighty Ducks t Disney Lion King t Disney Pocahontas t Disney Star Wars t Fox Empire Strikes Back t Fox Return of the Jedi t Fox Total Recall t Fox Top Gun t Fox Moulin Rouge t Fox JFK t Fox Dances with Wolves t Fox Wayne s World t Paramount Addams Family t Paramount Gone With the Wind f Paramount Basic Instinct t Paramount Eyes Wide Shut t Paramount King Kong 1933 f Universal King Kong t Universal Indiana Jones t Universal The Fugitive t Universal Bridges of Madison County t Universal Batman Returns t Warner Brothers COUNT(*) é aplicado a cada grupo. 8 / 15

163 Outro exemplo Quantos filmes é que cada actriz fez? SELECT nomeactor AS actriz, COUNT(*) FROM Participa, Actores WHERE nomeactor = nome AND sexo= f GROUP BY nomeactor; actriz count Carrie Fisher 3 Dana Carvey 1 Meryl Streep 1 Michelle Pfeiffer 1 Nicole Kidman 2 Sharon Stone 2 9 / 15 Mais um exemplo Qual a duração máxima e mínima de cada estúdio? SELECT nomeestudio AS estudio, MAX(duracao), MIN(duracao) FROM Filmes GROUP BY nomeestudio; estudio max min Disney Fox Paramount Universal Warner Brothers / 15

164 Restrições nos elementos a especificar em SELECT se usarmos um operador de agregação, então cada elemento especificado em SELECT tem de ser: 1 uma agregação, ou 2 um atributo especificado em GROUP BY. 11 / 15 Exemplo de um query inválido Qual a filme da Disney com maior duração? -- incorrecto SELECT nome, MAX(duracao) FROM Filmes WHERE nomeestudio= Disney ; a query é inválida. nome não é uma agregação, e também não aparece especificado em GROUP BY. 12 / 15

165 Porque é que é inválido? -- incorrecto SELECT nome, MAX(duracao) FROM Filmes WHERE nomeestudio= Disney ; nome ano duracao nomeestudio... Mighty Ducks Disney... Lion King Disney... Pocahontas Disney... MAX(duracao)! 122. nome!??? Não faz sentido seleccionar nome. 13 / 15 Cláusula HAVING podemos ter HAVING <condição> a seguir a uma cláusula GROUP BY. a condição é aplicada a cada grupo. os grupos que satisfazem a condição vão para o output, os outros são eliminados. 14 / 15

166 Exemplo Quais as actrizes que fizeram mais do que 1 filme? SELECT nomeactor AS actriz, COUNT(*) FROM Participa, Actores WHERE nomeactor = nome AND sexo= f GROUP BY nomeactor HAVING COUNT(*) > 1; actriz count Carrie Fisher 3 Nicole Kidman 2 Sharon Stone 2 15 / 15

167 SQL: Vistas, Indices, Autorização, Restrições Fernando Lobo Base de Dados, Universidade do Algarve 1 / 20 Vistas Uma vista (view em inglês) é uma tabela virtual. Não existe fisicamente na BD. É definida à custa de outras tabelas ou views. Sintaxe: CREATE VIEW <nome> AS <query>; 2 / 20

168 Exemplo Criar uma view que dá o nome, ano e duração de todos os filmes da Disney. CREATE VIEW filmes_disney (nome,ano,realizador) AS SELECT nome, ano, nomerealizador FROM Filmes WHERE nomeestudio = Disney ; Agora, podemos fazer queries à view filmes disney tal e qual come se fosse uma tabela. -- Quais os filmes da Disney feitos nos anos 90? SELECT * FROM filmes_disney WHERE ano>=1990 AND ano<2000; 3 / 20 Outro exemplo CREATE VIEW filmes_actores (filme, ano, estudio, realizador, actor) SELECT F.nome, F.ano, F.nomeEstudio, F.nomeRealizador, P.nomeActor FROM Filmes AS F, Participa AS P WHERE F.nome = P.nomeFilme AND F.ano = P.anoFilme; AS Quais os estúdios que já trabalharam com a Nicole Kidman? SELECT estudio FROM filmes_actores WHERE actor = Nicole Kidman ; 4 / 20

169 Indices Um índice é uma estrutura de dados que é utilizada para acelerar as pesquisas. Os índices aceleram as pesquisas mas tornam mais lentos os inserts, deletes, e updates. I porque o SGBD para além de modificar tabelas, também têm de modificar a estrutura de dados. Muitos SGBDs criam índices automaticamente para as chaves primárias. PostgreSQL faz isso. 5 / 20 Indices (cont.) Vamos supor que temos de procurar muitas vezes por filmes cuja duração seja maior que x minutos. Se não tivermos um índice, o SGBD terá de fazer uma pesquisa sequencial por todos os tuplos da tabela. Se tivermos um índice para o atributo duracao, o SGBD poderá utilizar um método de pesquisa mais sofisticado. -- criar um índice para duracao CREATE INDEX IndiceDuracao ON Filmes(duracao); -- apagar o índice DROP INDEX IndiceDuracao; 6 / 20

170 Permissões/Autorização Cada objecto da BD tem um dono (o utilizador que criou o objecto). Por exemplo, se o utilizador ronaldo criar a tabela de filmes, apenas o ronaldo pode aceder e modificar os dados dessa tabela. O SQL oferece um mecanismo de permissões de modo a que o ronaldo possa dar permissões a outros utilizadores. 7 / 20 Permissões/Autorização (cont.) Em SQL usa-se o comando GRANT. Existe vários tipos de permissões: SELECT INSERT DELETE UPDATE 8 / 20

171 Exemplos Dar permissão ao utilizador mourinho para fazer SELECTs na tabela de filmes. GRANT SELECT, UPDATE ON Filmes TO mourinho; Dar permissão ao utilizador mourinho para fazer SELECTs, e UPDATEs apenas à coluna acores GRANT SELECT, UPDATE(aCores) ON Filmes TO mourinho; 9 / 20 Exemplos Dar todas as permissões (SELECT, DELETE e UPDATE) ao utilizador mourinho para aceder e/ou modificar a tabela de filmes. GRANT ALL ON Filmes TO mourinho; Também se pode dar permissões a vários utilizadores. GRANT SELECT ON Filmes TO mourinho, ronaldo, quaresma; Também se pode dar permissões a todos os utilizadores. GRANT SELECT ON Filmes TO PUBLIC; 10 / 20

172 Permissões/Autorização (cont.) O comando REVOKE retira as permissões. O comando REVOKE retira as permissões. Exemplo: REVOKE SELECT ON Filmes TO mourinho; 11 / 20 Restrições PRIMARY KEY UNIQUE NOT NULL FOREIGN KEY 12 / 20

173 Mais restrições Podemos ainda, Restringir valores ao nível do atributo. Restringir valores ao nível do tuplo. Restringir valores para a BD em geral. 13 / 20 Restrições ao nível do atributo Coloca-se CHECK( <condição> ) a seguir à definição do atributo. A condição pode referir o nome do respectivo atributo. Apenas pode referir outros atributos ou outras tabelas num subquery. Exemplo: CREATE TABLE Actores(... sexo CHAR CHECK (sexo IN ( F, M )), nomeestudio VARCHAR(30) CHECK ( nomeestudio IN (SELECT nome FROM Estudios)),... ); 14 / 20

174 Restrições ao nível do atributo (cont.) O check só é verificado quando existe um insert ou update no atributo respectivo. Ex 1: CHECK(sexo IN ( F, M )) é verificado cada vez que há um insert ou update ao valor de sexo. I se o valor não for F nem M, o SGBD rejeita a modificação. Ex 2: CHECK(nomeEstudio IN (SELECT nome FROM Estudios)) não é verificado se apagarmos um estúdio da tabela de Estúdios. I é diferente de uma chave estrangeira. 15 / 20 Restrições ao nível do tuplo Podemos ter um CHECK( <condição> ) como um elemento à parte na definição de uma tabela. A condição pode referir-se a qualquer atributo da tabela. Apenas pode referir outros atributos ou outras tabelas num subquery. Novamente, o check só é verificado em inserts e updates. Se a condição do check for falsa, o insert ou update do respectivo tuplo é rejeitado. 16 / 20

175 Exemplo Os filmes anteriores a 1939 não podem ser a cores. CREATE TABLE Filmes(... CHECK (NOT (ano<1939 AND acores=true)) ); 17 / 20 Restrições para a BD em geral (Asserções) Uma asserção é uma restrição mais geral que pode especificar várias tabelas. Uma vez definida, a asserção faz parte do esquema da BD. As asserções são verificadas cada vez que há uma modificação no estado da BD. Não está implementado em PostgreSQL nem em MySQL. CREATE ASSERTION <nome> CHECK ( <condição> ); 18 / 20

176 Exemplo Não pode haver realizadores que também sejam actores (este exemplo é obviamente fictício) CREATE ASSERTION NaoHaActoresRealizadores CHECK( NOT EXISTS (SELECT nome FROM Actores INTERSECT SELECT nome FROM Realizadores ) ); 19 / 20 Outro exemplo A duração média de todos os filmes de um determinado estúdio não pode exceder 200 minutos. CREATE ASSERTION DuracaoMedia CHECK( 200 >= ALL (SELECT AVG(duracao) FROM Filmes GROUP BY nomeestudio ) ); Com um check ao nível da tabela de filmes, a restrição poderia falhar quando houvesse deletes, visto que as restrições ao nível da tabela apenas são testadas em inserts e updates. 20 / 20

177 Desenvolvimento de aplicações com SQL Fernando Lobo Base de Dados, Universidade do Algarve 1/15 Desenvolvimento de aplicações Até agora temos dado comandos de SQL de forma interactiva num interpretador de comandos. Quando se desenvolve aplicações utilizamos uma linguagem convencional, como C ou Java, e incorporamos comandos de SQL. 2/15

178 Utilização de SQL em programas O mais comum é utilizar-se uma Application Programming Interface (API) Vamos ver alguns exemplos em Java, disponíveis na página web da disciplina. 3/15 Programas em Java com SQL O mais comum é usar JDBC! Java Database Connectivity. JDBC é uma API que facilita a escrita de programas em Java com SQL. 4/15

179 JDBC JDBC é uma colecção de classes e interfaces. É necessário usar um driver específico para um SGBD concreto. Usa-se a classe DriverManager para estabelecer uma conexão a uma base de dados. 5/15 Arquitectura JDBC Imagem retirada do livro PostgreSQL de Kerry Douglas e Susan Douglas. 6/15

Forma Normal de Boyce Codd 3 a Forma Normal

Forma Normal de Boyce Codd 3 a Forma Normal Normalização: Forma Normal de Boyce Codd 3 a Forma Normal Fernando Lobo Base de Dados, Universidade do Algarve 1 / 38 Normalização O objectivo é obter esquemas relacionais sem redundância e sem anomalias.

Leia mais

Modelação Conceptual de Base de Dados

Modelação Conceptual de Base de Dados Modelação Conceptual de Base de Dados Fernando Lobo Base de Dados, Universidade do Algarve 1 / 56 Passos para criar uma base de dados 1 Compreender o problema no mundo real. 2 Especificá-lo usando um modelo

Leia mais

Modelação Conceptual de Base de Dados

Modelação Conceptual de Base de Dados Modelação Conceptual de Base de Dados Fernando Lobo Base de Dados, Universidade do Algarve 1 / 38 Passos para criar uma base de dados 1 Compreender o problema no mundo real. 2 Especificá-lo usando um modelo

Leia mais

Normalização: 3 a Forma Normal

Normalização: 3 a Forma Normal Normalização: 3 a Forma Normal Fernando Lobo Base de Dados, aula 10 1 / 14 3 a Forma Normal: Motivação Por vezes a decomposição para BCNF não preserva as DF s da relação original. Nesses casos, não devemos

Leia mais

Conversão de modelo E/A e UML para o modelo relacional

Conversão de modelo E/A e UML para o modelo relacional Conversão de modelo E/A e UML para o modelo relacional Fernando Lobo Base de Dados, aula 7 1 / 20 Conversão do modelo E/A para o modelo relacional Conjunto entidade Relação atributos do conj. entidade

Leia mais

Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD.

Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD. Definição do esquema da base de dados o esquema da BD é composto pelas definições de todas as tabelas da BD. existem outros elementos (views, índices, triggers) que também fazem parte do esquema e que

Leia mais

Conversão do modelo UML para o modelo relacional

Conversão do modelo UML para o modelo relacional Conversão de modelo UML para o modelo relacional Fernando Lobo Base de Dados, Universidade do Algarve 1 / 19 Conversão do modelo UML para o modelo relacional Diagrama de classe Relação atributos da classe

Leia mais

Dependências Funcionais

Dependências Funcionais Dependências Funcionais Fernando Lobo Base de Dados, Universidade do Algarve 1 / 26 Motivação: Normalização Por vezes o esquema relacional tem falhas. Geralmente são derivadas de falhas no modelo conceptual.

Leia mais

Álgebra relacional. Fernando Lobo. Conjunto de operadores que permitem manipular relações: produtos cartesianos e joins.

Álgebra relacional. Fernando Lobo. Conjunto de operadores que permitem manipular relações: produtos cartesianos e joins. Álgebra Relacional Fernando Lobo Base de Dados, Universidade do Algarve 1 / 50 Álgebra relacional Conjunto de operadores que permitem manipular relações: 1 operações sobre conjuntos:,, 2 remover linhas

Leia mais

SQL: Definição de tabelas, Modificações à Base de Dados

SQL: Definição de tabelas, Modificações à Base de Dados SQL: Definição de tabelas, Modificações à Base de Dados Fernando Lobo Base de Dados, Universidade do Algarve 1 / 24 Definição do esquema da base de dados O esquema da BD é composto pelas definições de

Leia mais

Álgebra relacional. Fernando Lobo. Base de Dados, aula 12

Álgebra relacional. Fernando Lobo. Base de Dados, aula 12 Álgebra Relacional Fernando Lobo Base de Dados, aula 12 1 / 28 Álgebra relacional Conjunto de operadores que permitem manipular relações: 1. operações sobre conjuntos:,, 2. remover linhas (selecção), remover

Leia mais

SQL: Interrogações simples

SQL: Interrogações simples SQL: Interrogações simples Fernando Lobo Base de Dados, Universidade do Algarve 1 / 20 Structured Query Language (SQL) É uma implementação da álgebra relacional incluindo os operadores extendidos. Contém

Leia mais

Objectivos com o Desenho de Bases de Dados Dependências funcionais 1ª Forma Normal Decomposição Forma Normal de Boyce-Codd 3ª Forma Normal

Objectivos com o Desenho de Bases de Dados Dependências funcionais 1ª Forma Normal Decomposição Forma Normal de Boyce-Codd 3ª Forma Normal Capítulo 6: Desenho de Bases de Dados Objectivos com o Desenho de Bases de Dados Dependências funcionais 1ª Forma Normal Decomposição Forma Normal de Boyce-Codd 3ª Forma Normal Dependências multivalor

Leia mais

Importar e Exportar Dados

Importar e Exportar Dados Importar e Exportar Dados Administração de Base de Dados OBJECTIVOS: Definir comandos e formatos Definir restrições (constraints) DEFINIÇÃO DO ESQUEMA DA BASE DE DADOS O esquema da BD e composto pelas

Leia mais

. Um modelo que represente fielmente a realidade. Um modelo capaz de responder às funcionalidades que se pretendem

. Um modelo que represente fielmente a realidade. Um modelo capaz de responder às funcionalidades que se pretendem 3. Teoria da Normalização Ao modelar a informação procura-se:. Um modelo que represente fielmente a realidade. Um modelo capaz de responder às funcionalidades que se pretendem Queremos obter um modelo

Leia mais

Uma base de dados está num estado de integridade se contém apenas dados válidos. Os dados armazenados devem estar de acordo com a realidade

Uma base de dados está num estado de integridade se contém apenas dados válidos. Os dados armazenados devem estar de acordo com a realidade 2. Modelo Relacional... 2.1. Estrutura de Dados Relacional 2.2. Álgebra Relacional 2.3. Linguagens Relacionais 2.4. Restrições de integridade Uma base de dados está num estado de integridade se contém

Leia mais

Forma Normal de Boyce-Codd

Forma Normal de Boyce-Codd Teste de Preservação de Dependências Para verificar se α β é preservada na decomposição R em R 1, R 2,..., R n aplica-se o seguinte teste: res := α enquanto (houver alterações em res) faz para cada R i

Leia mais

INF1383 -Bancos de Dados

INF1383 -Bancos de Dados INF1383 -Bancos de Dados Prof. Sérgio Lifschitz DI PUC-Rio Eng. Computação, Sistemas de Informação e Ciência da Computação INTRODUÇÃO À TEORIA DA NORMALIZAÇÃO PROJETO LÓGICO DE BANCOS DE DADOS Slide 1-34

Leia mais

Objectivos com o Desenho de Bases de Dados Dependências funcionais 1ª Forma Normal Decomposição Forma Normal de Boyce-Codd 3ª Forma Normal

Objectivos com o Desenho de Bases de Dados Dependências funcionais 1ª Forma Normal Decomposição Forma Normal de Boyce-Codd 3ª Forma Normal Capítulo 6: Desenho de Bases de Dados Objectivos com o Desenho de Bases de Dados Dependências funcionais 1ª Forma Normal Decomposição Forma Normal de Boyce-Codd 3ª Forma Normal Dependências multivalor

Leia mais

SQL: Vistas, Indices, Autorização, Restrições

SQL: Vistas, Indices, Autorização, Restrições SQL: Vistas, Indices, Autorização, Restrições Fernando Lobo Base de Dados, Universidade do Algarve 1 / 20 Vistas Uma vista (view em inglês) é uma tabela virtual. Não existe fisicamente na BD. É definida

Leia mais

Views. uma view é uma tabela virtual. não existe fisicamente na BD. é definida à custa de outras tabelas ou views. CREATE VIEW <nome> AS <query>;

Views. uma view é uma tabela virtual. não existe fisicamente na BD. é definida à custa de outras tabelas ou views. CREATE VIEW <nome> AS <query>; Views uma view é uma tabela virtual. não existe fisicamente na BD. é definida à custa de outras tabelas ou views. sintaxe: CREATE VIEW AS ; 1 Exemplo Criar uma view que dá o nome, ano e duração

Leia mais

Operações sobre sacos. Álgebra Relacional Extendida.

Operações sobre sacos. Álgebra Relacional Extendida. Operações sobre sacos. Álgebra elacional Extendida. Fernando Lobo ase de Dados, aula 14 1 / 23 Conjuntos versus sacos (bags) Um conjunto não tem elementos repetidos. Um saco pode ter. Em ambos os casos

Leia mais

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU Aula 6 BD1 Modelo Relacional Profa. Elaine Faria UFU - 2017 Introdução Modelo Relacional Proposto por Codd em 1970 Revolucionou a área de banco de dados É o modelo dominante base para os SGBDs líderes

Leia mais

Banco de Dados - INE Projeto de Banco de Dados Relacionais. Prof. Mario Dantas

Banco de Dados - INE Projeto de Banco de Dados Relacionais. Prof. Mario Dantas Banco de Dados - INE 5323 Projeto de Banco de Dados Relacionais Prof. Mario Dantas Projeto de Banco de Dados Relacionais -Armadilhas - Decomposição - Dependências Funcionais e Normalização - Dependências

Leia mais

Exame de Recurso de Base de Dados Universidade do Algarve 03/Fev/2005, (duração: 2 horas)

Exame de Recurso de Base de Dados Universidade do Algarve 03/Fev/2005, (duração: 2 horas) Exame de Recurso de Base de Dados Universidade do Algarve 03/Fev/2005, (duração: 2 horas) Este exame consiste em 16 perguntas de escolha múltipla. Para todas as questões existe apenas 1 resposta correcta.

Leia mais

SQL. Índices, views e restrições. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

SQL. Índices, views e restrições. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática SQL Índices, views e restrições Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática SQL Índices Um índice é uma estrutura de dados que acelera o acesso aos tuplos de uma tabela. Os índices

Leia mais

Sistemas de Informação e Bases de Dados 2012/2013. Modelo Relacional. Alberto Sardinha 2012 IST

Sistemas de Informação e Bases de Dados 2012/2013. Modelo Relacional. Alberto Sardinha 2012 IST Sistemas de Informação e Bases de Dados 2012/2013 Modelo Relacional Alberto Sardinha Bibliografia Raghu Ramakrishnan, Database Management Systems, Cap. 3 1 Sumário Modelo Relacional Conversão Modelo EA

Leia mais

Base de Dados. Sistemas de Informação. Base de Dados - Índice Introdução Componentes Base de Dados. Introdução. Introdução. Introdução.

Base de Dados. Sistemas de Informação. Base de Dados - Índice Introdução Componentes Base de Dados. Introdução. Introdução. Introdução. - Índice Componentes Sistemas de Informação Vitor Vaz da Silva Vitor Vaz da Silva - SI http://tektonia.com 2 Vitor Vaz da Silva - SI http://tektonia.com 3 Vitor Vaz da Silva - SI http://tektonia.com 4

Leia mais

NORMALIZAÇÃO. Lílian Simão Oliveira

NORMALIZAÇÃO. Lílian Simão Oliveira NORMALIZAÇÃO Lílian Simão Oliveira Normalização Normalização de dados : decomposição de esquemas para minimizar redundância e evitar anomalias de atualização, inserção e remoção. Projeto conceitual bem

Leia mais

BCD29008 Banco de dados

BCD29008 Banco de dados BCD29008 Banco de dados Modelo ER & Modelo Relacional Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/bcd 18 de

Leia mais

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language) Bases de Dados Introdução à linguagem SQL História Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R Renomeada para SQL (Structured Query Language) Standards ISO e ANSI SQL-86, SQL-89,

Leia mais

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language) Bases de Dados Introdução à linguagem SQL História Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R Renomeada para SQL (Structured Query Language) Standards ISO e ANSI SQL-86, SQL-89,

Leia mais

Bases de Dados. Apresentação da disciplina. Programa

Bases de Dados. Apresentação da disciplina. Programa Bases de Dados Apresentação da disciplina Programa Modelação modelo Entidade Associação modelo e álgebra relacionais Implementação SQL básico e avançado desenvolvimento de aplicações normalização Optimização

Leia mais

DCC/UFRJ Bancos de Dados IPedro Manoel da Silveira. Projeto de BD Relacionais. Objetivos do Projeto de BD. PMS v2bancos de Dados Relacionais 1

DCC/UFRJ Bancos de Dados IPedro Manoel da Silveira. Projeto de BD Relacionais. Objetivos do Projeto de BD. PMS v2bancos de Dados Relacionais 1 DCC/UFRJ Pedro Manoel Bancos de Dados Relacionais Projeto Projeto de de Bancos Bancos de de Dados Dados Relacionais Relacionais Projeto de BD Relacionais Problema: Como distribuir os dados de um sistema

Leia mais

Técnicas de Modelação de Dados

Técnicas de Modelação de Dados Técnicas de Modelação de Dados Curso Profissional Técnico de Gestão e Programação de Sistemas de Informáticos Programação e Sistemas de Informação Módulo 13 Técnicas de Modelação de Dados Professora: Sandra

Leia mais

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve Triggers e Regras Fernando Lobo Base de Dados, Universidade do Algarve 1 / 21 Triggers Um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Leia mais

Introdução. Bases de Dados (CC2005) Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

Introdução. Bases de Dados (CC2005) Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto (CC2005) Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Eduardo R. B. Marques DCC/FCUP parcialmente adaptado de slides por Fernando Silva e Ricardo Rocha Alguns

Leia mais

Dependências funcionais e normalização

Dependências funcionais e normalização Dependências funcionais e normalização 1 a Forma Normal 2 a Forma Normal Objectivos na Concepção de Bases de Dados Dependências funcionais Decomposição Forma Normal de Boyce-Codd 3 a Forma Normal Dependências

Leia mais

Dependências Funcionais e Formas Normais. Formas Normais Pedro Sousa 1

Dependências Funcionais e Formas Normais. Formas Normais Pedro Sousa 1 Dependências Funcionais e Formas Normais Formas Normais Pedro Sousa 1 Introdução As dependências funcionais e as formas normais estabelecem critérios de qualidade de desenho no modelo Relacional. Permitem

Leia mais

António Rocha Nuno Melo e Castro

António Rocha Nuno Melo e Castro António Rocha Nuno Melo e Castro Definição: colecção de operadores que tomam relações como seus operandos e retornam relações como resultados Cada operador da álgebra aceita como argumentos instâncias

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com 02/06/2016 SUMÁRIO SQL DDL DML SQL (STRUCTURED

Leia mais

modelo introduzido por E. F. Codd Meados da década de 70: protótipos. INGRES (UC Berkeley, 73 77) System R (IBM Research at San Jose, 74 78)

modelo introduzido por E. F. Codd Meados da década de 70: protótipos. INGRES (UC Berkeley, 73 77) System R (IBM Research at San Jose, 74 78) 1 1970 - modelo introduzido por E. F. Codd Meados da década de 70: protótipos INGRES (UC Berkeley, 73 77) System R (IBM Research at San Jose, 74 78) 1979: primeiro produto SQL (Oracle) Meados da década

Leia mais

Aula 12 BD1 Dependências Funcionais e Normalização. Profa. Elaine Faria UFU

Aula 12 BD1 Dependências Funcionais e Normalização. Profa. Elaine Faria UFU Aula 12 BD1 Dependências Funcionais e Normalização Profa. Elaine Faria UFU - 2018 Refinamento de Esquema Problemas causados pela redundância Armazenamento redundante Algumas informações são armazenadas

Leia mais

Informática I. Aula 8. Aula 8-25/09/2006 1

Informática I. Aula 8.   Aula 8-25/09/2006 1 Informática I Aula 8 http://www.ic.uff.br/~bianca/informatica1/ Aula 8-25/09/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

Banco de Dados - Senado

Banco de Dados - Senado Banco de Dados - Senado Normalização Material preparado: Prof. Marcio Vitorino Normalização Normalização de dados: decomposição de esquemas para evitar anomalias de atualização. Bom desig evita redundância

Leia mais

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010 Sumário SQL - Criação de Tabelas André Restivo Faculdade de Engenharia da Universidade do Porto October 18, 2010 1 Introdução 2 Tabelas 3 Colunas 4 5 Modificação de Tabelas 6 Domínios André Restivo (FEUP)

Leia mais

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de Introdução O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de padrão SQL (Structured Query Language). O padrão SQL define precisamente uma interface SQL para a

Leia mais

Modelo Relacional Prof. Msc Denival A. dos Santos

Modelo Relacional Prof. Msc Denival A. dos Santos Modelo Relacional Prof. Msc Denival A. dos Santos Introdução Criado por Edgar F. Codd em 70 (primeiros sistemas relacionais: 1977 78: System R e Ingres); O modelo relacional é um modelo lógico fundamentado

Leia mais

Introdução 20 Diagramas de fluxos de dados 20 O processo de elaboração de DFD 22 Regras práticas para a elaboração de DFD 24 Dicionário de dados 26

Introdução 20 Diagramas de fluxos de dados 20 O processo de elaboração de DFD 22 Regras práticas para a elaboração de DFD 24 Dicionário de dados 26 ÍNDICE MÓDULO 1 ANÁLISE DE SISTEMAS 9 1.1 SISTEMAS DE INFORMAÇÃO 10 Sistema conceito e exemplos 10 Dados e informação 11 Sistema de informação conceito e componentes 12 Sistema de informação e sistemas

Leia mais

MÓDULO 8 INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA POR OBJETOS O QUE É A PROGRAMAÇÃO ORIENTADA POR OBJETOS 10

MÓDULO 8 INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA POR OBJETOS O QUE É A PROGRAMAÇÃO ORIENTADA POR OBJETOS 10 ÍNDICE MÓDULO 8 INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA POR OBJETOS 9 8.1 O QUE É A PROGRAMAÇÃO ORIENTADA POR OBJETOS 10 Como surgiu a programação orientada por objetos (POO) 10 Conceitos centrais da POO 11

Leia mais

Bases de Dados. Parte VII Normalização

Bases de Dados. Parte VII Normalização Bases de Dados Parte VII Normalização 1 Desenho de BDs Relacionais! Algumas questões sobre o desenho de BDs relacionais:! Como é que se desenha uma boa BD relacional?! Qual é o critério para quantificar

Leia mais

Bases de Dados. Parte I: Conceitos Básicos

Bases de Dados. Parte I: Conceitos Básicos Bases de Dados Parte I Conceitos Básicos 1 Definições Básicas Dados: factos conhecidos que têm algum significado e que podem ser guardados. Base de dados (BD): conjunto de dados que se relacionam entre

Leia mais

Bases de Dados 2012/2013 Dependências Funcionais e Normalização. Helena Galhardas 2013 IST. Bibliografia

Bases de Dados 2012/2013 Dependências Funcionais e Normalização. Helena Galhardas 2013 IST. Bibliografia Bases de Dados 2012/2013 Dependências Funcionais e Normalização Helena Galhardas Bibliografia Raghu Ramakrishnan, Database Management Systems 3rd ed, Cap 19 C. J. Date, An Introduction to Database Systems,

Leia mais

Época de Recurso Sem consulta

Época de Recurso Sem consulta Bases de Dados 2013/14 24/Junho/14 17:00 Duração: 3h Época de Recurso Sem consulta Leia com atenção a informação constante desta página, enquanto espera a indicação do docente para começar a resolução

Leia mais

BCD29008 Banco de dados

BCD29008 Banco de dados BCD29008 Banco de dados Linguagem SQL Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/bcd 21 de agosto de 2017

Leia mais

Bibliografia. Bases de Dados 2012/2013 Modelo Relacional. Helena Galhardas. Raghu Ramakrishnan, Database Management Systems, Cap. 3 10/2/ IST

Bibliografia. Bases de Dados 2012/2013 Modelo Relacional. Helena Galhardas. Raghu Ramakrishnan, Database Management Systems, Cap. 3 10/2/ IST Bases de Dados 2012/2013 Modelo Relacional Helena Galhardas Bibliografia Raghu Ramakrishnan, Database Management Systems, Cap. 3 1 1 Sumário Modelo Relacional Conversão Modelo EA para Modelo Relacional

Leia mais

Introdução a Banco de Dados Prof. Msc Denival A. dos Santos

Introdução a Banco de Dados Prof. Msc Denival A. dos Santos Introdução a Banco de Dados Prof. Msc Denival A. dos Santos Dado Um dado sozinho, dissociado de um contexto, não expressa algo que traga qualquer certeza ou elimine dúvidas de qualquer natureza. No máximo,

Leia mais

Dependências Multi-Valor, 4 a Forma Normal

Dependências Multi-Valor, 4 a Forma Normal Normalização: Dependências Multi-Valor, 4 a Forma Normal Fernando Lobo Base de Dados, Universidade do Algarve 1 / 20 Dependências Multi-Valor (DMV s) DMV dá origem a um tipo de redundância que não está

Leia mais

Rápida revisão do Modelo Relacional

Rápida revisão do Modelo Relacional Rápida revisão do Modelo Relacional Conceito de relação Tuplas e atributos Rápida revisão do Modelo Relacional Regras de integridade Entidade: Deve existir uma chave primária com valor único e não-nulo.

Leia mais

Álgebra Relacional. Índice. Sistemas de Bases de Dados. Orlando Belo

Álgebra Relacional. Índice. Sistemas de Bases de Dados. Orlando Belo Sistemas de Bases de Dados Edição 2004 Álgebra Relacional Orlando Belo Departamento de Informática Escola de Engenharia Universidade do Minho Índice Introdução A Álgebra Relacional Operadores da Álgebra

Leia mais

Bases de Dados. Parte VIII: Normalização

Bases de Dados. Parte VIII: Normalização Bases de Dados MBI/MI/LCC/LEG/LERSI/LMAT Parte VIII Normalização 1 Desenho de BDs Relacionais Algumas questões sobre o desenho de BDs relacionais: Como é que se desenha uma boa BD relacional? Qual é o

Leia mais

Redundância é a causa de vários problemas com esquemas relacionais: armazenamento redundante, anomalias de inserção, de exclusão e de atualização.

Redundância é a causa de vários problemas com esquemas relacionais: armazenamento redundante, anomalias de inserção, de exclusão e de atualização. 1 Redundância é a causa de vários problemas com esquemas relacionais: armazenamento redundante, anomalias de inserção, de exclusão e de atualização. Restrições de integridade, particularmente dependências

Leia mais

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas Banco de dados Conteúdo: DDL Prof. Patrícia Lucas O mysql MySQL Workbench é uma ferramenta de design de banco de dados visual que integra o desenvolvimento SQL, administração, design de banco de dados,

Leia mais

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR SQL Structured Query Language, ou Linguagem de Consulta Estruturada, foi desenvolvida pela IBM nos anos 70 para demonstrar a viabilidade do modelo relacional para bancos de dados. No final dos anos 80

Leia mais

!" # Modelos de dados. 1ª geração. 2ª geração. 3ª geração. Modelo Hierárquico Modelo Rede. Modelo Relacional

! # Modelos de dados. 1ª geração. 2ª geração. 3ª geração. Modelo Hierárquico Modelo Rede. Modelo Relacional Nuno Melo e Castro !" # Modelos de dados 1ª geração Modelo Hierárquico Modelo Rede 2ª geração Modelo Relacional 3ª geração Extensões ao modelo relacional Modelo lógico-dedutivo Modelo orientado a objectos

Leia mais

15 - Introdução às Bases de Dados

15 - Introdução às Bases de Dados ICE-B 15 - Introdução às Bases de Dados Ludwig Krippahl Bases de Dados Resumo Introdução aos sistemas de bases de dados: Modelo relacional SQL (Structured Query Language) Criar tabelas Inserir dados Consultar

Leia mais

A linguagem SQL

A linguagem SQL SQL 2008.1 A linguagem SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua primeira versão

Leia mais

Introdução ao Banco de Dados. Banco de Dados

Introdução ao Banco de Dados. Banco de Dados Introdução ao Banco de Dados Prof. Tiago Garcia de Senna Carneiro UFOP Prof. Técnicas de Programação II 2006 PARTE 1: Conceitos Básicos Banco de Dados SGDB: Sistema Gerenciador de Banco de Dados Definição:

Leia mais

Conceito de Campos e Tabelas

Conceito de Campos e Tabelas Aula 04 Conceito de Campos e Tabelas Tabelas É um conjunto de registros de um mesmo tipo onde cada linha é composta por um campo que recebe um valor de atributo. Em um Banco de Dados poderá existir uma

Leia mais

Modelagem semântica permite aproximar o modelo obtido do mundo real Exemplo de modelos:

Modelagem semântica permite aproximar o modelo obtido do mundo real Exemplo de modelos: Motivação Modelagem semântica permite aproximar o modelo obtido do mundo real Exemplo de modelos: Modelo de Entidades e Relacionamento (MER) UML (linguagem de modelagem universal) Fases de um projeto de

Leia mais

Informática II Cap. 5-2 Bases de Dados - MsAccess

Informática II Cap. 5-2 Bases de Dados - MsAccess Cap. 5-2 Bases de Dados - MsAccess Filipe Caldeira - 2001 1 Introdução Porquê a utilização de Sistemas de Bases de Dados (SBD)? Armazenamento dos dados de uma forma consistente ( a informação não deve

Leia mais

A Linguagem de Modelagem Unificada

A Linguagem de Modelagem Unificada A Linguagem de Modelagem Unificada Modelagem de Dados 1 UML (Unified Modeling Language Linguagem de Modelagem Unificada) foi desenvolvida originalmente como uma notação gráfica para descrever projetos

Leia mais

Bases de Dados. Parte I: Conceitos Básicos. Parte I

Bases de Dados. Parte I: Conceitos Básicos. Parte I Bases de Dados Parte I Conceitos Básicos Ricardo Rocha DCC-FCUP 1 Definições Básicas Dados: factos conhecidos que têm algum significado e que podem ser guardados. Base de dados (BD): conjunto de dados

Leia mais

Tornou-se um padrão de fato para aplicações comerciais, devido a sua simplicidade e performance.

Tornou-se um padrão de fato para aplicações comerciais, devido a sua simplicidade e performance. Histórico Foi introduzido por Codd (1970) Tornou-se um padrão de fato para aplicações comerciais, devido a sua simplicidade e performance. É um modelo formal, baseado na teoria matemática das relações

Leia mais

A linguagem SQL

A linguagem SQL SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua primeira versão recebeu o nome de

Leia mais

Bases de Dados. Parte I: Conceitos Básicos

Bases de Dados. Parte I: Conceitos Básicos Bases de Dados Parte I Conceitos Básicos 1 Definições Básicas! Base de dados (BD): conjunto de dados que se relacionam entre si.! Dados: factos conhecidos que têm algum significado e que podem ser guardados.!

Leia mais

Aula 7 SBD ER para Relacional. Profa. Elaine Faria UFU

Aula 7 SBD ER para Relacional. Profa. Elaine Faria UFU Aula 7 SBD ER para Relacional Profa. Elaine Faria UFU - 2017 Introdução Modelo ER Conveniente para representar um projeto de BD inicial de alto nível Modelo Relacional Pode ser usado para suportar a implementação

Leia mais

Revisão de Bancos de Dados

Revisão de Bancos de Dados Revisão de Bancos de Dados Conceitos Básicos 1. Defina o que é um banco de dados e o que é um sistema gerenciador de bancos de dados (SGBD). 2. Defina as arquiteturas de software em duas camadas (cliente/servidor)

Leia mais

Bases de Dados. DDL Data Definition Language

Bases de Dados. DDL Data Definition Language Bases de Dados DDL Data Definition Language SQL SQL = Structured Query Language Foi originalmente criada pela IBM nos anos 70 como parte de um protótipo de sistema relacional Posteriormente foi implementada

Leia mais

Parte II Modelo de Dados Relacional. Evandro E. S. Ruiz

Parte II Modelo de Dados Relacional. Evandro E. S. Ruiz Parte II Modelo de Dados Relacional Evandro E. S. Ruiz evandro@usp.br 1 Intro Modelo relacional introduzido por Ted Codd (IBM) em 1970 Modelo simples matematicamente. Usa conceitos de relações matemáticas

Leia mais

Época de Recurso Sem consulta

Época de Recurso Sem consulta Bases de Dados 2012/13 19/Junho/13 9:00 Duração: 3h Época de Recurso Sem consulta Leia com atenção a informação constante desta página, enquanto espera a indicação do docente para começar a resolução do

Leia mais

Banco de Dados. Linguagem SQL

Banco de Dados. Linguagem SQL Banco de Dados Linguagem SQL 1 A linguagem SQL: história Em junho de 1970, o matemático Edgar Frank Codd, publicou o artigo "A Relational Model of Data for Large Shared Data Banks" na revista "Communications

Leia mais

Aula 8 BD1 Álgebra Relacional. Profa. Elaine Faria UFU

Aula 8 BD1 Álgebra Relacional. Profa. Elaine Faria UFU Aula 8 BD1 Álgebra Relacional Profa. Elaine Faria UFU - 2018 Introdução Linguagens de consulta formais associadas ao modelo relacional Álgebra Usa uma coleção de operadores e cada consulta descreve um

Leia mais

GBC043 Sistemas de Banco de Dados Normalização de Relações em Projeto de BD

GBC043 Sistemas de Banco de Dados Normalização de Relações em Projeto de BD GBC043 Sistemas de Banco de Dados Normalização de Relações em Projeto de BD Ilmério Reis da Silva ilmerio@facom.ufu.br www.facom.ufu.br/~ilmerio/sbd UFU/FACOM Projeto de BD Relacionais Método 1: mapeamento

Leia mais

Bases de Dados. Normalização. Formas Normais. 1FN : atomicidade dos atributos. 2FN : proíbe dependência parcial de chaves

Bases de Dados. Normalização. Formas Normais. 1FN : atomicidade dos atributos. 2FN : proíbe dependência parcial de chaves Bases de Dados Normalização Formas Normais 1FN : atomicidade dos atributos 2FN : proíbe dependência parcial de chaves 3FN e FNBC: impõe dependências a partir de chaves 2 1 1FN Definição um esquema relacional

Leia mais

BANCO DE DADOS. Araújo Lima. Ago / Araújo

BANCO DE DADOS. Araújo Lima. Ago / Araújo BANCO DE DADOS Lima Ago / 2017 1 Índice 3.Modelos de dados Modelo Conceitual Modelo Lógico Modelo Físico Classificação de Bancos de Dados Hierárquico Rede Relacional 4.Modelo Relacional Introdução Conceitos

Leia mais

MODELO RELACIONAL Prof.: Jacson Tiola Técnico em Redes de Computadores

MODELO RELACIONAL Prof.: Jacson Tiola Técnico em Redes de Computadores MODELO RELACIONAL Prof.: Jacson Tiola Técnico em Redes de Computadores http://tiola.net Modelo Relacional Introduzido por Codd em 1970 (IBM/ Califórnia) Modelo com uma sólida base formal teoria dos conjuntos

Leia mais

BANCO DE DADOS GERENCIAL 1 A U L A 2

BANCO DE DADOS GERENCIAL 1 A U L A 2 BANCO DE DADOS GERENCIAL 1 A U L A 2 N Í V E I S D E V I S Ã O, S U B G R U P O D D L : C R I A N D O B A N C O D E D A D O S, C R I A N D O T A B E L A S, E S T R U T U R A D A T A B E L A CONCEITOS :

Leia mais

SQL. Linguagem de Definição de Dados (DDL) Tipos em SQL. Tipos Data/Tempo em SQL (cont.)

SQL. Linguagem de Definição de Dados (DDL) Tipos em SQL. Tipos Data/Tempo em SQL (cont.) SQL Linguagem de Definição de Dados (DDL) Linguagem de Definição dos Dados Tipos em SQL Manipular Tabelas (relações) Integridade e Segurança Linguagem de Manipulação dos Dados Estrutura básica Operações

Leia mais

Introdução a Bancos de Dados

Introdução a Bancos de Dados Introdução a Bancos de Dados - Conceitos - Modelos lógicos e relacional - Álgebra relacional - SQL - Projeto Lógico INPE - Divisão de Processamento de Imagens INPE 1 Sistemas de Banco de Dados Definição:

Leia mais

Modelo Relacional Wendel Melo

Modelo Relacional Wendel Melo Wendel Melo Faculdade de Computação Universidade Federal de Uberlândia www.facom.ufu.br/~wendelmelo Banco de Dados I 2 Proposto por Ted Codd em 1970; Se tornou padrão nos principais SGBD s de uso geral

Leia mais

No contexto informático. Requisitos

No contexto informático. Requisitos Nuno Melo e Castro Sistema Conjunto de itens interdependentes que interagem para realizar uma tarefa Um método ou conjunto de procedimentos que definem um comportamento Pode ser automatizado ou manual,

Leia mais

MATA60 BANCO DE DADOS Aula 5- Modelo Relacional. Prof. Daniela Barreiro Claro

MATA60 BANCO DE DADOS Aula 5- Modelo Relacional. Prof. Daniela Barreiro Claro MATA60 BANCO DE DADOS Aula 5- Modelo Relacional Prof. Daniela Barreiro Claro Agenda Histórico Modelo em Redes e Hierárquico Modelo Relacional Restrições de Integridade Chaves FORMAS - UFBA 2 de X Histórico

Leia mais

ÁLGEBRA E CÁLCULO RELACIONAL

ÁLGEBRA E CÁLCULO RELACIONAL UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO ERINALDO SANCHES NASCIMENTO ÁLGEBRA E CÁLCULO RELACIONAL MARINGÁ 2014 SUMÁRIO SUMÁRIO...1 1 INTRODUÇÃO...2 1.1

Leia mais