apresenta¸c˜ao - fernando lobo

227
Apresenta¸c˜ ao Fernando Lobo Base de Dados, Universidade do Algarve 1 / 19 Professores da disciplina Fernando Lobo (T e P) Alvaro Barradas (P) 2 / 19

Upload: others

Post on 27-Jun-2022

3 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Apresenta¸c˜ao - Fernando Lobo

Apresentacao

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 19

Professores da disciplina

Fernando Lobo (T e P)

Alvaro Barradas (P)

2 / 19

Page 2: Apresenta¸c˜ao - Fernando Lobo

Livro recomendado

A First Course in Database Systems,Je↵rey Ullman & Jennifer Widom,Prentice Hall, 3rd edition, 2007.

3 / 19

Avaliacao

Trabalho pratico (30%), exame (70%)

Necessitam nota nao inferior a 7.0 valores no trabalho pratico paraserem admitidos a exame.

Trabalho pratico pode ser feito individualmente ou em grupo de 2alunos.

Discussao dos trabalhos na ultima semana de aulas.

4 / 19

Page 3: Apresenta¸c˜ao - Fernando Lobo

Objectivos Gerais

Dominar tecnicas de analise e modelacao de dados.

Conhecer o modelo relacional.

Saber definir o esquema de uma base de dados relacional.

Saber inserir, modificar, e extrair informacao de uma BD usando SQL.

Saber especificar restricoes, vistas, ındices, e elementos activos.

Compreender o mecanismo de transaccoes.

5 / 19

Programa resumido

Conceitos introdutorios

Modelacao conceptualI UML

Modelo relacionalI Normalizacao

ProgramacaoI Algebra relacionalI SQLI SQL + programacao convencional

6 / 19

Page 4: Apresenta¸c˜ao - Fernando Lobo

Trabalho pratico

Consiste em 4 partes:

1 Escolher tema, fazer modelo conceptual.

2 Converter modelo conceptual no modelo relacional, definir esquemaem SQL.

3 Elaborar queries em SQL.

4 Juntar linguagem de programacao convencional com SQL.

7 / 19

Exemplos de temas escolhidos pelos alunos no passado

Receitas de culinaria

Campeonatos de surf

Vinhos

Borga Gest: Saıdas a noite

...

8 / 19

Page 5: Apresenta¸c˜ao - Fernando Lobo

O que e um Sistema de Gestao de Base de Dados?

E um sistema que:

1 armazena e manipula grandes volumes de informacao.

2 suporta acesso simultaneo por varios utilizadores.

3 permite acesso eficiente aos dados.

9 / 19

Exemplo: bancos

Informacao: contas, clientes, saldos, movimentos, etc.

Grandes volumes: gigabytes.

Multi-utilizador: varias pessoas/programas acedem a BD emsimultaneo.

I requer cuidados especiais.

10 / 19

Page 6: Apresenta¸c˜ao - Fernando Lobo

Varias facetas no estudo de base de dados

1 Analise/Modelacao

2 ProgramacaoI SQL + linguagem de programacao

3 Implementacao de SGBDs

Nesta disciplina apenas estudamos os itens (1) e (2)

11 / 19

Um SGBD e um tipo de software

Compra-se (pode ser gratuito), instala-se, configura-se.

Disponıvel para todo o tipo de computadores.

12 / 19

Page 7: Apresenta¸c˜ao - Fernando Lobo

Principais SGBDs

Oracle

DB2 (IBM)

SQL-Server (Microsoft)

PostgreSQL (open source)

MySQL (open source)

SQL Lite (open source)

13 / 19

Modelo conceptual

produz

0..*

0..*

0..*

0..1

Filme

PK nome

PK ano

duracao

aCores

Actor

morada

PK nome

sexo

data_nascimento

Estudio

PK nome

morada

participa

14 / 19

Page 8: Apresenta¸c˜ao - Fernando Lobo

Conversao para o modelo relacional

Filmes( nome, ano, duracao, aCores, estudio )

Actores( nome, morada, sexo, dataNascimento )

Participa( actor, nomeFilme, anoFilme )

Estudios( nome, morada )

15 / 19

Normalizacao

Eliminar redundancia nas relacoes de modo a que nao haja anomaliasquando se modifica a BD.

Exemplo concreto: se a BD estiver mal concebida, podemos ter deespecificar a mesma informacao varias vezes e isso podera dar origema inconsistencia nos dados.

16 / 19

Page 9: Apresenta¸c˜ao - Fernando Lobo

Algebra relacional e SQL

Algebra relacional permite manipular relacoes (tabelas).

Os operandos sao relacoes e os resultados sao relacoes.

SQL e uma implementacao desta algebra.

17 / 19

Exemplo: Natural Join (./)Filmes:

nome ano estudio

Star Wars 1977 FoxPocahontas 1995 DisneyKing Kong 1933 MGMLion King 1994 Disney

Estudios:

estudio morada

Fox Elm St.Disney Pine St.MGM Oak Dr.

Filmes ./ Estudios

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

Page 10: Apresenta¸c˜ao - Fernando Lobo

Manipulacao de dados com SQL

Qual o nome e ano dos filmes produzidos pelo estudio Disney entre1992 e 1996?

Codigo SQL:

SELECT nome, ano

FROM Filmes

WHERE estudio = ’Disney’

AND ano >= 1992 AND ano <= 1996;

Resultado:nome ano

Pocahontas 1995Lion King 1994

19 / 19

Page 11: Apresenta¸c˜ao - Fernando Lobo

Modelacao 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 Especifica-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 aplicacoes

2 / 56

Page 12: Apresenta¸c˜ao - Fernando Lobo

Passos para criar uma base de dados (cont.)

Para o passo 2 pode usar-se o modelo Entidade-Associacao, UML, ououtro modelo conceptual.

Por vezes o passo 2 e omitido (mas nao e boa pratica) e passa-sedirectamente 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 Modelo Entidade-Associacao (E/A)

I UML

Iremos aprender apenas modelacao com UML

4 / 56

Page 13: Apresenta¸c˜ao - Fernando Lobo

Unified Modeling Language (UML)

UML e usado essencialmente para modelacao de software com umaabordagem orientada a objectos.

Um subconjunto do UML pode ser usado para modelacao conceptualde base de dados.

Tem uma notacao grafica.

5 / 56

Diagrama de classe

Notacao para descrever atributos (propriedades) e comportamentos(metodos) de objectos de uma classe.

<metodos>

<nome da classe>

<atributos>

6 / 56

Page 14: Apresenta¸c˜ao - Fernando Lobo

Diagrama de classe

Vamos ignorar os metodos nesta disciplina.

<nome da classe>

<atributos>

7 / 56

Exemplo

Imaginem que tem de fazer uma BD para os Servicos Academicos.

Vamos ter de guardar informacao sobre os alunos.

Para cada aluno podemos querer guardar o seu numero de aluno,nome, telefone, morada, etc.

Tudo isso sao atributos/propriedades de um aluno.

8 / 56

Page 15: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Faz sentido termos uma classe de alunos.

Pensem numa classe como sendo um tipo de dados (uma estruturaem C)

morada: string

nome: string

telefone: string

numero: int

Aluno

9 / 56

Exemplo

Numa fase inicial, podemos omitir o tipo de dados dos atributos.

nome

numero

telefone

morada

Aluno

10 / 56

Page 16: Apresenta¸c˜ao - Fernando Lobo

Chave primaria

Conjunto de atributos que determina de forma unica um objecto deuma classe.

Especifica-se usando PK junto do(s) atributo(s).

nome

Aluno

PK numero

telefone

morada

11 / 56

Conjunto de objectos de uma classe

A futura BD tera um conjunto de objectos da classe Aluno.

Esse conjunto pode ser visualizado na forma de uma tabela.

Cada linha da tabela e um objecto da classe Aluno.

numero nome morada telefone

34567 Jose Almeida Rua da Prata, 27, Faro 96-333459845301 Maria Tavares Av. da Liberdade, 13, Faro 91-983778838750 Paula Soares Av. de Paris, 14, Olhao 91-4201314. . . . . . . . . . . .

12 / 56

Page 17: Apresenta¸c˜ao - Fernando Lobo

Associacoes

Podemos ter associacoes entre objectos de classes diferentes.

A associacao e representada por uma linha com um nome.

Exemplo: Podemos querer saber quais as disciplinas que cada alunoja fez.

I Criamos uma classe Disciplina com atributos sigla e nome.

I Unimos Aluno e Disciplina com uma linha e damos um nome quereflecte o tipo de ligacao que existe.

13 / 56

Exemplo

morada

Disciplina

realiza

0..* 0..*

Aluno

PK numero

telefone

PK sigla

nomenome

A seta facilita a leitura em portugues corrente.

Um aluno realiza varias (0 ou mais) disciplinas.

Uma disciplina e realizada por varios (0 ou mais) alunos.

14 / 56

Page 18: Apresenta¸c˜ao - Fernando Lobo

Associacoes podem ser vistas em forma de tabela

Alunosnumero nome morada telefone

34567 Jose Almeida Rua da Prata, 27, Faro 96-333459845301 Maria Tavares Av. da Liberdade, 13, Faro 91-983778838750 Paula Soares Av. de Paris, 14, Olhao 91-4201314. . . . . . . . . . . .

Disciplinas

sigla nome

BD Bases de DadosPOO Programacao Orientada a Objectos. . . . . .

Realizaaluno disciplina

34567 BD34567 POO38750 POO. . . . . . 15 / 56

Multiplicidade de associacoes

Multiplicidade e especificada nas extremidades da linha.

I m..n significa que 1 objecto do outro extremo esta associado com ummınimo de m e um maximo de n objectos deste extremo.

I * ! “infinito” (ex: 1..* significa “pelo menos um”)

16 / 56

Page 19: Apresenta¸c˜ao - Fernando Lobo

Exemplo

morada

Disciplina

realiza

Aluno

PK numero PK sigla

nome0..105..30telefone

nome

Um aluno realiza um mınimo de 0 e um maximo de 10 disciplinas.

Uma disciplina e realizada por um mınimo de 5 e um maximo de 30alunos.

17 / 56

Multiplicidade de associacoes

Dadas duas classes, C1 e C2,

um-um: cada objecto de C1 esta associado no maximo a um objectode C2 e vice-versa.

muitos-um: cada objecto de C1 esta associado no maximo a um objectode C2. Mas um objecto de C2 pode estar associado a variosobjectos de C1.

muitos-muitos: cada objecto de C1 pode estar associado a varios objectosde C2 e vice-versa.

18 / 56

Page 20: Apresenta¸c˜ao - Fernando Lobo

Multiplicidade um-um

C2C1

Cada objecto de C1 esta associado no maximo a um objecto de C2 evice-versa.

19 / 56

Multiplicidade muitos-um

C2C1

Cada objecto de C1 esta associado no maximo a um objecto de C2.

20 / 56

Page 21: Apresenta¸c˜ao - Fernando Lobo

Multiplicidade muitos-muitos

C2C1

Cada objecto de C1 pode estar associado a varios objectos de C2 evice-versa. Mas um objecto de C2 pode estar associado a variosobjectos de C1.

21 / 56

Classes associativas

E permitido atributos em associacoes.

Associacao passa a ser uma “Classe Associativa”.

22 / 56

Page 22: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Um aluno realiza uma disciplina e obtem uma nota.

A nota e uma propriedade da associacao aluno–disciplina.

a62222

Aluno Disciplina

BD

POO

nota=15

nota=15

nota=12

nota=13

a61234

a61111

23 / 56

Classe associativa em UML

morada

Disciplina

0..* 0..*

Realiza

nota

Aluno

PK sigla

nome

PK numero

nome

telefone

24 / 56

Page 23: Apresenta¸c˜ao - Fernando Lobo

E necessario tomar decisoes na modelacao

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 entao o ano pode ficar atributo de realiza.

ano

Disciplina

0..* 0..*

Realiza

Aluno

PK sigla

nome

PK numero

nome

telefone

morada

nota

26 / 56

Page 24: Apresenta¸c˜ao - Fernando Lobo

nota=15 , ano=2017

Aluno Disciplina

27 / 56

Se BD 2017 6= BD 2018, sigla nao pode ser chave de Disciplina.

Necessitarıamos de ter uma chave composta, ex: {sigla,ano}. Ouentao um codigo de disciplina.

Realiza

Disciplina

0..* 0..*

Aluno

PK siglaPK numero

nome

telefone

morada

nome

nota

PK ano

28 / 56

Page 25: Apresenta¸c˜ao - Fernando Lobo

Mais decisoes...

Estamos a assumir que “Realiza” significa “ter aprovacao adisciplina”.

E razoavel assumir que tal so acontece uma vez.

E se quisermos modelar “inscricao a disciplina”?

E perfeitamente razoavel um aluno inscrever-se a mesma disciplinavarias vezes.

29 / 56

Conceptualmente . . .

nota=8 , ano=2016

Aluno Disciplina

nota=15 , ano=2017

nota=6 , ano=2015

30 / 56

Page 26: Apresenta¸c˜ao - Fernando Lobo

Erro comum em UML

Inscreve−se

Disciplina

0..* 0..*

Aluno

PK sigla

nome

PK numero

nome

telefone

morada

nota

ano

0..*

31 / 56

Mas nao se pode modelar assim

Nao e permitido ter mais do que uma associacao com o mesmo nomeentre dois objectos.

i.e., nao podemos ter varias associacoes de “inscricao”entre umdeterminado aluno e uma determinada disciplina.

nota=8 , ano=2016

Aluno Disciplina

nota=15 , ano=2017

nota=6 , ano=2015

32 / 56

Page 27: Apresenta¸c˜ao - Fernando Lobo

Mais adiante vermos como modelar este problema correctamente.

Nao esquecam este exemplo. E um erro frequente. . .

33 / 56

Exemplo do vosso livro: filmes

Um filme tem: nome, ano, duracao, colorido ou preto/branco.

Um actor/actriz tem: nome, morada, data de nascimento.

Um estudio tem: nome, morada.

Um filme tem varios actores e um actor pode participar em variosfilmes.

Um filme pode ser produzido por um estudio, um estudio podeproduzir varios filmes.

34 / 56

Page 28: Apresenta¸c˜ao - Fernando Lobo

Conhecimento do mundo real

Usa-se conhecimento do mundo real para modelar o problema.

Nao ha uma unica solucao correcta, pode haver varias abordagens.

Devemos assumir pressupostos razoaveis.

35 / 56

Pressupostos para a BD de filmes

Nao ha dois actores com o mesmo nome.

Nao ha dois estudios com o mesmo nome.

Nao ha dois filmes com o mesmo nome produzidos no mesmo ano(mas pode haver em anos distintos: Ex: Ha o King Kong de 1933,mas tambem ha o King Kong de 1976, e ate ha o King Kong de2005).

NOTA: na pratica o melhor seria colocar um atributo artificial — umcodigo — para identificar univocamente cada filme, mas para javamos ignorar isso.

36 / 56

Page 29: Apresenta¸c˜ao - Fernando Lobo

Modelo UML

produz

0..*

0..*

0..*

0..1

Filme

PK nome

PK ano

duracao

aCores

Actor

morada

PK nome

sexo

data_nascimento

Estudio

PK nome

morada

participa

37 / 56

Sobre a chave primaria composta

No diagrama da classe Filme, colocamos PK em nome e PK em ano.

Trata-se de uma chave composta. A chave primaria e {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 e que haja dois filmes com o mesmo nomeproduzidos no mesmo ano.

38 / 56

Page 30: Apresenta¸c˜ao - Fernando Lobo

Varias alternativas para chave primaria

Pode have varias alternativas para chaves primarias. Nesse casoescolhemos uma delas como chave primaria.

Exemplo:

I no caso da BD dos SA poderemos querer guardar o numero do cartaode cidadao do(a) aluno(a).

I temos duas opcoes para chave primaria: numero-de-aluno ounumero-de-CC.

39 / 56

Um erro comum

morada

Aluno

nome

PK numero

PK numCC

telefone

40 / 56

Page 31: Apresenta¸c˜ao - Fernando Lobo

Estudio tem um presidente

Um estudio tem um e um so presidente.

Vamos assumir que um presidente so pode ser presidente de umestudio.

PresidenteEstudio

PK nome

morada

preside 1..1

morada

PK nome

data_nascimento

1..1

41 / 56

Vencimento dos actores

Um actor recebe consoante o filme em que participa.

Solucao: Classe associativa.

salario

Filme

PK nome

PK ano

duracao

aCores

Actor

morada

PK nome

sexo

data_nascimento

0..*0..*

Participa

42 / 56

Page 32: Apresenta¸c˜ao - Fernando Lobo

Associacoes com a propria classe

Pode haver associacoes entre objectos da mesma classe.

Cada objecto representa um papel diferente na associacao.

Ex: um filme pode ser sequencia de um outro filme.

0..*

PK nomePK ano duracao aCores

Filme

sequencia

original0..1

43 / 56

Visualizando em forma de tabela

sequencia original

The Empire Strikes Back Star WarsThe Return of the Jedi The Empire Strikes BackRocky II Rocky IRocky III Rocky II. . . . . .

44 / 56

Page 33: Apresenta¸c˜ao - Fernando Lobo

Subclasses

Uma classe pode ter subclasses.

Ex: Um Cartoon e um tipo de filme, Crime-Misterio tambem e umtipo de filme.

Cartoons e uma subclasse de Filmes, Crime-Misterio e outrasub-classe de Filmes.

Subclasse aponta para a superclasse com uma linha com um triangulona extremidade.

As subclasses podem ter atributos.I ex: arma do crime para os filmes de Crime-Misterio.

45 / 56

Subclasses

PK nome

PK ano

duracao

aCores

Filmes

CartoonsCrime−Misterio

arma

46 / 56

Page 34: Apresenta¸c˜ao - Fernando Lobo

Subclasses

As subclasses de uma classe podem ser:

I completas ou parciais

F completa se cada objecto da superclasse esta numa das subclasses,parcial caso contrario.

I disjuntas ou sobrepostas

F disjunta se um objecto nao pode estar em mais do que uma subclasse,sobreposta caso contrario.

I E costume anotar a classificacao no diagrama de forma textual

47 / 56

Subclasses de Filmes (parciais e sobrepostas)

parcial, sobreposta

PK nomePK ano duracao aCores

Filmes

CartoonsCrime−Misterio

arma

Porque sobrepostas? Porque um filme pode ser simultaneamente umcartoon e um filme de crime-misterio (ex: Who Framed Roger Rabbit?

48 / 56

Page 35: Apresenta¸c˜ao - Fernando Lobo

Agregacao

Associacao 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 estudio.I (o estudio e “dono do”filme)

representa−se por no lado da classe que e’ "dona de"

significa 0..1

PK nomePK ano duracao aCores

Filmes Estudios

1..* PK nome morada

49 / 56

Composicao

Semelhante a agregacao mas a posse e obrigatoria.

Ex: um filme tem de ser forcosamente produzido por um estudio.

significa 1..1

representa−se por no lado da classe que e’ "dona de"

PK nomePK ano duracao aCores

Filmes Estudios

1..* PK nome morada

50 / 56

Page 36: Apresenta¸c˜ao - Fernando Lobo

Agregacao e Composicao

Nao e necessario dar um nome a associacao.

O nome esta implı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 so fazem sentido no contexto de outra classe.

Ex: Um estudio pode ter varias equipas de filmagem: equipa 1, 2, 3,. . .

A equipa de filmagem e uma classe de suporte (ou classe fraca) a umestudio.

Modelamos este tipo de associacao com composicao e colocamosuma caixinha assinalada com PK no diagrama de classe de suporte.

Uma equipa de filmagem so pode ser identificada se for “buscar”achave do estudio respectivo.

52 / 56

Page 37: Apresenta¸c˜ao - Fernando Lobo

Classe de suporte

moradaPK nome

Estudio

PK numero

Eq. Filmagem

PK0..*

53 / 56

Voltando ao problema das inscricoes de alunos

nota=8 , ano=2016

Aluno Disciplina

nota=15 , ano=2017

nota=6 , ano=2015

54 / 56

Page 38: Apresenta¸c˜ao - Fernando Lobo

Assim NAO

Inscreve−se

Disciplina

0..* 0..*

Aluno

PK sigla

nome

PK numero

nome

telefone

morada

nota

ano

0..*

55 / 56

Assim SIM

notaPKPK

DisciplinaAluno

PK sigla

nome

PK numero

nome

telefone

morada

Inscriçao

PK ano

56 / 56

Page 39: Apresenta¸c˜ao - Fernando Lobo

Modelo relacional

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 17

Modelo relacional

Modelo simples e intuitivo baseado no conceito matematico derelacao.

Inventado em 1970 por Edgar Codd.

Utilizado pela maioria dos SGBDs.

SQL e baseado no modelo relacional.

2 / 17

Page 40: Apresenta¸c˜ao - Fernando Lobo

Modelo relacional

Uma relacao e como se fosse uma tabela com linhas e colunas.

A diferenca e que:

I uma relacao nao pode ter linhas repetidas.

Muitas vezes irei usar o termo tabela para me referir a uma relacao(mas devem estar conscientes de que tabela e relacao sao coisasdistintas).

BD = conjunto de relacoes/tabelas.

3 / 17

Definicao formal de relacao

Dados n conjuntos C1,C2, . . . ,Cn (nao necessariamente distintos), Re uma relacao sobre estes n conjuntos, se for um conjunto de tuplosda forma (v1, v2, . . . , vn) em que:

I v1 2 C1

I v2 2 C2

I . . .

I vn 2 Cn

Por outras palavras, R e subconjunto do Produto Cartesiano C1 x C2

x . . . x Cn.

4 / 17

Page 41: Apresenta¸c˜ao - Fernando Lobo

Produto Cartesiano. Exemplo:

Porto

Benfica

Sporting

Milan

Barcelona

Chelsea

(Porto, Barcelona)

(Porto, Chelsea)

(Benfica, Milan)

(Benfica, Barcelona)

(Benfica, Chelsea)

(Sporting, Chelsea)

(Sporting, Barcelona)

(Sporting, Milan)

(Porto, Milan)

A x BA

B

5 / 17

Outro exemplo

C nomesC anos C aCoresC duracao

1901

1900

1902

1903

2

5

3

4

1

6

sim

nao

Star Wars

King Kong

A Maria da UAlg

... ......

NOTA: Conjuntos podem ser infinitos.

6 / 17

Page 42: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo (cont.)

(Star Wars, 1900, 1, sim)

(Star Wars, 1900, 2, nao)

(Star Wars, 1900, 3, sim)

(Star Wars, 1900, 1, nao)

(Star Wars, 1900, 2, sim)

...

C nomes C anos C duracao C aCoresx x x

Produto cartesiano da o conjunto de todos os possıveis tuplos (v1, v2,v3, v4), em que v1 2 Cnomes , v2 2 Canos , v3 2 Cduracao , v4 2 CaCores .

7 / 17

Uma possıvel relacao sobre Cnomes , Canos , Cduracao, CaCores

(Moulin Rouge, 2001, 124, sim)

(Star Wars, 1977, 124, sim)

(King Kong, 1930, 120, nao)

8 / 17

Page 43: Apresenta¸c˜ao - Fernando Lobo

Da jeito visualizar a relacao como uma tabela

nome ano duracao aCores

Star Wars 1977 124 simKing Kong 1930 120 naoMoulin Rouge 2001 124 sim

Nome das colunas sao atributos.

tuplo = linha.

9 / 17

Estas 2 tabelas representam a mesma relacao. Porque?

nome ano duracao aCores

Lion King 1997 108 simStar Wars 1977 124 simKing Kong 1930 120 naoLion King 1997 108 simLion King 1997 108 sim

ano nome aCores duracao

1930 King Kong nao 1201977 Star Wars sim 1241997 Lion King sim 108

10 / 17

Page 44: Apresenta¸c˜ao - Fernando Lobo

Esquema da BD = descricao completa da estrutura da BD

Nome das relacoes/tabelas

Nome dos atributos

Domınio dos atributos (integer, string, . . .)

Chaves

. . .

11 / 17

Instancia da BD

O conteudo (os tuplos) de todas as relacoes de uma BD constituiuma instancia da BD.

A instancia da BD muda com frequencia.

O esquema da BD e feito uma vez (por pessoas como voces) e naocostuma mudar.

12 / 17

Page 45: Apresenta¸c˜ao - Fernando Lobo

Definicao 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 sao:

I INT ou INTEGERI REAL ou FLOATI CHAR(n), VARCHAR(n)I BOOLEANI DATEI TIME

13 / 17

Exemplo: Tabela de actores

CREATE TABLE Actores(

nome VARCHAR(50),

morada VARCHAR(70),

sexo CHAR,

dataNascimento DATE

);

14 / 17

Page 46: Apresenta¸c˜ao - Fernando Lobo

DATE e TIME

o formato de DATE e ’yyyy-mm-dd’.

o formato de TIME e ’hh:mm:ss’.I podera ter ainda fraccoes de segundo.

Exemplos:

I DATE ’2008-01-05’(5 de Janeiro de 2008)

I TIME ’15:32:04.5’(4 segundos e meio depois das 3:32 da tarde)

15 / 17

Declaracao da chave

um atributo ou lista de atributos pode ser declarado como chave emSQL utilizando PRIMARY KEY.

Exemplo:

CREATE TABLE Actores(

nome VARCHAR(50) PRIMARY KEY,

morada VARCHAR(70),

sexo CHAR,

dataNascimento DATE

);

16 / 17

Page 47: Apresenta¸c˜ao - Fernando Lobo

Declaracao da chave (cont.)

No caso da chave ser composta, temos de especificar um elemento aparte.

Exemplo:

CREATE TABLE Filmes(

nome VARCHAR(50),

ano INTEGER,

duracao INTEGER,

aCores BOOLEAN,

PRIMARY KEY (nome,ano)

);

17 / 17

Page 48: Apresenta¸c˜ao - Fernando Lobo

Conversao de modelo UML para o modelo relacional

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 19

Conversao do modelo UML para o modelo relacional

Diagrama de classe ! RelacaoI atributos da classe ! atributos da relacao.I chave da classe ! chave da relacao.I Exemplo:

PK nome: stringPK ano: int duracao: int aCores: boolean

Filmes

Filmes( nome, ano, duracao, aCores )

2 / 19

Page 49: Apresenta¸c˜ao - Fernando Lobo

Conversao do modelo UML para o modelo relacional

Associacao entre classes ! RelacaoI os atributos sao a uniao das chaves das classes envolvidas.I Nota: deve-se renomear o nome dos atributos para nao haver conflito

de nomes.

Exemplo:

participa

Filme

PK nome

PK ano

duracao

aCores

Actor

morada

PK nome

sexo

data_nascimento

0..*0..*

Participa( nomeFilme, anoFilme, nomeActor )

3 / 19

Associacao entre classes ! relacao. Qual a chave?

3 casos:

I muitos-muitos: a chave e a uniao das chaves dos conjuntos entidadeenvolvidos.

I muitos-um: a chave e a chave correspondente ao muitos.

I um-um: escolhe-se uma das duas.

4 / 19

Page 50: Apresenta¸c˜ao - Fernando Lobo

Exemplo: Participa (muitos-muitos)

participa

Filme

PK nome

PK ano

duracao

aCores

Actor

morada

PK nome

sexo

data_nascimento

0..*0..*

Uniao da chave de Actores (nomeActor) com a chave de Filmes(nomeFilme,anoFilme).

Participa( nomeFilme, anoFilme, nomeActor )

5 / 19

Outro exemplo: Produz (muitos-um)

0..1

Estudio

PK nome

morada

produz0..*

Filme

PK nome

PK ano

duracao

aCores

Escolhe-se apenas a chave de Filmes (nomeFilme,anoFilme).

Produz( nomeEstudio, nomeFilme, anoFilme )

6 / 19

Page 51: Apresenta¸c˜ao - Fernando Lobo

Simplificacao

Relacoes oriundas de associacoes muitos-um podem ser eliminadas.

Mas temos que colocar a chave da classe do lado “um” como atributoda relacao do lado “muitos”.

No exemplo anterior, a relacao Produz pode ser eliminada secolocarmos a chave de Estudios (nomeEstudio) como atributo darelacao Filmes.

Filmes( nome, ano, duracao, aCores, nomeEstudio )

Porque?

7 / 19

Exemplo completo

produz

0..*

0..*

0..*

0..1

Filme

PK nome

PK ano

duracao

aCores

Actor

morada

PK nome

sexo

data_nascimento

Estudio

PK nome

morada

participa

8 / 19

Page 52: Apresenta¸c˜ao - Fernando Lobo

Vai dar origem a 4 relacoes

Filmes( nome, ano, duracao, aCores, nomeEstudio )

Actores( nome, morada, sexo, dataNascimento )

Estudios( nome, morada )

Participa( nomeActor, nomeFilme, anoFilme )

9 / 19

Uma possıvel instancia da BD

Filmes:

nome ano duracao aCores nomeEstudio

Star Wars 1977 124 true FoxIndiana Jones 1983 130 true Universal

Actores:

nome morada sexo dataNascimento

Harrison Ford 789 Palm Dr, Hollywood m 1942-07-13Carrie Fisher 123 Maple St, Hollywood f 1956-10-21Emilio Estevez 32 Elm St, Beverly Hills m 1962-05-12

10 / 19

Page 53: Apresenta¸c˜ao - Fernando Lobo

Uma possıvel instancia da BD (cont.)

Estudios:

nome morada

Fox 127 Springfield Av, HollywoodDisney 14 Lincoln St, Los AngelesUniversal 23 Universal Studies Dr., Los Angeles

Participa:

nomeActor nomeFilme anoFilme

Carrie Fisher Star Wars 1977Harrison Ford Star Wars 1997Harrison Ford Indiana Jones 1983

11 / 19

Classe associativa

Classe associativa ! RelacaoI os atributos sao a uniao das chaves das classes envolvidas na associacaoI mais os atributos da classe associativa

Exemplo:

salario

Filme

PK nome

PK ano

duracao

aCores

Actor

morada

PK nome

sexo

data_nascimento

0..*0..*

Participa

Participa( nomeFilme, anoFilme, nomeActor, salario )

12 / 19

Page 54: Apresenta¸c˜ao - Fernando Lobo

Associacao de uma classe com ela propria

Quando temos uma associacao envolvendo objectos da mesma classecom temos de colocar a chave 2 vezes, uma para cada papel.

Exemplo:

0..*

PK nomePK ano duracao aCores

Filme

sequencia

original0..1

13 / 19

Associacao de uma classe com ela propria

SequenciaDe( seqNome, seqAno, origNome, origAno )

SequenciaDe:

seqNome seqAno origNome origAno

Rocky II 1982 Rocky I 1980Rocky III 1985 Rocky II 1982... ... ... ...

14 / 19

Page 55: Apresenta¸c˜ao - Fernando Lobo

Classes de suporte

moradaPK nome

Estudio

PK numero

Eq. Filmagem

PK0..*

Estudios( nome, morada )

EquipasFilmagem( numero, nomeEstudio )

A associacao entre a classe de suporte e a classe “dona”pode sereliminada (porque e muitos-um).

I e nao e necessario acrescentar nada a EquipasFilmagem. Porque?

15 / 19

Sub-classes

Existem 2 alternativas:

1 Criar uma relacao para cada sub-classe.

2 Combinar toda a hierarquia numa unica classe e usar valores NULLsempre que um atributo nao se aplica.

16 / 19

Page 56: Apresenta¸c˜ao - Fernando Lobo

Exemplo:

PK nome

PK ano

duracao

aCores

Filmes

CartoonsCrime−Misterio

arma

17 / 19

Alternativa 1

Filmes( nome, ano, duracao, aCores )

CrimeMisterio( nome, ano, arma )

Cartoons( nome, ano )

Um filme que nao seja Cartoon nem de Crime-Misterio, apareceapenas na relacao Filmes.

Um filme que seja apenas um Cartoon (ex: “Lion King”) ira aparecernas relacoes Filmes e Cartoons.

Um filme que seja simultaneamente um Cartoon e um CrimeMisterio(ex: “Who Framed Roger Rabbit”) ira aparecer em 3 relacoes:Filmes, Cartoons e CrimeMisterio.

18 / 19

Page 57: Apresenta¸c˜ao - Fernando Lobo

Alternativa 2

Filmes( nome, ano, duracao, 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” nao tem NULLs.

NOTA:

Perdemos informacao. Nao sabemos se um determinado filme e umcartoon (ou crime-misterio, ou ambos).

Solucao possıvel: colocar mais um atributo, ex: genero.

19 / 19

Page 58: Apresenta¸c˜ao - Fernando Lobo

Dependencias Funcionais

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 26

Motivacao: Normalizacao

Por vezes o esquema relacional tem falhas.

Geralmente sao derivadas de falhas no modelo conceptual.

Vamos aprender a teoria de “Normalizacao” de relacoes, a qual

permite eliminar certo tipo de falhas.

2 / 26

Page 59: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Filmes1( nome, ano, duracao, nomeEstudio, moradaEstudio )

nome ano duracao nomeEstudio moradaEstudio

Star Wars 1977 124 Fox 10 Elm St., Los Angeles

Empire Strikes Back 1980 143 Fox 10 Elm St., Los Angeles

Gone With the Wind 1939 181 Paramount 44 Pine St., Los Angeles

Lion King 1994 124 Disney 56 Oak St., Los Angeles

Return of the Jedi 1983 165 Fox 10 Elm St., Los Angeles

Pocahontas 1995 115 Disney 56 Oak St., Los Angeles

Qual o problema desta relacao?

3 / 26

Problemas

1 Redundacia

I a morada de um estudio aparece repetida varias vezes.

2 Pode dar origem a anomalias em “updates”.

I ex: actualizar a morada no 1otuplo e nao o fazer no 2

oe 5

otuplo.

3 Pode dar origem a anomalias em “deletes”.

I ex: se apagarmos o filme “Gone With the Wind”, o estudio

“Paramount” desaparece da BD!

4 / 26

Page 60: Apresenta¸c˜ao - Fernando Lobo

Normalizacao

Estudo de Normalizacao de relacoes permite-nos decompor uma

relacao em varias relacoes de modo a que nao haja este tipo de

anomalias.

Antes de aprender a faze-lo, precisamos de aprender o conceito de

Dependencia Funcional.

5 / 26

Dependencias Funcionais

Generalizacao do conceito de chave.

Notacao: X ! Y

Significado: se fixarmos valores para os atributos X , os valores dos

atributos Y sao unicos (i.e., nao ha repetidos).

I Nota: X e Y sao 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

Page 61: Apresenta¸c˜ao - Fernando Lobo

No nosso exemplo . . .

Filmes1( nome, ano, duracao, nomeEstudio, moradaEstudio )

nome ano duracao nomeEstudio moradaEstudio

Star Wars 1977 124 Fox 10 Elm St., Los Angeles

Empire Strikes Back 1980 143 Fox 10 Elm St., Los Angeles

Gone With the Wind 1939 181 Paramount 44 Pine St., Los Angeles

Lion King 1994 124 Disney 56 Oak St., Los Angeles

Return of the Jedi 1983 165 Fox 10 Elm St., Los Angeles

Pocahontas 1995 115 Disney 56 Oak St., Los Angeles

nome ano ! duracao nomeEstudio moradaEstudio

nomeEstudio ! moradaEstudio

7 / 26

Definicao e independente da instancia

A definicao de DF e independente da instancia da relacao.

Uma DF e uma assercao que e obedecida por todas as possıveis

instancias de uma relacao.

O mesmo acontece com o conceito de chave.

8 / 26

Page 62: Apresenta¸c˜ao - Fernando Lobo

Chaves e Superchaves

X e uma superchave da relacao R se:

I X ! todos os atributos de R .

X e uma chave da relacao R , se nenhum subconjunto proprio de Xfor superchave de R (i.e., X e uma “superchave mınima”).

I NOTA: Y e subconjunto proprio de X , se Y ✓ X ^ Y 6= X

X e chave de R ) X e superchave de R .

9 / 26

Exemplo

Filmes1( nome, ano, duracao, nomeEstudio, moradaEstudio )

Com DF’s:

nome ano ! duracao nomeEstudio moradaEstudio

nomeEstudio ! moradaEstudio

{nome,ano} e chave de Filmes1. Porque?

Quantas superchaves ha na relacao Filmes1?

10 / 26

Page 63: Apresenta¸c˜ao - Fernando Lobo

DF’s triviais

X ! Y e trivial se Y ✓ X

Exemplos

I nome ano ! nome

I nome ! nome

11 / 26

Regras sobre DF’s

X ! A1A2 . . .An

E equivalente a:

I X ! A1

I X ! A2

I . . .

I X ! An

Em ingles, “Splitting Rule”.

12 / 26

Page 64: Apresenta¸c˜ao - Fernando Lobo

Nao se pode fazer o mesmo do lado esquerdo

Exemplo:

nome ano ! duracao

nao e equivalente a:

I nome ! duracao

I ano ! duracao

Porque?

13 / 26

Regras sobre DF’s (cont.)

Transitividade: Se X ! Y e Y ! Z , entao X ! Z .

“Augmentation”: Se X ! Y , entao XZ ! Y .

14 / 26

Page 65: Apresenta¸c˜ao - Fernando Lobo

De onde vem as DF’s

1 Chaves obtidas no modelo conceptual.

2 Relacoes muitos-um.

3 Conhecimento do problema.

15 / 26

Exemplo: casos 1 e 2

0..1

Estudio

PK nome

morada

produz0..*

Filme

PK nome

PK ano

duracao

aCores

Filmes( nome, ano, duracao, aCores, nomeEstudio )

nome ano ! duracao aCores

nome ano ! nomeEstudio

16 / 26

Page 66: Apresenta¸c˜ao - Fernando Lobo

Exemplo: conhecimento sobre o problema (caso 3)

Nao pode haver 2 disciplinas que funcionam no mesmo dia da

semana, a mesma hora, e na mesma sala.

I sala dia hora ! disciplina

17 / 26

Fecho de um conjunto de atributos

Notacao: o fecho de X designa-se por X+.

Significado: X+e o conjunto de todos os atributos que sao

funcionalmente determinados por X .

Algoritmo para calcular X+:

1 X+= X

2 Se A1,A2, . . . ,Am ! B , e todos os A0s estao contidos em X+,

adicionar B a X+.

3 Termina quando nao conseguirmos adicionar mais nada a X+.

18 / 26

Page 67: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Dada a relacao R(ABCDEF ) com as seguintes DF’s:

I AB ! C

I BC ! A

I BC ! D

I D ! E

I CF ! B

(AB)+ = ?

= AB= ABC // porque AB ! C= ABCD // porque BC ! D= ABCDE // porque D ! E

19 / 26

Projeccao de DF’s

Nota: Projeccao = eliminar algumas colunas.

Motivacao: Normalizacao, o processo de decompor uma relacao em 2

ou mais relacoes.

Exemplo:

I R(ABCD) com DF’s: AB ! C , C ! D, e D ! A.

I Decompor em R1(ABC ) e R2(AD).

I Quais as DF’s em R1?

I AB ! C , mas tambem C ! A.

20 / 26

Page 68: Apresenta¸c˜ao - Fernando Lobo

Projeccao de DF’s (cont.)

Dada uma relacao R com um conjunto de DF’s, projectar R em R1. Quais

as DF’s de R1?

1 Comecar com as DF’s de R e encontrar todas as DF’s nao triviais que

se podem deduzir a partir delas.

2 Ficar apenas com as DF’s cujos atributos facam parte do esquema de

R1.

21 / 26

Algoritmo para projectar as DF’s de uma relacao R numarelacao R1

1 Seja T o eventual output. Inicialmente, T = ;.

2 Para cada subconjunto X de atributos de R1, calcular X+(usando as

DF’s de R).

3 Inserir X ! A em T , para todo o A 2 (X+ � X ), desde que A seja

atributo de R1.

22 / 26

Page 69: Apresenta¸c˜ao - Fernando Lobo

Simplificacao

Calcular o fecho de todos os subconjuntos de atributos e trabalhoso.

Simplificacao no1:

I Nao e necessario calcular o fecho do conjunto vazio, nem do conjunto

de todos os atributos.

Simplificacao no2:

I Se X+= todos os atributos, nao e necessario 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 R1(ACD) (i.e., eliminar o atributo B).

Fechos T

A+= ABCD A ! C , A ! D

C+= CD C ! D

D+= D

(CD)+= CD

T e o conjunto de DF’s de R1. Mas podemos eliminar A ! D porque

pode ser deduzida a partir das outras duas.

DF’s de R1: A ! C , C ! D.

24 / 26

Page 70: Apresenta¸c˜ao - Fernando Lobo

Equivalencia de conjuntos de DF’s

Dois conjuntos de DF’s S e T sao equivalentes, se o conjunto de

instancias que satisfaz S for o mesmo que o conjunto de instancias

que satisfaz T .

No exemplo que vimos ha pouco:

I {A ! C , A ! D, C ! D} e equivalente a {A ! C , C ! D}

25 / 26

Base mınima de DF’s

Seja S um conjunto de DF’s para uma relacao R .

Qualquer conjunto de DF’s equivalente a S e uma base para S .

Uma base mınima para uma relacao R , e uma base B que satisfaca:

1 Todas as DF’s em B , tem no lado direito um so atributo.

2 Se removermos uma das DF’s de B , deixa-se de ter uma base.

3 Se removermos um atributo do lado esquerdo de uma das DF’s de B ,deixa-se de ter uma base.

26 / 26

Page 71: Apresenta¸c˜ao - Fernando Lobo

Normalizacao:

Forma Normal de Boyce Codd

3a

Forma Normal

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 38

Normalizacao

O objectivo e obter esquemas relacionais sem redundancia e sem

anomalias.

Exemplo:

I Filmes1( nome ano duracao nomeEstudio moradaEstudio )

com DF’s:

nome ano ! duracao

nome ano ! nomeEstudio

nome ano ! moradaEstudio

nomeEstudio ! moradaEstudio

2 / 38

Page 72: Apresenta¸c˜ao - Fernando Lobo

Possıvel instancia de Filmes1

nome ano duracao nomeEstudio moradaEstudio

Star Wars 1977 124 Fox 10 Elm St., Los Angeles

Empire Strikes Back 1980 143 Fox 10 Elm St., Los Angeles

Gone With the Wind 1939 181 Paramount 44 Pine St., Los Angeles

Lion King 1994 124 Disney 56 Oak St., Los Angeles

Return of the Jedi 1983 165 Fox 10 Elm St., Los Angeles

Pocahontas 1995 115 Disney 56 Oak St., Los Angeles

3 / 38

Problemas

1 Redundacia

I a morada de um estudio aparece repetida varias vezes.

2 Pode dar origem a anomalias em “updates”.

I ex: actualizar a morada no 1o

tuplo e nao o fazer no 2o

e 5o

tuplo.

3 Pode dar origem a anomalias em “deletes”.

I ex: se apagarmos o filme “Gone With the Wind”, o estudio

“Paramount” desaparece da BD!

4 / 38

Page 73: Apresenta¸c˜ao - Fernando Lobo

Decomposicao de relacoes

Podemos decompor o esquema de uma relacao em dois esquemas

mais pequenos.

Dado R(A1A2 . . . An), podemos decompor R em 2 relacoes:

S(B1B2 . . . Bm) e T (C1C2 . . . Ck) de tal forma que:

1 {A1,A2, . . . ,An} = {B1,B2, . . . ,Bm}S

{C1,C2, . . . ,Ck}

2 S = projeccao de R em {B1,B2, . . . ,Bm}

3 T = projeccao de R em {C1,C2, . . . ,Ck}

A ideia e que possamos reconstituir a relacao original juntando as

relacoes decompostas.

I A juncao e feita igualando os atributos com o mesmo nome.

5 / 38

Exemplo

Filmes1( nome ano duracao nomeEstudio moradaEstudio )

nome ano duracao nomeEstudio moradaEstudio

Star Wars 1977 124 Fox 10 Elm St., Los Angeles

Empire Strikes Back 1980 143 Fox 10 Elm St., Los Angeles

Gone With the Wind 1939 181 Paramount 44 Pine St., Los Angeles

Lion King 1994 124 Disney 56 Oak St., Los Angeles

Return of the Jedi 1983 165 Fox 10 Elm St., Los Angeles

Pocahontas 1995 115 Disney 56 Oak St., Los Angeles

Pode ser decomposto em:

I Filmes2( nome ano duracao nomeEstudio )

I Filmes3( nomeEstudio moradaEstudio )

6 / 38

Page 74: Apresenta¸c˜ao - Fernando Lobo

Exemplo (cont.)

Filmes2:

nome ano duracao nomeEstudio

Star Wars 1977 124 Fox

Empire Strikes Back 1980 143 Fox

Gone With the Wind 1939 181 Paramount

Lion King 1994 124 Disney

Return of the Jedi 1983 165 Fox

Pocahontas 1995 115 Disney

Filmes3:

nomeEstudio moradaEstudio

Fox 10 Elm St., Los Angeles

Paramount 44 Pine St., Los Angeles

Disney 56 Oak St., Los Angeles

7 / 38

Forma normal de Boyce-Codd (BCNF)

Uma relacao R esta em BCNF sse:

para todas as DF’s de R nao triviais X ! Y ,

X for superchave de R.

Basta existir uma DF em que X nao seja superchave, para R nao estar em

BCNF. Se isso acontecer, diz-se que essa DF viola a condicao de BCNF.

8 / 38

Page 75: Apresenta¸c˜ao - Fernando Lobo

Exemplo: Filmes1

Filmes1( nome ano duracao nomeEstudio moradaEstudio )

com DF’s:

nome ano ! duracao

nome ano ! nomeEstudio

nome ano ! moradaEstudio

nomeEstudio ! moradaEstudio

A chave e {nome,ano} porque:

I nome ano ! duracao nomeEstudio moradaEstudio

Filmes1 nao esta em BCNF porque:

I {nomeEstudio} nao e superchave de Filmes1.

nomeEstudio ! moradaEstudio, viola a condicao BCNF.

9 / 38

Outro exemplo: Filmes2

Filmes2( nome ano duracao nomeEstudio )

com DF’s:

nome ano ! duracao

nome ano ! nomeEstudio

A chave e {nome,ano} porque:

I nome ano ! duracao nomeEstudio

Filmes2 esta em BCNF porque em todas as DF’s, o lado esquerdo

contem a chave.

I {nome,ano} e superchave de Filmes2.

10 / 38

Page 76: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo: Filmes3

Filmes3( nomeEstudio moradaEstudio )

com DF’s:

nomeEstudio ! moradaEstudio

A chave e {nomeEstudio} porque:

I nomeEstudio ! moradaEstudio

Filmes3 esta em BCNF porque {nomeEstudio} e superchave de

Filmes3.

11 / 38

Possıveis instancias de Filmes2 e Filmes3

Filmes2:

nome ano duracao nomeEstudio

Star Wars 1977 124 Fox

Empire Strikes Back 1980 143 Fox

Gone With the Wind 1939 181 Paramount

Lion King 1994 124 Disney

Return of the Jedi 1983 165 Fox

Pocahontas 1995 115 Disney

Filmes3:

nomeEstudio moradaEstudio

Fox 10 Elm St., Los Angeles

Paramount 44 Pine St., Los Angeles

Disney 56 Oak St., Los Angeles

12 / 38

Page 77: Apresenta¸c˜ao - Fernando Lobo

Decomposicao de relacoes para BCNF

Nao e qualquer decomposicao que resolve o problema.

Exemplo: Decompor Filmes1 em:

I Filmes4( nome ano duracao )

I Filmes5( duracao nomeEstudio moradaEstudio )

13 / 38

Resultado

Filmes4:

nome ano duracao

Star Wars 1977 124

Empire Strikes Back 1980 143

Gone With the Wind 1939 181

Lion King 1994 124

Return of the Jedi 1983 165

Pocahontas 1995 115

Filmes5:

duracao nomeEstudio moradaEstudio

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

Page 78: Apresenta¸c˜ao - Fernando Lobo

Qual o problema?

1 Filmes5 continua sem estar em BCNF.

2 Mais grave: se juntarmos Filmes4 com Filmes5, vamos obter tuplos

que nao pertenciam a relacao original!

nome ano duracao nomeEstudio moradaEstudio

Star Wars 1977 124 Fox 10 Elm St., Los Angeles

Star Wars 1977 124 Disney 56 Oak St., Los Angeles

Empire Strikes Back 1980 143 Fox 10 Elm St., Los Angeles

Gone With the Wind 1939 181 Paramount 44 Pine St., Los Angeles

Lion King 1994 124 Disney 56 Oak St., Los Angeles

Lion King 1994 124 Fox 10 Elm St., Los Angeles

Return of the Jedi 1983 165 Fox 10 Elm St., Los Angeles

Pocahontas 1995 115 Disney 56 Oak St., Los Angeles

15 / 38

Decomposicao “Lossless join”

Uma decomposicao de R em R1 e R2 diz-se “Lossless join” se ao

juntarmos os tuplos de R1 com os tuplos de R2 (igualando os atributos

com o mesmo nome), obtivermos exactamente os tuplos de R.

Ex: A decomposicao de Filmes1 em Filmes2 e Filmes3

e “Lossless join”.

Ex: A decomposicao de Filmes1 em Filmes4 e Filmes5

nao e “Lossless join”.

16 / 38

Page 79: Apresenta¸c˜ao - Fernando Lobo

Decomposicao para BCNF

A ideia e usar uma DF X ! Y que viole a condicao de BCNF.

Calcula-se X+.

I Nao da todos os atributos, caso contrario X seria superchave.

Decompoe-se R em duas relacoes, R1 e R2, com os seguintes

esquemas:

1 R1 X+

2 R2 XS

(atrib(R)� (X+))

17 / 38

Graficamente

X+

− X

R1

R2

X+

atrib(R) − X

R

18 / 38

Page 80: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Filmes1( nome ano duracao nomeEstudio moradaEstudio )

com DF’s:

nome ano ! duracao

nome ano ! nomeEstudio

nomeEstudio ! moradaEstudio

Escolhe-se uma DF que viole BCNF:

I nomeEstudio ! moradaEstudio

Calcula-se:

I nomeEstudio+

= nomeEstudio moradaEstudio

Decompoe-se Filmes1 em:

I Filmes2( nomeEstudio moradaEstudio )

I Filmes3( nome ano duracao nomeEstudio )

19 / 38

Exemplo (cont.)

Necessitamos de verificar se Filmes2 e Filmes3 estao ambas em

BCNF.

Projecta-se as DF’s de Filmes1 em Filmes2 e Filmes3.

Para Filmes2 temos:

I nome ano ! duracao

I nome ano ! nomeEstudio

{nome,ano} e chave de Filmes2 ) Filmes2 esta em BCNF.

Para Filmes3 temos:

I nomeEstudio ! moradaEstudio

{nomeEstudio} e chave de Filmes3 ) Filmes3 esta em BCNF.

20 / 38

Page 81: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo

F1( nome ano nomeEstudio nomePresidente moradaPresidente )

com DF’s:

nome ano ! nomeEstudio // DF 1nomeEstudio ! nomePresidente // DF 2nomePresidente ! moradaPresidente // DF 3

Chave e {nome,ano}. Porque?

DF’s 2 e 3 violam BCNF. Vamos decompor usando DF 2.

I nomeEstudio+

= {nomeEstudio,nomePresidente,moradaPresidente}

Decompomos F1 em F2 e F3:

I F2( nomeEstudio nomePresidente moradaPresidente )

I F3( nome ano nomeEstudio )

21 / 38

Outro exemplo (cont.)

Agora e necessario ver se F2 e F3 estao em BCNF.

Projecta-se as DF’s de F1 em F2 e F3.

Para F2:

nomeEstudio ! nomePresidente

nomePresidente ! moradaPresidente

I chave e {nomeEstudio}.I nomePresidente ! moradaPresidente, viola BCNF.

I e necessario decompor F2 em F4 e F5.

Para F3:

nome ano ! nomeEstudio

I chave e {nome,ano}.I F3 esta em BCNF.

22 / 38

Page 82: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo (cont.)

Decomposicao de F2 em F4 e F5.

F2( nomeEstudio nomePresidente moradaPresidente )

DF’s:

nomeEstudio ! nomePresidente

nomePresidente ! moradaPresidente

nomePresidente+

= {nomePresidente,moradaPresidente}

F4( nomePresidente moradaPresidente )

I DF’s: nomePresidente ! moradaPresidente.

I {nomePresidente} e chave. F4 esta em BCNF.

F5( nomeEstudio nomePresidente )

I DF’s: nomeEstudio ! nomePresidente.

I {nomeEstudio} e chave. F5 esta em BCNF.

23 / 38

Em resumo

F1( nome ano nomeEstudio nomePresidente moradaPresidente )

com DF’s:

nome ano ! nomeEstudio

nomeEstudio ! nomePresidente

nomePresidente ! moradaPresidente

Foi decomposto em F3, F4, F5:

F3( nome ano nomeEstudio )

F4( nomePresidente moradaPresidente )

F5( nomeEstudio nomePresidente )

24 / 38

Page 83: Apresenta¸c˜ao - Fernando Lobo

Decomposicao para BCNF

A decomposicao baseada na utilizacao de uma DF que viole a

condicao de BCNF, e sempre “lossless join”.

Qualquer relacao com apenas 2 atributos esta sempre em BCNF.

Tentem prova-lo.

25 / 38

3a

Forma Normal: Motivacao

Por vezes a decomposicao para BCNF nao preserva as DF’s da

relacao original.

Nesses casos, nao devemos decompor para BCNF.

A situacao ocorre tipicamente quando temos DF’s com a seguinte

estrutura:

XY ! Z

Z ! Y

26 / 38

Page 84: Apresenta¸c˜ao - Fernando Lobo

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 nao pode passar o mesmo filme

em cinemas diferentes.

Vamos tambem supor que um cinema pode ter varias 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 nao conseguimos satisfazer a DF filme cidade ! cinema em

nenhuma das relacoes resultantes da decomposicao!

28 / 38

Page 85: Apresenta¸c˜ao - Fernando Lobo

Exemplo (cont.)

E possıvel haver instancias de Cartaz1 e Cartaz2 que satisfacam as

respectivas DF’s (i.e., cinema ! cidade)

Mas que a juncao viole a DF original: filme cidade ! cinema.

29 / 38

Exemplo (cont.)

Cartaz1:

cinema cidade

Forum Algarve Faro

Santo Antonio Faro

Cartaz2:

filme cinema

Jesse James Forum Algarve

Jesse James Santo Antonio

Cartaz1 ./ Cartaz2:

cinema cidade filme

Forum Algarve Faro Jesse James

Santo Antonio Faro Jesse James

30 / 38

Page 86: Apresenta¸c˜ao - Fernando Lobo

3a

Forma Normal

A 3a

Forma Normal (3FN) relaxa a condicao de BCNF.

Uma relacao R esta na 3FN se para todas as DF’s nao triviais

X ! Y , se verificar que:

I X e superchave de R, ou

I Y e membro de uma chave de R

Se R esta em BCNF ) R esta em 3FN

31 / 38

Exemplo

CartazFilmes( filme, cinema, cidade )

com DF’s:

cinema ! cidade

filme cidade ! cinema

esta na 3FN porque cidade faz parte de uma chave.

recordem-se que havia 2 chaves:

{filme,cidade} e {cinema,filme}.

32 / 38

Page 87: Apresenta¸c˜ao - Fernando Lobo

Propriedades importantes de uma decomposicao

Duas propriedades que uma decomposicao deve obedecer:

1 Lossless join: ser possıvel reconstituir a relacao original a partir das

relacoes decompostas.

2 Preservacao de dependencias: ser possıvel verificar as DF’s originais

nas relacoes decompostas.

BCNF garante (1).

3FN garante (1) e (2).

33 / 38

Decomposicao para a 3FN

Objectivo: Decompor uma relacao R num conjunto de relacoes que

estejam todas na 3FN.

A decomposicao tera a propriedade “Lossless join”

e tambem ira preservar as dependencias funcionais.

34 / 38

Page 88: Apresenta¸c˜ao - Fernando Lobo

Algoritmo de decomposicao para a 3FN

Input: uma relacao R com um conjunto de DF’s F .

Output: uma decomposicao de R num conjunto de relacoes, todas elas na

3FN.

Metodo:

1 G = base mınima para F .

2 Para cada DF X ! A em G , usar XA como esquema de uma das

relacoes decompostas.

3 Se nenhum dos esquemas resultantes do passo (2) for uma superchave

de R, acrescentar uma relacao cujo esquema seja uma chave de R.

35 / 38

Exemplo

R(ABCDE ) com DF’s AB ! C , C ! B, e A! D.

1 As DF’s dadas sao uma base mınima (ver justificacao nos proximos

slides).

2 Obtemos as relacoes R1(ABC ), R2(BC ), R3(AD).

(R2 pode ser eliminada porque o seu esquema esta contido no

esquema de R1).

3 R tem duas chaves: ABE e ACE . Temos de acrescentar uma delas,

por exemplo R4(ABE ).

36 / 38

Page 89: Apresenta¸c˜ao - Fernando Lobo

Exemplo (cont.)

Justificacao para {AB ! C , C ! B, A! D} ser uma base mınima.

1 O lado direito de todas as DFs so tem 1 atributo.

2 Nao conseguimos inferir nenhuma das DF’s a partir das outras duas.

Verificacao:

I sera que AB ! C pode ser inferido de {C ! B, A! D} ?

calcular (AB)+

usando {C ! B, A! D}.(AB)

+= ABD.

) AB ! C nao pode ser inferido de {C ! B, A! D}.

I fazer verificacao analoga para provar que:

F C ! B nao pode ser inferido de {AB ! C , A! D}.F A! D nao pode ser inferido de {AB ! C , C ! B}.

37 / 38

Exemplo (cont.)

Justificacao para {AB ! C , C ! B, A! D} ser uma base mınima.

3. nao conseguimos eliminar atributos do lado esquerdo de nenhuma DF

e continuar a ter uma base.

I a unica hipotese seria eliminar A ou B em AB ! C .

I se eliminarmos A, temos de demonstrar que B ! C nao pode ser

inferido a partir de {AB ! C , C ! B, A! D}.B+

= B.

I fazer verificacao analoga para o caso de eliminarmos B.

38 / 38

Page 90: Apresenta¸c˜ao - Fernando Lobo

Algebra Relacional

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 50

Algebra relacional

Conjunto de operadores que permitem manipular relacoes:

1 operacoes sobre conjuntos: [, \, �

2 remover linhas (seleccao), remover colunas (projeccao).

3 operacoes que combinam informacao contida em varias relacoes:produtos cartesianos e joins.

4 mudar o nome a relacoes e atributos.

As expressoes em algebra relacional sao uma especie de programa.

2 / 50

Page 91: Apresenta¸c˜ao - Fernando Lobo

Operacoes sobre conjuntos: Uniao ([)

Filmes1

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

Filmes2

nome ano estudioIndiana Jones 1981 UniversalKing Kong 1933 MGMPocahontas 1998 Disney

Filmes1 [ Filmes2

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 DisneyIndiana Jones 1981 Universal

3 / 50

Operacoes sobre conjuntos: Interseccao (\)

Filmes1

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

Filmes2

nome ano estudioIndiana Jones 1981 UniversalKing Kong 1933 MGMPocahontas 1998 Disney

Filmes1 \ Filmes2

nome ano estudioPocahontas 1998 DisneyKing Kong 1933 MGM

4 / 50

Page 92: Apresenta¸c˜ao - Fernando Lobo

Operacoes sobre conjuntos: Diferenca (�)

Filmes1:

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

Filmes2:

nome ano estudioIndiana Jones 1981 UniversalKing Kong 1933 MGMPocahontas 1998 Disney

Filmes1 � Filmes2

nome ano estudioStar Wars 1977 FoxLion King 1997 Disney

5 / 50

Operacoes sobre conjuntos

NOTA: Quando se aplica operadores sobre conjuntos, as relacoestem de ter esquemas relacionais identicos.

. . . e a lista de atributos de cada relacao tem de aparecer pelamesma ordem.

caso contrario estes operadores nao fazem sentido.

6 / 50

Page 93: Apresenta¸c˜ao - Fernando Lobo

Remover linhas: Seleccao (�)

Notacao: �c(R), onde c e uma condicao.

Filmes

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

� estudio = ’Disney’ (Filmes)

nome ano estudioPocahontas 1998 DisneyLion King 1997 Disney

7 / 50

Remover colunas: Projeccao (⇡)

Notacao: ⇡` (R), onde ` e uma lista de atributos de R.

Filmes

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

⇡ nome, estudio (Filmes)

nome estudioStar Wars FoxPocahontas DisneyKing Kong MGMLion King Disney

8 / 50

Page 94: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo

Filmes

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing King 1933 MGMLion King 1997 Disney

⇡ estudio (Filmes)

estudioFoxDisneyMGM

9 / 50

Seleccao e projeccao juntos

Filmes

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing King 1933 MGMLion King 1997 Disney

⇡ nome, ano

✓� ano < 1990 (Filmes)

nome anoStar Wars 1977King Kong 1933

10 / 50

Page 95: Apresenta¸c˜ao - Fernando Lobo

Combinar relacoes

Produto Cartesiano: R = R1 ⇥ R2

faz a concatenacao de cada tuplo t1 de R1 com cada tuplo t2 de R2 ecoloca o tuplo t1t2 em R.

Theta Join: R = R1 Zc R2

e equivalente a: R = �c(R1 ⇥ R2)

Natural Join: R = R1 Z R2

e equivalente a um theta join em que a condicao c diz que osatributos com o mesmo nome sao igualados. Depois, uma dascolunas e projectada.

11 / 50

Produto Cartesiano (⇥)

Filmes

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

Estudios

nome moradaFox Elm St.Disney Pine St.MGM Oak Dr.

12 / 50

Page 96: Apresenta¸c˜ao - Fernando Lobo

Produto Cartesiano

Filmes ⇥ Estudios

Filmes.nome ano estudio Estudios.nome moradaStar 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 (ZC)

Filmes

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

Estudios

nome moradaFox Elm St.Disney Pine St.MGM Oak Dr.

Filmes Z Filmes.estudio=Estudios.nome Estudios

Filmes.nome ano estudio Estudios.nome moradaStar 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

Page 97: Apresenta¸c˜ao - Fernando Lobo

Natural Join (Z)

Filmes

nome ano estudioStar Wars 1977 FoxPocahontas 1998 DisneyKing Kong 1933 MGMLion King 1997 Disney

Estudios

estudio moradaFox Elm St.Disney Pine St.MGM Oak Dr.

Filmes Z Estudios

nome ano estudio moradaStar 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 relacoes e atributos (⇢)

Notacao: ⇢ S(A1,A2,...,An) (R)

produz uma relacao de nome S identica a R e com os atributoschamados A1,A2, . . . ,An

Estudios

estudio moradaFox Elm St.Disney Pine St.MGM Oak Dr.

⇢ S(nome,rua) (Estudios)

nome ruaFox Elm St.Disney Pine St.MGM Oak Dr.

16 / 50

Page 98: Apresenta¸c˜ao - Fernando Lobo

Notacao linear para expressoes

A ideia e atribuir nomes para relacoes intermedias.

Exemplo: Dado o esquema relacional,

Filmes( nome, ano, duracao, aCores, estudio )Participa( nomeFilme, anoFilme, nomeActor )

Qual o nome e ano dos filmes a cores em que participou ’JackNicholson’?

R1 B ⇡ nome,ano⇣�aCores = TRUE (Filmes)

R2 B ⇡ nomeFilme,anoFilme⇣�nomeActor = ’Jack Nicholson’ (Participa)

R3 B R1 \ R2

17 / 50

Expressoes em forma de arvore

aCores = TRUEσnomeActor = ’Jack Nicholson’σ

πnome,ano nomeFilme,anoFilmeπ

U

Filmes Participa

18 / 50

Page 99: Apresenta¸c˜ao - Fernando Lobo

Restricoes em relacoes

R nao tem tuplos.R = ;

Todo o tuplo de R tambem e tuplo de S.R ✓ S

R ✓ S ⌘ R � S = ;

Pergunta: Qual o significado de,⇡ estudio(Filmes) ✓ ⇡ nome(Estudios)

19 / 50

Exercıcio

Actores( nome, morada )

nome moradaNicole Kidman 26 Palm Dr., HollywoodBrad Pitt 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly HillsAngelina Jolie 12 Oak St., Hollywood. . . . . .

Quais os actores que partilham a mesma morada? Isto e, pretende-seobter uma relacao com dois atributos, nome1 e nome2, em que cada tuplorepresenta um par de actores com a mesma morada.

nome1 nome2Angelina Jolie Brad Pitt. . . . . .

20 / 50

Page 100: Apresenta¸c˜ao - Fernando Lobo

Exercıcio (cont.)

So com projeccoes e seleccoes nao vamos la . . .

Necessitamos de comparar as moradas de actores diferentes everificar se sao iguais.

Alguma ideia?

21 / 50

Exercıcio (cont.)

A solucao reside em combinar a relacao Actores com ela propria.I obtemos uma copia da relacao Actores atraves do operador ⇢.

I fazemos um join de Actores com a copia obtida, colocando comocondicao que os actores tenham a mesma morada (mas que se tratemde actores diferentes).

I e depois projectamos os atributos nome1 e nome2

⇢ Actores2( nome2, morada2 ) (Actores)

� morada=morada2 ^ nome,nome2 (Actores ⇥ Actores2)

⇡ nome,nome2 (. . .)

22 / 50

Page 101: Apresenta¸c˜ao - Fernando Lobo

“Debugging” passo a passo

Actores( nome, morada )

nome moradaNicole Kidman 26 Palm Dr., HollywoodBrad Pitt 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly HillsAngelina Jolie 12 Oak St., Hollywood

⇢ Actores2( nome2, morada2 ) (Actores)

nome2 morada2Nicole Kidman 26 Palm Dr., HollywoodBrad Pitt 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly HillsAngelina Jolie 12 Oak St., Hollywood

23 / 50

“Debugging” passo a passo (cont.)

Actores ⇥ Actores2nome morada nome2 morada 2Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., HollywoodNicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., HollywoodNicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsNicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., HollywoodBrad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., HollywoodBrad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., HollywoodBrad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsBrad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly HillsHarrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., HollywoodAngelina Jolie 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., HollywoodAngelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., HollywoodAngelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsAngelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood

24 / 50

Page 102: Apresenta¸c˜ao - Fernando Lobo

“Debugging” passo a passo (cont.)

� morada=morada2 (Actores ⇥ Actores2)

nome morada nome2 morada 2Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., HollywoodNicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., HollywoodNicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsNicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., HollywoodBrad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., HollywoodBrad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., HollywoodBrad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsBrad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly HillsHarrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., HollywoodAngelina Jolie 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., HollywoodAngelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., HollywoodAngelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsAngelina 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 2Nicole Kidman 26 Palm Dr., Hollywood Nicole Kidman 26 Palm Dr., HollywoodNicole Kidman 26 Palm Dr., Hollywood Brad Pitt 12 Oak St., HollywoodNicole Kidman 26 Palm Dr., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsNicole Kidman 26 Palm Dr., Hollywood Angelina Jolie 12 Oak St., HollywoodBrad Pitt 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., HollywoodBrad Pitt 12 Oak St., Hollywood Brad Pitt 12 Oak St., HollywoodBrad Pitt 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsBrad Pitt 12 Oak St., Hollywood Angelina Jolie 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Nicole Kidman 26 Palm Dr., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Brad Pitt 12 Oak St., HollywoodHarrison Ford 789 Palm Dr., Beverly Hills Harrison Ford 789 Palm Dr., Beverly HillsHarrison Ford 789 Palm Dr., Beverly Hills Angelina Jolie 12 Oak St., HollywoodAngelina Jolie 12 Oak St., Hollywood Nicole Kidman 26 Palm Dr., HollywoodAngelina Jolie 12 Oak St., Hollywood Brad Pitt 12 Oak St., HollywoodAngelina Jolie 12 Oak St., Hollywood Harrison Ford 789 Palm Dr., Beverly HillsAngelina Jolie 12 Oak St., Hollywood Angelina Jolie 12 Oak St., Hollywood

26 / 50

Page 103: Apresenta¸c˜ao - Fernando Lobo

“Debugging” passo a passo (cont.)

⇡ nome1, nome2⇣� morada=morada2 ^ nome,nome2 (Actores ⇥ Actores2)

nome nome2Brad Pitt Angelina JolieAngelina Jolie Brad Pitt

Podemos fazer com que o mesmo par so apareca uma vez, colocandonome1 < nome2 (ou nome1 > nome2) em vez de nome1 , nome2.

27 / 50

“Debugging” passo a passo (cont.)

Para nao termos expressoes muito compridas, e util utilizarmos anotacao linear com relacoes intermedias.

Actores2( nome2, morada 2) B Actores

Temp B � morada=morada2 ^ nome<nome2 (Actores ⇥ Actores2)

Resultado B ⇡ nome, nome2 (Temp)

28 / 50

Page 104: Apresenta¸c˜ao - Fernando Lobo

Operacoes sobre sacos (bags)

Um conjunto nao tem elementos repetidos.

Um saco pode ter.

Em ambos os casos a ordem dos elementos nao interessa.I {1,2,3} = {3,1,2}.I {1,1,2,3,1,3} = {3,2,1,1,3,1}.

29 / 50

Uniao, interseccao, e diferenca de sacos

Se R e S sao sacos, e um tuplo t ocorre n vezes em R e m vezes em S,entao:

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

Page 105: Apresenta¸c˜ao - Fernando Lobo

Exemplos

R

A B1 23 41 21 2

S

A B1 23 43 45 6

R [ S

A B1 23 41 21 21 23 43 45 6

R \ S

A B1 23 4

R � S

A B1 21 2

31 / 50

Projeccao de sacos

R

A B C1 2 53 4 61 2 71 2 8

⇡ A ,B (R)

A B1 23 41 21 2

32 / 50

Page 106: Apresenta¸c˜ao - Fernando Lobo

Porque sacos em vez de conjuntos?

Operadores podem ser implementados de forma mais eficiente.

Exemplo: Projeccao. (SGBD nao necessita de verificar a existenciade tuplos repetidos).

Podemos querer calcular medias ou somas (ou outro tipo deestatıstica) aos componentes de um atributo.

33 / 50

Seleccao, produto cartesiano, joins

Identico ao caso de conjuntos.

R

A B1 21 2

S

B C2 34 54 5

R ⇥ S

A R .B S.B C1 2 2 31 2 4 51 2 4 51 2 2 31 2 4 51 2 4 5

R Z R .B < S.B (S)

A R .B S.B C1 2 4 51 2 4 51 2 4 51 2 4 5

34 / 50

Page 107: Apresenta¸c˜ao - Fernando Lobo

Operadores extendidos de algebra relacional

1 Eliminacao de tuplos repetidos.

2 Operadores de agregacao (utilizados juntamente com o operador deagrupamento).

3 Agrupamento de tuplos.

4 Projeccao extendida.

5 Ordenacao.

6 Outerjoin.

35 / 50

Eliminacao de repetidos (�)

Converte um saco de tuplos num conjunto de tuplos.

R

A B1 23 41 21 2

�(R)

A B1 23 4

36 / 50

Page 108: Apresenta¸c˜ao - Fernando Lobo

Operadores de agregacao

1 SUM

2 AVG

3 MIN e MAXI pode ser aplicado a valores numericos ou a strings de caracteres

(MIN=1o, MAX=ultimo, na ordem lexicografica)

4 COUNTI numero de valores de uma coluna (incluindo repetidos).

37 / 50

Exemplos

R

A B1 23 41 21 2

SUM(B) = 2+4+2+2 = 10

AVG(A) = (1+3+1+1)/4 = 1.5

MIN(A) = 1

MAX(A) = 3

COUNT(A) = 4

38 / 50

Page 109: Apresenta¸c˜ao - Fernando Lobo

Agrupamento de tuplos (�)

Cria grupos de acordo com o valor de um ou mais atributos.

Pode-se aplicar agregacoes (SUM, AVG, MAX, . . .) a cada grupo.

Forma geral: �L(R).

L e uma lista de elementos, em que cada qual pode ser:I um atributo de R (sobre o qual R sera agrupado).

I uma agregacao aplicada a um atributo de R.

39 / 50

Como funciona?

A relacao obtida �L(R) e 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 os valores dos atributos agrupados para esse grupo, e

I as agregacoes, relativas a cada grupo, para cada operador deagregacao que conste em L .

40 / 50

Page 110: Apresenta¸c˜ao - Fernando Lobo

ExemploFilmes

nome ano duracao aCores estudioLion King 1994 122 true DisneyTotal Recall 1990 110 true FoxPocahontas 1995 115 true DisneyReturn of the Jedi 1983 165 true FoxGone With the Wind 1939 181 false ParamountDances with Wolves 1990 132 true Fox

Numero de filmes feito por estudio.� estudio, COUNT(nome) ! ’num. filmes’ (Filmes)

estudio num. filmesDisney 2Fox 3Paramount 1

41 / 50

Como funciona?

nome ano duracao aCores estudioLion King 1994 122 true DisneyPocahontas 1995 115 true DisneyTotal Recall 1990 110 true FoxReturn of the Jedi 1983 165 true FoxDances with Wolves 1990 132 true FoxGone With the Wind 1939 181 false Paramount

COUNT(nome) e aplicado a cada grupo.

42 / 50

Page 111: Apresenta¸c˜ao - Fernando Lobo

Outro exemploFilmes

nome ano duracao aCores estudioLion King 1994 122 true DisneyTotal Recall 1990 110 true FoxPocahontas 1995 115 true DisneyReturn of the Jedi 1983 165 true FoxGone With the Wind 1939 181 false ParamountDances with Wolves 1990 132 true Fox

Duracao mınima e maxima dos filmes feitos por cada estudio numdeterminado ano.� estudio, ano, MIN(duracao) ! ’dur. mınima’, MAX(duracao) ! ’dur. maxima’ (Filmes)

estudio ano dur. mınima dur. maximaDisney 1994 122 122Disney 1995 115 115Fox 1983 165 165Fox 1990 110 132Paramount 1939 181 181

43 / 50

Como funciona?

nome ano duracao aCores estudioLion King 1994 122 true DisneyPocahontas 1995 115 true DisneyReturn of the Jedi 1983 165 true FoxTotal Recall 1990 110 true FoxDances with Wolves 1990 132 true FoxGone With the Wind 1939 181 false Paramount

grupos sao feitos para cada par de valores distintos em (estudio,ano).

para cada grupo, calcula-se MIN(duracao) e MAX(duracao).

44 / 50

Page 112: Apresenta¸c˜ao - Fernando Lobo

Projeccao extendida, ⇡L(R)

Cada elemento de L pode ser:1 Um atributo de R.

2 Uma expressao x ! y(em que x e y sao nomes de atributos, equivalente a um “rename” dex para y).

3 Uma expressao E ! z(em que E pode envolver atributos de R, constantes, e operadoresaritmeticos e de strings).

45 / 50

Exemplo

R

A B C0 1 20 1 23 4 5

⇡A , B+C ! X (R)

A X0 30 33 9

46 / 50

Page 113: Apresenta¸c˜ao - Fernando Lobo

Ordenacao, ⌧L(R)

Converte R para uma lista ordenada segundo os atributosespecificados na lista L .

Exemplo: ⌧B ,C(R) ordena os tuplos de R por B, e em caso deempate por C.

R

A B C5 3 58 1 73 4 58 1 03 4 32 1 0

⌧B ,C(R)

A B C8 1 02 1 08 1 75 3 53 4 33 4 5

47 / 50

Outerjoin (�Z)

Adiciona ao output tuplos que falham a condicao de join.

Esses tuplos ficam com o sımbolo null (?) nos atributos que naopossuem.

Existem variantes: Outer Join, Left Outer Join, Right Outer Join.

48 / 50

Page 114: Apresenta¸c˜ao - Fernando Lobo

Exemplo

U

A B C1 2 34 5 67 8 9

V

B C D2 3 102 3 116 7 12

U�Z V

A B C D1 2 3 101 2 3 114 5 6 ?7 8 9 ?? 6 7 12

49 / 50

Left e Right Outerjoin (�ZL e

�ZR)

U

A B C1 2 34 5 67 8 9

V

B C D2 3 102 3 116 7 12

U�ZL V

A B C D1 2 3 101 2 3 114 5 6 ?7 8 9 ?

U�ZR V

A B C D1 2 3 101 2 3 11? 6 7 12

50 / 50

Page 115: Apresenta¸c˜ao - Fernando Lobo

SQL: Interrogacoes simples

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 20

Structured Query Language (SQL)

E uma implementacao da algebra relacional incluindo os operadoresextendidos.

Contem um ou outro aspecto que nao existe em algebra relacional.

Para alem de operadores de interrogacao, contem comandos deinsercao, actualizacao e remocao de tuplos.

Contem tambem comandos de definicao de relacoes/tabelas.

E uma linguagem usada em praticamente todos os SGBDs.

2 / 20

Page 116: Apresenta¸c˜ao - Fernando Lobo

Porque SQL?

E uma linguagem de muito alto nıvel.

Bem mais adequada para manipular relacoes do que linguagenscomo o C ou Java.

O programador apenas se tem de preocupar com o conceito derelacao/tabela.

Nao necessita de saber detalhes fısicos sobre,

1 o modo como as tabelas sao implementadas, e

2 o modo como as interrogacoes sao executadas.

As interrogacoes em SQL sao optimizadas pelo SGBD.

3 / 20

SQL tambem tem limitacoes

Nao e uma linguagem completa.

Nao se consegue calcular o factorial de um numero em SQL.

Mas consegue-se fazer programas de 5 linhas que necessitariam decentenas de linhas de codigo em C.

4 / 20

Page 117: Apresenta¸c˜ao - Fernando Lobo

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

Interrogacoes simples: SELECT-FROM-WHERE

SELECT atributosFROM uma ou mais relacoesWHERE condicao

SELECT nome

FROM Filmes

WHERE ano=1977;

6 / 20

Page 118: Apresenta¸c˜ao - Fernando Lobo

SELECT-FROM-WHERE

Nao confundir SELECT com o operador de seleccao da algebrarelacional.

SELECT e equivalente a projeccao (⇡).

WHERE e equivalente a seleccao (�).

7 / 20

Operacao em termos de algebra relacional

SELECT nome

FROM Filmes

WHERE ano=1977;

1 Comecar com a relacao que aparece a seguir a FROM.

2 Aplicar o operador � usando a condicao do WHERE.

3 Aplicar o operador ⇡ usando os atributos de SELECT.

8 / 20

Page 119: Apresenta¸c˜ao - Fernando Lobo

SQL versus Algebra Relacional

Quais os filmes feitos em 1977?

SQL

SELECT nome

FROM Filmes

WHERE ano=1977;

Algebra Relacional

⇡ nome

✓� ano = 1977 (Filmes)

9 / 20

Outra maneira de pensar

SELECT nome

FROM Filmes

WHERE ano=1977;

Imaginem uma variavel que percorre todos os tuplos da relacao.

Verifica se satisfaz a condicao WHERE.

Se sim, envia os atributos especificados em SELECT para o output.

10 / 20

Page 120: Apresenta¸c˜ao - Fernando Lobo

Asterisco da todos os atributos

SELECT *

FROM Participa

WHERE nomeFilme=’Moulin Rouge’;

nomeFilme anoFime nomeActorMoulin Rouge 2001 Nicole KidmanMoulin Rouge 2001 Ewan McGregorMoulin 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 filmeStar WarsSaturday Night Fever...

12 / 20

Page 121: Apresenta¸c˜ao - Fernando Lobo

Operadores logicos

a clausula WHERE pode ter operadores logicos (AND, OR, NOT)

pode-se usar os operadores relacionais habituais( = , <> , < , > , <= , >= )

SELECT nome, duracao

FROM Filmes

WHERE estudio=’Disney’ AND ano=1977;

13 / 20

Expressoes em SELECTs

pode-se usar expressoes como elementos da clausula SELECT.

SELECT nome, ano,

duracao/60 AS ’duracao em horas’

FROM Filmes;

nome ano duracao em horasStar Wars 1977 2.07Empire Strikes Back 1980 2.38Return of the Jedi 1983 2.75Moulin Rouge 2001 2.07

14 / 20

Page 122: Apresenta¸c˜ao - Fernando Lobo

Padroes (pattern matching em strings)

a condicao WHERE pode especificar uma comparacao entre umastring e um padrao.

<atributo> LIKE <padrao><atributo> NOT LIKE <padrao>

um padrao e uma string em que % significa “0 ou mais caracteres” esignifica “apenas 1 caracter”.

15 / 20

Exemplo

Quais sao os filmes cujo nome contem a palavra King?

SELECT nome, ano

FROM Filmes

WHERE nome LIKE ’%King%’;

nome anoKing Kong 1933King Kong 1976Lion King 1994

16 / 20

Page 123: Apresenta¸c˜ao - Fernando Lobo

SQL trabalha com sacos

SELECT nomeEstudio

FROM Filmes;

nomeEstudioFoxFoxFoxDisneyParamountDisney...

17 / 20

Usar DISTINCT para eliminar repetidos

SELECT DISTINCT(nomeEstudio)

FROM Filmes;

nomeEstudioFoxDisneyParamountUniversalWarner Brothers

18 / 20

Page 124: Apresenta¸c˜ao - Fernando Lobo

Ordenacao de tuplos

ORDER BY <lista de atributos>

ordem crescente por defeito(colocar DESC para ordem decrescente)

ordem lexicografica para strings.

19 / 20

Exemplos

Filmes da Disney ordenados por ano, e dentro de cada ano, ordenadospor nome.

SELECT *

FROM Filmes

WHERE nomeEstudio=’Disney’

ORDER BY ano, nome;

Filmes da Disney ordenados por ordem decrescente de duracao, e emcaso de empate, ordenados por ordem crescente de nome.

SELECT *

FROM Filmes

WHERE nomeEstudio=’Disney’

ORDER BY duracao DESC, nome;

20 / 20

Page 125: Apresenta¸c˜ao - Fernando Lobo

SQL: Definicao de tabelas, Modificacoes a Base deDados

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 24

Definicao do esquema da base de dados

O esquema da BD e composto pelas definicoes de todas as tabelasda BD.

Existem outros elementos (views, ındices, triggers) que tambemfazem parte do esquema e que veremos mais tarde.

2 / 24

Page 126: Apresenta¸c˜ao - Fernando Lobo

Definicao de tabelasCREATE TABLE <nome> (

<lista de elementos>

);

Cada elemento consiste num atributo e no respectivo tipo de dados.

Os tipos mais comuns sao: 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 e ’yyyy-mm-dd’

O formato de TIME e ’hh:mm:ss’. Podera ter ainda fraccoes desegundo.

Exemplos:

I DATE ’2003-04-25’(25 de Abril de 2003)

I TIME ’15:32:04.5’(4 segundos e meio depois das 3:32 da tarde)

4 / 24

Page 127: Apresenta¸c˜ao - Fernando Lobo

Declaracao de chaves

Um atributo ou lista de atributos pode ser declarado como chave emSQL utilizando PRIMARY KEY ou UNIQUE.

Exemplo:

CREATE TABLE Actores(

nome VARCHAR(50) PRIMARY KEY,

morada VARCHAR(70),

sexo CHAR,

dataNascimento DATE

);

5 / 24

Declaracao de chaves (cont.)

No caso da chave ser composta, temos de especificar um elemento aparte.

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

Page 128: Apresenta¸c˜ao - Fernando Lobo

PRIMARY KEY versus UNIQUE

tambem se pode usar UNIQUE para especificar uma chave.

cada tabela so pode ter uma PRIMARY KEY, mas pode ter variosUNIQUEs.

os atributos declarados como PRIMARY KEY nao podem ser NULL,mas os declarados como UNIQUE podem (e ate podem ter variosNULLs).

7 / 24

Restricao NOT NULLPodemos forcar um atributo a nao 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 (’To Tabelas’,’23384’);

-- SGBD rejeita porque ’nome’ nao pode ser NULL

INSERT INTO Alunos(numero,bi)

VALUES (’23384’,’7986866’);8 / 24

Page 129: Apresenta¸c˜ao - Fernando Lobo

Chaves estrangeiras (integridade referencial)

Uma chave estrangeira e um conjunto de atributos que faz referenciaa um conjunto de atributos de uma outra tabela (eventualmente atepoderia ser a propria tabela).

Os atributos referenciados tem de ser uma chave da outra tabela(declarados como PRIMARY KEY ou UNIQUE), daı o nome chaveestrangeira.

Em SQL:

FOREIGN KEY( <lista de atributos> )

REFERENCES <tabela> ( <lista de atributos> )

9 / 24

ExemploParticipa(nomeFilme, anoFilme, nomeActor)

O valor do atributo nomeActor tem de existir na tabela de Actores.

A mesma coisa para o par {nomeFilme,anoFilme} relativamente atabela 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

Page 130: Apresenta¸c˜ao - Fernando Lobo

Forcar a integridade referencialParticipa:

nomeFilme anoFilme nomeActorThe Fugitive 1993 Harrison FordMoulin Rouge 2001 Nicole KidmanIndiana Jones 1981 Harrison Ford... ... ...

Actores: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 “TheFugitive”. O que e que vai acontecer?

E se apagarmos a Nicole Kidman da tabela de Actores?11 / 24

Forcar a integridade referencial (cont.)

Um INSERT ou UPDATE na tabela Participa e rejeitado caso o actornao exista.

I O SGBD rejeita a substituicao de Harrison Ford por Fernando Lobo.

Um DELETE ou UPDATE a tabela de Actores pode fazer com quedetermindos valores na tabela Participa deixem de fazer sentido.

I Ex: Apagar a Nicole Kidman da tabela de Actores.

I Existem 3 alternativas possiveis de resolver o problema em SQL.

12 / 24

Page 131: Apresenta¸c˜ao - Fernando Lobo

Forcar a integridade referencial (cont.)

As 3 alternativas sao:

1 rejeitar modificacoes (opcao por defeito em SQL).

2 SET NULL: nomeActor em Participa fica com NULL.

3 CASCADE: propagar as alteracoes.

I apagar actor da tabela de Actores=) SGBD apaga todos os tuplos de Participa que tenham esse

actor.

I actualizar actor na tabela de Actores=) SGBD actualiza todos os tuplos de Participa que tenham esse

actor.

13 / 24

Forcar a integridade referencial (cont.)

Quando declaramos uma chave estrangeira, podemos especificarSET NULL ou CASCADE, quer para “DELETEs” quer para“UPDATEs”.

Se nao o fizermos, o SGBD rejeita as modificacoes.

Sintaxe:

FOREIGN KEY( <lista de atributos> )

REFERENCES <tabela> ( <lista de atributos> )

ON UPDATE [SET NULL | CASCADE]

ON DELETE [SET NULL | CASCADE]

14 / 24

Page 132: Apresenta¸c˜ao - Fernando Lobo

ExemploCREATE TABLE Participa(

nomeFilme VARCHAR(50),anoFilme INTEGER,nomeActor VARCHAR(50),PRIMARY KEY (nomeFilme,anoFilme,nomeActor),FOREIGN KEY (nomeActor)REFERENCES Actores(nome)ON UPDATE CASCADEON DELETE SET NULL,

FOREIGN KEY (nomeFilme,anoFilme)REFERENCES Filmes(nome,ano)

);

Se actualizarmos o nome de um actor na tabela de Actores, essamodificacao e propagada para todos os tuplos da tabela Participaque fazem referencia a esse actor.E se apagarmos um actor na tabela de Actores?SET NULL so faz sentido se a chave for declarada como UNIQUE.

15 / 24

Modificacoes a BD

Existem comandos para alterar o estado da BD.

Ao contrario dos SELECTs, os comandos de modificacao naoretornam uma tabela.

Existem 3 tipos de modificacoes:

1 INSERTinsere um ou mais tuplos.

2 DELETEapaga um ou mais tuplos.

3 UPDATEactualiza os valores de um ou mais tuplos.

16 / 24

Page 133: Apresenta¸c˜ao - Fernando Lobo

INSERT

Para inserir um tuplo:

INSERT INTO <tabela> VALUES( <lista de valores> );

Exemplo:

INSERT INTO Actores VALUES (

’Nicole Kidman’,

’26 Palm Dr., Hollywood’,

’f’,

’1969-11-14’

);

17 / 24

INSERT (cont.)

Pode-se especificar uma lista de atributos.

Dois motivos para o fazer:

1 quando nao nos lembramos da ordem pela qual os atributos foramdefinidos na criacao da tabela.

2 quando nao temos todos os valores e queremos que o SGBDpreencha os atributos em falta com NULL (ou com um valor pordefeito).

Para especificar um valor por defeito faz-se:

<atributo> <tipo> DEFAULT <valor>

18 / 24

Page 134: Apresenta¸c˜ao - Fernando Lobo

ExemploSe 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 varios tuplos de uma vez so

Podemos inserir o resultado de uma query numa tabela.

INSERT INTO <tabela> ( <subquery> );

Exemplo: Inserir na tabela de actores todos os actores que tenhamparticipado nalgum filme.

INSERT INTO Actores(nome) (

SELECT DISTINCT nomeActor

FROM Participa

);

I morada dos actores fica com NULL.

20 / 24

Page 135: Apresenta¸c˜ao - Fernando Lobo

DELETEPara apagar tuplos que satisfacam uma determinada condicao devefazer-se:

DELETE FROM <tabela> WHERE <condicao>;

Exemplo 1: Apagar todos os filmes cuja duracao seja inferior a 120minutos.

DELETE FROM Filmes WHERE duracao < 120;

Exemplo 2: Apagar todos os filmes.

DELETE FROM Filmes;

21 / 24

UPDATEPara actualizar tuplos de uma tabela deve fazer-se:

UPDATE <tabela>

SET <lista de atribuicoes>

WHERE <condicao>;

Exemplo 1: Actualizar a duracao do filme King Kong realizado em1976 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 ebranco.

UPDATE Filmes SET aCores = false WHERE ano < 1970;

22 / 24

Page 136: Apresenta¸c˜ao - Fernando Lobo

Modificar a definicao 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 diferenca entre estas duas instrucoes?

DROP TABLE Filmes;

DELETE FROM Filmes;

24 / 24

Page 137: Apresenta¸c˜ao - Fernando Lobo

SQL: Joins e operacoes sobre conjuntos

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 11

Interrogacoes que envolvem mais do que uma tabela(produto cartesiano e Joins)

Pode-se combinar informacao de varias relacoes.

Coloca-se o nome das relacoes a seguir a FROM.

Atributos com o mesmo nome distinguem-se por<Nome da Relacao>.<Atributo>

2 / 11

Page 138: Apresenta¸c˜ao - Fernando Lobo

Operacao em termos de algebra relacional

E semelhante as interrogacoes feitas a uma so relacao:

1 Comeca com o produto cartesiano das relacoes que aparecem aseguir a FROM.

2 Aplica o operador � usando a condicao do WHERE.

3 Aplica o operador ⇡ usando os atributos de SELECT.

3 / 11

Outra maneira de pensar

Imaginem ’n’ variaveis, uma para cada relacao. Cada variavel percorre ostuplos de uma relacao (em todas as combinacoes possıveis como sefossem loops encadeados).

Verifica se satisfaz a condicao WHERE.

Se sim, envia os atributos especificados em SELECT para o output.

4 / 11

Page 139: Apresenta¸c˜ao - Fernando Lobo

Interpretacao 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( condicao C e 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 duracao 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 duracaoThe Fugitive 1993 120Indiana Jones 1981 130

6 / 11

Page 140: Apresenta¸c˜ao - Fernando Lobo

Exemplo (cont.)

==

nome ano duracao ... nomeFilme anoFilme nomeActor

I. Jones 1981 ...

Fugitive 1993 120

...

...

M.Rouge 2001 124

130

M.Rouge

M.Rouge

Fugitive

I. Jones 1981

2001

2001

1993

N. Kidman

H. Ford

E. McGregor

H. Ford

f

p

’H. Ford’

7 / 11

Self Joins

Por vezes e necessario usar mais do que uma copia da mesmatabela.

Distingue-se cada copia por um sinonimo.

Exemplo: Quais os actores que tem 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 A2.nomeAlec Baldwin Kim BasingerAngelina Jolie Brad Pitt

8 / 11

Page 141: Apresenta¸c˜ao - Fernando Lobo

Interpretacao 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

Operacoes sobre conjuntos(uniao, interseccao, diferenca)

(subquery) UNION (subquery)

(subquery) INTERSECT (subquery)

(subquery) EXCEPT (subquery)

10 / 11

Page 142: Apresenta¸c˜ao - Fernando Lobo

ExemploQuais os filmes a preto e branco em que participou o Jack Nicholson?

Solucao possıvel:

1 Encontrar todos os filmes a preto e branco.

2 Encontrar todos os filmes do Jack Nicholson.

3 Fazer a intereseccao dos resultados.

(SELECT nome, anoFROM FilmesWHERE aCores = FALSE

)INTERSECT(SELECT nomeFilme, anoFilmeFROM ParticipaWHERE nomeActor = ’Jack Nicholson’

);11 / 11

Page 143: Apresenta¸c˜ao - Fernando Lobo

SQL: Logica a 3 valores, joins explıcitos

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 16

Valores NULL

Valor desconhecido ou inaplicavel.

I Ex 1: Nao se conhece a duracao de um filme.

I Ex 2: Valor do atributo mulher/marido de uma pessoa solteira.

Da origem a um comportamento estranho em SQL.

Logica a 3 valores: True, False, Unknown.

2 / 16

Page 144: Apresenta¸c˜ao - Fernando Lobo

Operacoes envolvendo valores NULL

Se x tiver o valor NULL, entao:

1 x + qqcoisa = NULL(a mesma coisa para �, ⇤, /).

2 Quando comparamos x com outro valor, o resultado e Unknown.

3 / 16

Logica com 3 valores

Como e que funcionam os operadores logicos AND, OR, e NOT,numa logica com 3 valores?

True=1, False=0, Unknown= 12

a AND b = min(a, b)a OR b = max(a, b)NOT a = 1�a

4 / 16

Page 145: Apresenta¸c˜ao - Fernando Lobo

Logica 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

Logica com 3 valores (cont.)

nome ano duracaoStar Wars 1977 124King Kong 1933 NULLReturn of the Jedi 1983 165

SELECT * FROM Filmes

WHERE duracao<100 OR duracao>=100;

“King Kong” nao aparece no output.

NULL<100 = Unknown.NULL>=100 = Unknown.Unknown OR Unknown = Unknown.

Para o output so vao os tuplos para os quais a clausula WHERE temo valor True.

6 / 16

Page 146: Apresenta¸c˜ao - Fernando Lobo

Logica com 3 valores (cont.)

Para verificar se um atributo x tem ou nao o valor NULL, deveutilizar-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 formaSELECT-FROM-WHERE.

mas tambem podemos utilizar expressoes de JOIN explıcitas.

essas expressoes aparecem na clausula FROM.

8 / 16

Page 147: Apresenta¸c˜ao - Fernando Lobo

Produto cartesiano (CROSS JOIN)

SELECT *

FROM Filmes, Estudios;

e equivalente a:

SELECT *

FROM Filmes CROSS JOIN Estudios;

9 / 16

Theta Join (JOIN . . . ON)

SELECT *

FROM Filmes, Participa

WHERE nome = nomeFilme

AND ano = anoFilme;

e equivalente a:

SELECT *

FROM Filmes JOIN Participa ON

nome = nomeFilme AND ano = anoFilme;

10 / 16

Page 148: Apresenta¸c˜ao - Fernando Lobo

Natural Join

SELECT Actores.*, categoria

FROM Actores, Realizadores

WHERE Actores.nome = Realizadores.nome

e equivalente a:

SELECT *

FROM Actores NATURAL JOIN Realizadores;

O que significa esta interrogacao em Portugues corrente?

11 / 16

Outerjoins

adiciona ao output os tuplos que nao 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 1a tabela vao para o output.

I RIGHT: os tuplos da 2a tabela vao para o output.

I FULL: os tuplos de ambas as tabelas vao para o output.

12 / 16

Page 149: Apresenta¸c˜ao - Fernando Lobo

Exemplos

--

-- actores que nao sao realizadores aparecem

-- com categoria NULL. Realizadores que nao

-- sao 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 tambem.

--

SELECT *

FROM Filmes FULL OUTER JOIN Participa ON

nome = nomeFilme AND ano = anoFilme;

14 / 16

Page 150: Apresenta¸c˜ao - Fernando Lobo

Exemplos (cont.)

--

-- Filmes sem actores aparecem no output,

-- mas actores que nao tenham participado

-- em filmes nao 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 nao aparecem.

--

SELECT *

FROM Filmes RIGHT OUTER JOIN Participa ON

nome = nomeFilme AND ano = anoFilme;

16 / 16

Page 151: Apresenta¸c˜ao - Fernando Lobo

SQL: Subqueries

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 15

Subqueries

podemos ter uma query dentro de outra query.

uma expressao do tipo SELECT-FROM-WHERE entre parentesis euma subquery.

o resultado de uma subquery e uma tabela.

pode ser usada em varios locais, incluindo as clausulas FROM eWHERE.

2 / 15

Page 152: Apresenta¸c˜ao - Fernando Lobo

Subqueries que retornam um tuplo

Se a subquery retorna apenas um tuplo, entao podemos usa-la como sefosse um valor.

um tuplo unico e geralmente garantido atraves do conceito de chave.

obtem-se um erro de execucao se nao existir nenhum tuplo, ou seexistir mais do que um tuplo.

caso mais habitual: tuplo com um so atributo.

3 / 15

Exemplo

Qual a morada do estudio que fez o Star Wars de 1977?

abordagem 1: fazer um join de estudios com filmes.

abordagem 2: decompor o problema em dois. Primeiro, encontrar onome do estudio que fez o Star Wars de 1977. Depois encontrar amorada desse estudio.

4 / 15

Page 153: Apresenta¸c˜ao - Fernando Lobo

Abordagem 1

Qual a morada do estudio 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 2Qual a morada do estudio 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 e o nome do estudio, o segundo nome e o nome dofilme.

subquerie (SELECT nomeEstudio ...) produz um so tuplo. Porque?6 / 15

Page 154: Apresenta¸c˜ao - Fernando Lobo

Subqueries que retornam mais do que um tuplo

E se o resultado da subquery tiver mais do que 1 tuplo?

. . . tambem se pode usar subqueries recorrendo a um destes 4operadores:

1 IN

2 EXISTS

3 ALL

4 ANY

7 / 15

Operador IN

IN e equivalente a 2

tuplo IN tabela e verdadeiro se e so se o tuplo pertencer a tabela.

I tuplo NOT IN tabela significa o oposto.

IN pode aparecer na clausula WHERE.

a tabela e normalmente uma subquery.

8 / 15

Page 155: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Qual a morada dos estudios que ja produziram filmes a preto ebranco?

SELECT morada

FROM Estudios

WHERE nome IN (

SELECT nomeEstudio

FROM Filmes

WHERE aCores=FALSE

);

9 / 15

Outro exemplo

O operador IN tambem pode ser aplicado a tuplos.

I Quais sao os estudios que ja produziram filmes do Harrison Ford?

I Primeiro encontramos os filmes do Harrison Ford. Depois temos deencontrar os estudios que produziram esses filmes.

SELECT nomeEstudio

FROM Filmes

WHERE (nome,ano) IN

(

SELECT nomeFilme, anoFilme

FROM Participa

WHERE nomeActor = ’Harrison Ford’

);

10 / 15

Page 156: Apresenta¸c˜ao - Fernando Lobo

Operador EXISTS

EXISTS(tabela) e verdadeiro se e so se a tabela nao e vazia.

I NOT EXISTS(tabela) significa o oposto.

EXISTS pode aparecer na clausula WHERE.

11 / 15

ExemploQuais os estudios 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 e uma “correlated subquery”.

subquery da o conjunto de filmes que tem o mesmo estudio que f,mas excluindo o proprio f.

reparem novamente na “scoping rule” dos atributos.12 / 15

Page 157: Apresenta¸c˜ao - Fernando Lobo

Operador IN

ALL e ANY sao usados juntamente com os operadores relacionais =,>, >=, . . .

x > ALL( tabela ) e verdadeiro se e so se x for maior do que todos ostuplos da tabela.

x < ANY( tabela ) e verdadeiro se e so se x for menor do quepelo menos um tuplo da tabela.

I em vez de ’>’ e ’<’ podemos utilizar qualquer operador relacional.

I os tuplos da tabela tem de ter apenas um atributo.

13 / 15

Exemplo

Qual o filme com a maior duracao?

SELECT nome, ano

FROM Filmes

WHERE duracao >= ALL (

SELECT duracao

FROM Filmes

WHERE duracao IS NOT NULL

);

Ha que ter cuidado com os NULLs. Porque?

14 / 15

Page 158: Apresenta¸c˜ao - Fernando Lobo

Outro exemploQuais os filmes que nao tem a maior duracao?

SELECT nome, anoFROM FilmesWHERE NOT duracao >= ALL (

SELECT duracaoFROM FilmesWHERE duracao IS NOT NULL

);

Ou entao:

SELECT nome, anoFROM FilmesWHERE duracao < ANY (

SELECT duracaoFROM FilmesWHERE duracao IS NOT NULL

);

15 / 15

Page 159: Apresenta¸c˜ao - Fernando Lobo

SQL: Agregacoes

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 15

Agregacoes

os operadores SUM, MIN, MAX, AVG, e COUNT, podem seraplicados a um atributo de uma tabela.

os operadores aparecem na clausula SELECT. O resultado e umvalor agregado para o respectivo atributo.

COUNT(*) conta o numero de tuplos.

2 / 15

Page 160: Apresenta¸c˜ao - Fernando Lobo

ExemplosQual a duracao media dos filmes da Disney?

SELECT AVG(duracao)

FROM Filmes

WHERE nomeEstudio = ’Disney’;

avg113.667

Quantos actores existem na tabela de Actores?

SELECT COUNT(*) FROM Actores;

count18

3 / 15

NULLs sao ignorados

um valor NULL nao conta para uma soma, media ou contagem.

um valor NULL nunca pode ser o mınimo ou maximo de uma coluna.

mas se todos os valores de uma coluna forem NULL, entao oresultado da agregacao e NULL.

4 / 15

Page 161: Apresenta¸c˜ao - Fernando Lobo

Exemplo

--

-- numero de filmes da Disney

--

SELECT COUNT(*)

FROM Filmes

WHERE nomeEstudio = ’Disney’;

--

-- numero de filmes da Disney

-- cuja duracao e conhecida

--

SELECT COUNT(duracao)

FROM Filmes

WHERE nomeEstudio = ’Disney’;

5 / 15

Agrupar

apos um SELECT-FROM-WHERE podemos utilizar GROUP BYseguido de uma lista de atributos.

o resultado do SELECT-FROM-WHERE e agrupado de acordo comos valores desses atributos.

as agregacoes sao aplicadas a cada grupo.

6 / 15

Page 162: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Quantos filmes e que cada estudio ja produziu?

SELECT nomeEstudio, COUNT(*)

FROM Filmes

GROUP BY nomeEstudio;

nomeEstudio countDisney 3Fox 8Paramount 5Universal 5Warner Brothers 1

7 / 15

Como funciona?

nome ano duracao aCores nomeEstudio

Mighty Ducks 1991 104 t DisneyLion King 1994 122 t DisneyPocahontas 1995 115 t DisneyStar Wars 1977 124 t FoxEmpire Strikes Back 1980 143 t FoxReturn of the Jedi 1983 165 t FoxTotal Recall 1990 110 t FoxTop Gun 1986 145 t FoxMoulin Rouge 2001 124 t FoxJFK 1996 130 t FoxDances with Wolves 1990 132 t FoxWayne’s World 1992 95 t ParamountAddams Family 1991 102 t ParamountGone With the Wind 1939 181 f ParamountBasic Instinct 1986 100 t ParamountEyes Wide Shut 1999 148 t ParamountKing Kong 1933 f UniversalKing Kong 1976 130 t UniversalIndiana Jones 1981 130 t UniversalThe Fugitive 1993 120 t UniversalBridges of Madison County 1995 147 t UniversalBatman Returns 1992 122 t Warner Brothers

COUNT(*) e aplicado a cada grupo.

8 / 15

Page 163: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo

Quantos filmes e que cada actriz fez?

SELECT nomeActor AS ’actriz’, COUNT(*)

FROM Participa, Actores

WHERE nomeActor = nome

AND sexo=’f’

GROUP BY nomeActor;

actriz countCarrie Fisher 3Dana Carvey 1Meryl Streep 1Michelle Pfeiffer 1Nicole Kidman 2Sharon Stone 2

9 / 15

Mais um exemplo

Qual a duracao maxima e mınima de cada estudio?

SELECT nomeEstudio AS ’estudio’,

MAX(duracao), MIN(duracao)

FROM Filmes

GROUP BY nomeEstudio;

estudio max minDisney 122 104Fox 165 110Paramount 181 95Universal 147 120Warner Brothers 122 122

10 / 15

Page 164: Apresenta¸c˜ao - Fernando Lobo

Restricoes nos elementos a especificar em SELECT

se usarmos um operador de agregacao, entao cada elementoespecificado em SELECT tem de ser:

1 uma agregacao, ou

2 um atributo especificado em GROUP BY.

11 / 15

Exemplo de um query invalido

Qual a filme da Disney com maior duracao?

-- incorrecto

SELECT nome, MAX(duracao)

FROM Filmes

WHERE nomeEstudio=’Disney’;

a query e invalida.

nome nao e uma agregacao, e tambem nao aparece especificado emGROUP BY.

12 / 15

Page 165: Apresenta¸c˜ao - Fernando Lobo

Porque e que e invalido?

-- incorrecto

SELECT nome, MAX(duracao)

FROM Filmes

WHERE nomeEstudio=’Disney’;

nome ano duracao nomeEstudio . . .

Mighty Ducks 1991 104 Disney . . .Lion King 1994 122 Disney . . .Pocahontas 1995 115 Disney . . .

MAX(duracao)! 122.nome! ???

Nao faz sentido seleccionar nome.

13 / 15

Clausula HAVING

podemos ter HAVING <condicao> a seguir a uma clausula GROUPBY.

a condicao e aplicada a cada grupo.

os grupos que satisfazem a condicao vao para o output, os outrossao eliminados.

14 / 15

Page 166: Apresenta¸c˜ao - Fernando Lobo

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 countCarrie Fisher 3Nicole Kidman 2Sharon Stone 2

15 / 15

Page 167: Apresenta¸c˜ao - Fernando Lobo

SQL: Vistas, Indices, Autorizacao, Restricoes

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 20

Vistas

Uma vista (view em ingles) e uma “tabela virtual”.

Nao existe fisicamente na BD.

E definida a custa de outras tabelas ou views.

Sintaxe: CREATE VIEW <nome> AS <query>;

2 / 20

Page 168: Apresenta¸c˜ao - Fernando Lobo

ExemploCriar uma view que da o nome, ano e duracao de todos os filmes daDisney.

CREATE VIEW filmes_disney (nome,ano,realizador) AS

SELECT nome, ano, nomeRealizador

FROM Filmes

WHERE nomeEstudio = ’Disney’;

Agora, podemos fazer queries a view filmes disney tal e qual comese 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) AS

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;

Quais os estudios que ja trabalharam com a Nicole Kidman?

SELECT estudio

FROM filmes_actores

WHERE actor = ’Nicole Kidman’;

4 / 20

Page 169: Apresenta¸c˜ao - Fernando Lobo

Indices

Um ındice e uma estrutura de dados que e utilizada para acelerar aspesquisas.

Os ındices aceleram as pesquisas mas tornam mais lentos osinserts, deletes, e updates.

I porque o SGBD para alem de modificar tabelas, tambem tem demodificar a estrutura de dados.

Muitos SGBDs criam ındices automaticamente para as chavesprimarias. PostgreSQL faz isso.

5 / 20

Indices (cont.)

Vamos supor que temos de procurar muitas vezes por filmes cujaduracao seja maior que x minutos.

Se nao tivermos um ındice, o SGBD tera de fazer uma pesquisasequencial por todos os tuplos da tabela.

Se tivermos um ındice para o atributo duracao, o SGBD poderautilizar um metodo de pesquisa mais sofisticado.

-- criar um ındice para ’duracao’

CREATE INDEX IndiceDuracao ON Filmes(duracao);

-- apagar o ındice

DROP INDEX IndiceDuracao;

6 / 20

Page 170: Apresenta¸c˜ao - Fernando Lobo

Permissoes/Autorizacao

Cada objecto da BD tem um dono (o utilizador que criou o objecto).

Por exemplo, se o utilizador ’ronaldo’ criar a tabela de filmes, apenaso ’ronaldo’ pode aceder e modificar os dados dessa tabela.

O SQL oferece um mecanismo de permissoes de modo a que o’ronaldo’ possa dar permissoes a outros utilizadores.

7 / 20

Permissoes/Autorizacao (cont.)

Em SQL usa-se o comando GRANT. Existe varios tipos de permissoes:

SELECT

INSERT

DELETE

UPDATE

8 / 20

Page 171: Apresenta¸c˜ao - Fernando Lobo

Exemplos

Dar permissao ao utilizador mourinho para fazer SELECTs na tabela defilmes.

GRANT SELECT, UPDATE ON Filmes TO mourinho;

Dar permissao ao utilizador mourinho para fazer SELECTs, e UPDATEsapenas a coluna aCores

GRANT SELECT, UPDATE(aCores) ON Filmes TO mourinho;

9 / 20

Exemplos

Dar todas as permissoes (SELECT, DELETE e UPDATE) ao utilizadormourinho para aceder e/ou modificar a tabela de filmes.

GRANT ALL ON Filmes TO mourinho;

Tambem se pode dar permissoes a varios utilizadores.

GRANT SELECT ON Filmes

TO mourinho, ronaldo, quaresma;

Tambem se pode dar permissoes a todos os utilizadores.

GRANT SELECT ON Filmes TO PUBLIC;

10 / 20

Page 172: Apresenta¸c˜ao - Fernando Lobo

Permissoes/Autorizacao (cont.)

O comando REVOKE retira as permissoes.

O comando REVOKE retira as permissoes.

Exemplo:

REVOKE SELECT ON Filmes TO mourinho;

11 / 20

Restricoes

PRIMARY KEY

UNIQUE

NOT NULL

FOREIGN KEY

12 / 20

Page 173: Apresenta¸c˜ao - Fernando Lobo

Mais restricoes

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

Restricoes ao nıvel do atributo

Coloca-se CHECK( <condicao> ) a seguir a definicao do atributo.

A condicao pode referir o nome do respectivo atributo. Apenas podereferir 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

Page 174: Apresenta¸c˜ao - Fernando Lobo

Restricoes ao nıvel do atributo (cont.)

O check so e verificado quando existe um insert ou update noatributo respectivo.

Ex 1: CHECK(sexo IN (’F’,’M’)) e verificado cada vez que ha uminsert ou update ao valor de sexo.

I se o valor nao for ’F’ nem ’M’, o SGBD rejeita a modificacao.

Ex 2: CHECK(nomeEstudio IN (SELECT nome FROM Estudios))nao e verificado se apagarmos um estudio da tabela de Estudios.

I e diferente de uma chave estrangeira.

15 / 20

Restricoes ao nıvel do tuplo

Podemos ter um CHECK( <condicao> ) como um elemento a partena definicao de uma tabela.

A condicao pode referir-se a qualquer atributo da tabela. Apenaspode referir outros atributos ou outras tabelas num subquery.

Novamente, o check so e verificado em inserts e updates.

Se a condicao do check for falsa, o insert ou update do respectivotuplo e rejeitado.

16 / 20

Page 175: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Os filmes anteriores a 1939 nao podem ser a cores.

CREATE TABLE Filmes(

...

CHECK (NOT (ano<1939 AND aCores=TRUE))

);

17 / 20

Restricoes para a BD em geral (Assercoes)

Uma assercao e uma restricao mais geral que pode especificarvarias tabelas.

Uma vez definida, a assercao faz parte do esquema da BD.

As assercoes sao verificadas cada vez que ha uma modificacao noestado da BD.

Nao esta implementado em PostgreSQL nem em MySQL.

CREATE ASSERTION <nome>

CHECK ( <condicao> );

18 / 20

Page 176: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Nao pode haver realizadores que tambem sejam actores (este exemplo eobviamente fictıcio)

CREATE ASSERTION NaoHaActoresRealizadores

CHECK( NOT EXISTS

(SELECT nome FROM Actores

INTERSECT

SELECT nome FROM Realizadores

)

);

19 / 20

Outro exemplo

A duracao media de todos os filmes de um determinado estudio nao podeexceder 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 restricao poderiafalhar quando houvesse ’deletes’, visto que as restricoes ao nıvel databela apenas sao testadas em ’inserts’ e ’updates’.

20 / 20

Page 177: Apresenta¸c˜ao - Fernando Lobo

Desenvolvimento de aplicacoes com SQL

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 15

Desenvolvimento de aplicacoes

Ate agora temos dado comandos de SQL de forma interactiva numinterpretador de comandos.

Quando se desenvolve aplicacoes utilizamos uma linguagemconvencional, como C ou Java, e incorporamos comandos de SQL.

2 / 15

Page 178: Apresenta¸c˜ao - Fernando Lobo

Utilizacao de SQL em programas

O mais comum e utilizar-se uma Application Programming Interface(API)

Vamos ver alguns exemplos em Java, disponıveis na pagina web dadisciplina.

3 / 15

Programas em Java com SQL

O mais comum e usar JDBC ! Java Database Connectivity.

JDBC e uma API que facilita a escrita de programas em Java comSQL.

4 / 15

Page 179: Apresenta¸c˜ao - Fernando Lobo

JDBC

JDBC e uma coleccao de classes e interfaces.

E necessario usar um driver especıfico para um SGBD concreto.

Usa-se a classe DriverManager para estabelecer uma conexao a umabase de dados.

5 / 15

Arquitectura JDBC

Imagem retirada do livro PostgreSQL de Kerry Douglas e Susan Douglas.

6 / 15

Page 180: Apresenta¸c˜ao - Fernando Lobo

Passos necessarios

1 Importar o package java.sql

import java.sql.*;

2 Carregar o driver apropriado. Para PostgreSQL,

Class.forName("org.postgresql.Driver");

7 / 15

3 Estabelecer uma conexao a uma BD. Exemplo para uma conexaolocal.

String url = "jdbc:postgresql://localhost:5432/filmes";

Connection c = DriverManager.getConnection(url);

Exemplo de url para uma conexao remota,

String url = "jdbc:postgresql://www.mysite.com/filmes";

8 / 15

Page 181: Apresenta¸c˜ao - Fernando Lobo

4 Criar um objecto da classe Statement. Utiliza-se o metodocreateStatement do objecto da classe Connection.

Statement stmt = c.createStatement();

9 / 15

5 Executar um Query ou um Update.

I Update em JDBC refere-se a qualquer operacao que altere o estado dabase de dados.

I Pode ser um comando SQL de UPDATE, INSERT, DELETE, CREATETABLE, etc.

A classe Statement tem os metodos

I executeQuery

I executeUpdate

10 / 15

Page 182: Apresenta¸c˜ao - Fernando Lobo

Exemplos

executeQuery retorna um objecto da classe ResultSet

String cmd = "SELECT nome, ano, duracao " +

"FROM filmes " +

"WHERE nomeEstudio=’Universal’;";

ResultSet rs = stmt.executeQuery(cmd);

executeUpdate retorna o numero de linhas afectadas pela operacao

String cmd = "INSERT INTO estudios(nome,morada) " +

"VALUES(’UAlg’, ’Campus de Gambelas’);";

int nrows = stmt.executeUpdate(cmd);

11 / 15

5 Iterar sobre o ResultSet

I ResultSet tem uma serie de metodos.

I Tipicamente usa-se o metodo next() dentro de um ciclo while paraiterar sobre os tuplos/linhas do ResultSet

I Em cada iteracao usamos metodos (getString, getInt, getFloat,etc) consoante o tipo de dados apropriado, para aceder aoscomponentes de um tuplo.

ResultSet rs = stmt.executeQuery(cmd);while ( rs.next() ) {

String nome = rs.getString("nome");int ano = rs.getInt("ano");...

}

12 / 15

Page 183: Apresenta¸c˜ao - Fernando Lobo

6 Fechar os objectos criados

rs.close();

stmt.close();

c.close();

13 / 15

Exemplos

Vejamos alguns exemplos, disponıveis na pagina web da disciplina.

prog1.java

insereEstudioUalg.java

insereEstudio.java

printStarWars1977.java

printFilmesUniversal.java

printFilmesDeEstudio.java

14 / 15

Page 184: Apresenta¸c˜ao - Fernando Lobo

Mais informacao

Ha muito mais detalhes que nao vimos.

Pesquisar por JDBC no google.

Para SGBDs concretos, pesquisar de forma apropriada (Java withPostgreSQL, Java with MySQL, etc.)

15 / 15

Page 185: Apresenta¸c˜ao - Fernando Lobo

Triggers e Regras

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 21

Triggers

Um trigger permite que uma determinada sequencia de comandos

SQL seja accionada quando um determinado evento ocorre.

O evento pode ser INSERT, UPDATE, ou DELETE.

O trigger pode ser accionado imediatamente antes (BEFORE) ou

imediatamente depois (AFTER) de cada evento.

2 / 21

Page 186: Apresenta¸c˜ao - Fernando Lobo

Triggers

A sequencia de comandos (procedimento) pode ser programada

numa linguagem qualquer desde que devidamente instalada no

servidor do SGBD.

No exemplo que se segue, vamos utilizar PL/pgSQL, uma linguagem

procedimental que vem instalada no PostgreSQL e que e muito

semelhante a linguagem PL/SQL da Oracle.

3 / 21

Exemplo 1

Ao inserir um filme pretende-se que a duracao seja truncada para 300

minutos no caso de se tentar inserir um valor superior.

Associamos um trigger a tabela de filmes.

O trigger sera accionado imediatamente antes de um INSERT ou

UPDATE a tabela de filmes.

Ao ser disparado, o trigger ira executar um procedimento chamado

td300()

CREATE TRIGGER trunca_duracaoBEFORE INSERT OR UPDATEON FilmesFOR EACH ROW

EXECUTE PROCEDURE td300();

4 / 21

Page 187: Apresenta¸c˜ao - Fernando Lobo

Exemplo 1 (cont.)

O procedimento verifica se a duracao do(s) filme(s) a serem inseridos

ou modificados e maior do que 300. Em caso afirmativo forca a

duracao a ser 300.

CREATE OR REPLACE FUNCTION td300() RETURNS TRIGGER AS $$BEGINIF NEW.duracao > 300 THENNEW.duracao := 300;

END IF;RETURN NEW;

END;$$ LANGUAGE plpgsql;

5 / 21

NEW e OLD

Quando o evento e um INSERT, UPDATE ou DELETE, podemos

fazer referencia a duas pseudo-tabelas, NEW e OLD.

NEW refere-se aos novos tuplos (no caso de INSERTs e UPDATEs).

OLD refere-se aos velhos tuplos (no caso de DELETEs e UPDATEs).

6 / 21

Page 188: Apresenta¸c˜ao - Fernando Lobo

AFTER e BEFORE

O trigger pode ser accionado imediatamente apos (AFTER)

ou imediatamente antes (BEFORE) do evento ocorrer.

7 / 21

Exemplo 2

Ao inserir um filme na tabela Filmes, se o estudio nao existir, entao

automaticamente inserir esse estudio na tabela Estudios (com morada a

NULL).

CREATE TRIGGER insere_estudioBEFORE INSERTON FilmesFOR EACH ROWEXECUTE PROCEDURE insere_estudio_de_filme();

8 / 21

Page 189: Apresenta¸c˜ao - Fernando Lobo

Exemplo 2 (cont.)

CREATE OR REPLACE FUNCTION insere_estudio_de_filme()RETURNS TRIGGER AS $$BEGINIF NOT EXISTS (SELECT * FROM Estudios

WHERE nome = NEW.nomeEstudio)THENINSERT INTO Estudios(nome) VALUES (NEW.nomeEstudio);

END IF;RETURN NEW;

END;$$ LANGUAGE plpgsql;

9 / 21

Exemplo 3

Cada vez que e feito um DELETE ou um UPDATE a tabela de Filmes,

guardar um registo numa tabela a parte sobre quem fez a alteracao, em

que data, e que tipo de operacao foi efectuada.

CREATE TABLE arquivoFilmes(nome VARCHAR(50),ano INTEGER,duracao INTEGER,aCores BOOLEAN,nomeEstudio VARCHAR(30),nomeRealizador VARCHAR(50),userchanged VARCHAR,datechanged DATE,operation VARCHAR

);

10 / 21

Page 190: Apresenta¸c˜ao - Fernando Lobo

Exemplo 3 (cont.)

CREATE TRIGGER arquiva_filmeAFTER DELETE OR UPDATEON FilmesFOR EACH ROWEXECUTE PROCEDURE arquiva_filme();

11 / 21

Exemplo 3 (cont.)

CREATE OR REPLACE FUNCTION arquiva_filme()RETURNS TRIGGER AS $$BEGININSERT INTO arquivoFilmes VALUES(OLD.nome, OLD.ano, OLD.duracao, OLD.aCores,OLD.nomeEstudio, OLD.nomeRealizador,CURRENT_USER, now(),TG_OP);

RETURN NULL;END;

$$ LANGUAGE plpgsql;

12 / 21

Page 191: Apresenta¸c˜ao - Fernando Lobo

Regras (Rules)

As regras nao fazem parte do SQL standard, mas sao

implementadas pelo PostgreSQL e dao muito jeito.

Permitem especificar uma accao alternativa que e executada em

SELECTs, INSERTs, UPDATESs, ou DELETEs.

Tal como nos triggers, podemos fazer uso das pseudo-tabelas NEW

e OLD.

13 / 21

Exemplo 1

Exemplo: a seguinte regra nao permite apagar filmes do estudio

Disney.

CREATE RULE nao_apaga_filmes_disney ASON DELETE TO FilmesWHERE OLD.nomeEstudio = ’Disney’DO INSTEAD NOTHING;

14 / 21

Page 192: Apresenta¸c˜ao - Fernando Lobo

Regras e Vistas

Em PostgreSQL, as views sao implementadas com regras.

Em PostgreSQL, as views sao “read-only”, mas podemos simular a

“escrita” em views utilizando regras.

Exemplo: criar uma regra de modo a podermos inserir tuplos na view

filmes disney.

CREATE VIEW filmes_disney (nome,ano,realizador) ASSELECT nome, ano, nomeRealizadorFROM FilmesWHERE nomeEstudio = ’Disney’;

15 / 21

Exemplo (cont.)

CREATE RULE insere_filmes_disney ASON INSERT TO filmes_disneyDO INSTEADINSERT INTO Filmes (nome, ano,

nomeRealizador, nomeEstudio)VALUES (NEW.nome, NEW.ano, NEW.realizador, ’Disney’);

Agora ja podemos inserir dados na view.

INSERT INTO filmes_disneyVALUES (’The Huntchback of Notre Dame’,

1995, ’Steven Spielberg’);

16 / 21

Page 193: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo

Inserir dados na view filmes actores

CREATE VIEW filmes_actores (filme, ano, estudio,realizador, actor) AS

SELECT F.nome, F.ano, F.nomeEstudio,F.nomeRealizador, P.nomeActor

FROM Filmes AS F, Participa AS PWHERE F.nome = P.nomeFilmeAND F.ano = P.anoFilme;

A insercao de um tuplo na view, pode fazer com que tenhamos de

inserir tuplos na tabela Filmes, Estudios, Realizadores, Actores

e Participa.

17 / 21

Outro exemplo (cont.)

CREATE RULE insere_em_filmes_actores ASON INSERT TO filmes_actoresDO INSTEAD(INSERT INTO Filmes(nome, ano,

nomeEstudio, nomeRealizador)VALUES (NEW.filme, NEW.ano,

NEW.estudio, NEW.realizador);

INSERT INTO Actores(nome) VALUES (NEW.actor);

INSERT INTO Estudios(nome) VALUES (NEW.estudio);

INSERT INTO Realizadores(nome) VALUES (NEW.realizador);

INSERT INTO Participa(nomeFilme,anoFilme,nomeActor)VALUES (NEW.filme, NEW.ano, NEW.actor);

);

18 / 21

Page 194: Apresenta¸c˜ao - Fernando Lobo

Outro exemplo (cont.)

Agora podemos inserir dados na view filmes actores.

INSERT INTO filmes_actoresVALUES (’Taxi Driver’, 1978, ’Universal’,

’Martin Scorcese’, ’Roxana Arquette’);

19 / 21

Os INSERTs podem dar erro porque podem violar restricoes que

hajam nas tabelas. Por exemplo, se o estudio Universal ja existir na

tabela de estudios, o INSERT falha porque o nome do estudio e

chave primaria.

A solucao para este problema e criar regras adicionais. Por exemplo:

CREATE RULE nao_insere_estudios_duplicados ASON INSERT TO EstudiosWHERE( EXISTS

(SELECT * FROM EstudiosWHERE nome=NEW.nome)

)DO INSTEAD NOTHING;

20 / 21

Page 195: Apresenta¸c˜ao - Fernando Lobo

A insercao de dados na view “esconde” a insercao efectiva dos

dados nas tabela base.

Ao inserir dados na view ficamos impossibilitados de inserir todos os

atributos das tabelas base.

Esses atributos ficam com o valor NULL (ou com o valor que estiver

especificado como DEFAULT).

Podem consultar mais coisas na documentacao online do

PostgreSQL (Programmer’s Guide! Server Programming! The

Rule System)

http://www.postgresql.org/docs/10/static/rules.html

21 / 21

Page 196: Apresenta¸c˜ao - Fernando Lobo

Transaccoes

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 23

Motivacao

Acesso concorrente: Varios utilizadores (ou programas) fazem

selects, updates, deletes e inserts, em simultaneo.

O SGBD tem de orquestrar os acessos concorrentes de modo a que

o estado da BD seja sempre coerente.

Exemplos crıticos: Bancos, reservas de avioes, vendas online, etc.

2 / 23

Page 197: Apresenta¸c˜ao - Fernando Lobo

Multibanco

Marido e mulher tiram dinheiro de uma conta conjunta a partir de

caixas multibanco distintas, mais ou menos ao mesmo tempo.

I Saldo inicial = 400 euros.

I Marido tira 100 euros, mulher tira 70 euros.

I Saldo final = ?

Suponhamos que temos esta tabela,

CREATE TABLE conta (

numero INTEGER PRIMARY KEY,

saldo FLOAT

);

3 / 23

Multibanco (cont.)

Codigo para levantamento de dinheiro

// utilizador introduz no da conta

...

meuSaldo = SELECT saldo FROM conta

WHERE numero = meuNumero;

// utilizador introduz quantidade a levantar

...

meuSaldo = meuSaldo - quantidade;

IF( meuSaldo > 0 ) THEN

UPDATE conta SET saldo = meuSaldo

WHERE numero = meuNumero;

END IF;

4 / 23

Page 198: Apresenta¸c˜ao - Fernando Lobo

Multibanco (cont.)

Acesso concorrente a mesma conta pode dar problemas.

Mas acesso concorrente a contas distintas nao faz mal.

5 / 23

Outro exemplo

Transferir 100 euros da conta no

333 para a conta no

888.

UPDATE conta SET saldo = saldo - 100

WHERE numero = 333;

UPDATE conta SET saldo = saldo + 100

WHERE numero = 888;

SGBD tem um “crash” no meio. O que e que acontece?

6 / 23

Page 199: Apresenta¸c˜ao - Fernando Lobo

Transaccoes

Uma transaccao e uma sequencia de operacoes SQL que e tratada

como um todo.

As transaccoes devem obedecer as propriedades “ACID”:

I Atomicity

I Consistency

I Isolation

I Durability

7 / 23

Propriedades “ACID”

Atomic: Transaccao deve ser tratada como uma unidade. Ou tudo e

executado, ou nada e executado.

Consistent: As restricoes na BD devem ser mantidas.

Isolated: Da a ilusao ao utilizador de que a transaccao e executada

isoladamente, sem interferencias de outras transaccoes.

Durable: Os efeitos das transaccoes nao se podem perder devido a

“crashes” do sistema.

8 / 23

Page 200: Apresenta¸c˜ao - Fernando Lobo

COMMIT e ROLLBACK

Em SQL, a instrucao BEGIN da inıcio a uma transaccao.

COMMIT termina uma transaccao (as modificacoes sao feitas

fisicamente na BD).

ROLLBACK tambem termina uma transaccao (mas o efeito da

transaccao e anulado, uma especie de “undo”).

Por defeito, no interpretador de SQL que temos usado (sqlite3),uma instrucao SQL e uma transaccao.

I E como se o sistema colocasse um BEGIN e um COMMIT,

mediatamente antes e apos a instrucao.

9 / 23

Encadeamento de instrucoes

numero nome saldo

333 Ze 300

888 Maria 250

Programa 1

UPDATE conta // (updt1)SET saldo = saldo-100 WHERE numero = 333;

UPDATE conta // (updt2)SET saldo = saldo+100 WHERE numero = 888;

Programa 2

UPDATE conta // (updt3)SET saldo = saldo+150 WHERE numero = 888;

SELECT SUM(saldo) FROM conta; // (sum)

10 / 23

Page 201: Apresenta¸c˜ao - Fernando Lobo

Encadeamento de instrucoes (cont.)

A unica restricao que existe e que (updt1) tem de vir antes de

(updt2), e que (updt3) tem de vir antes de (sum).

Qualquer outro tipo de encadeamento de instrucoes e possıvel.

11 / 23

Exemplo

Vamos supor que as instrucoes sao executadas pela ordem (updt1)

(updt3) (sum) (updt2).

Instrucao: (updt1) (updt3) (sum) (updt2)

Resultado: 600???

sum=600 e inconsistente, deveria ser 700.

12 / 23

Page 202: Apresenta¸c˜ao - Fernando Lobo

A solucao e usar transaccoes

Agrupamos (updt1) e (updt2) numa transaccao.

O programa 2 so pode ver o estado da BD antes da transferencia ter

sido iniciado, ou depois da transferencia ter sido completada.

Programa 1

BEGIN;

UPDATE conta // (updt1)SET saldo = saldo - 100WHERE numero = 333;

UPDATE conta // (updt2)SET saldo = saldo + 100WHERE numero = 888;

COMMIT;

13 / 23

Nıveis de isolamento

Os utilizadores (programas) so veem resultados de transaccoes que

fizeram COMMIT.

E se estivermos no meio de uma transaccao, e outra transaccao fizer

COMMIT?

14 / 23

Page 203: Apresenta¸c˜ao - Fernando Lobo

Exemplo

Programa 1

UPDATE conta // (updt1)SET saldo = saldo-100 WHERE numero = 333;

UPDATE conta // (updt2)SET saldo = saldo+100 WHERE numero = 888;

Programa 2

UPDATE conta // (updt3)SET saldo = saldo+150 WHERE numero = 888;

SELECT SUM(saldo) FROM conta; // (sum)

15 / 23

Tempo----------------------------------------------------->P1.begin

updt1updt2

P1.commit

P2.beginupdt3

sumP2.commit

Entre o final de (updt1) e o inıcio de (updt2), o estado da BD

alterou-se.

(updt2) deve ver o novo estado da BD?

SQL define 4 nıveis de isolamento para tratar este problema.

Compete ao utilizador (programador) especificar o nıvel de

isolamento pretendido.

16 / 23

Page 204: Apresenta¸c˜ao - Fernando Lobo

Nıveis de isolamento (cont.)

Nıveis de isolamento de transaccoes em SQL:

1 SERIALIZABLE

2 REPEATABLE READ

3 READ COMMITTED

4 READ UNCOMMITTED

Em SQL:

SET TRANSACTION ISOLATION LEVEL <X>

onde <X> e um dos 4 nıveis especificados acima

17 / 23

SERIALIZABLE

Prog1 = (begin)(updt1)(updt2)(commit)

Prog2 = (begin)(updt3)(sum)(commit)

Se Prog1 correr com nıvel de isolamento SERIALIZABLE, entao

apenas vera o estado da BD antes ou depois de Prog2 ter sido

executado, nunca no meio.

18 / 23

Page 205: Apresenta¸c˜ao - Fernando Lobo

READ COMMITTED

Se Prog1 correr com nıvel de isolamento READ COMMITTED, entao

o encadeamento (updt1) (updt3) (max) (p2.commit) (updt2) e

possıvel.

19 / 23

REPEATABLE READ

E semelhante ao READ COMMITTED, com a diferenca de que se um

tuplo e lido uma vez, entao tera de ser forcosamente devolvido se a

leitura for repetida.

20 / 23

Page 206: Apresenta¸c˜ao - Fernando Lobo

READ UNCOMMITTED

Se uma transaccao correr com READ UNCOMMITTED, podera ler

dados que tenham sido escritos temporariamente por outras

transaccoes (mesmo que essas transaccoes venham a fazer

ROLLBACK)

Exemplo, vamos supor que Prog2 faz ROLLBACK em vez de

COMMIT. Nesse caso, o estado da BD vai ficar incoerente.

21 / 23

Em SQLite

Apenas implementa o modo SERIALIZABLE.

Mecanismo de gestao de transaccoes nao e tao poderoso como

noutros SGBDs.

Se uma transaccao fizer um SELECT a uma tabela, mais ninguem

consegue fazer modificacoes a essa tabela enquanto a transaccao

nao terminar.

22 / 23

Page 207: Apresenta¸c˜ao - Fernando Lobo

Em PostgreSQL.

Permite SERIALIZABLE, REPEATABLE READ, READ COMMITTED.

I SERIALIZABLE da o maior nıvel de isolamento.

I REPEATABLE READ da um menor nıvel de isolamento.

I READ COMMITTED ainda menos isolamento da mas e mais eficiente

de implementar pelo SGBD.

A escolha do nıvel de isolamento depende da aplicacao.

23 / 23

Page 208: Apresenta¸c˜ao - Fernando Lobo

Bases de dados semi-estruturadas, XML

Fernando Lobo

Base de Dados, Universidade do Algarve

1 / 40

Modelo de informacao semi-estruturado

Esquema esta implıcito nos dados.

Ao inves do modelo relacional, nao e obrigatorio a existencia de umesquema para a BD.

Muito em voga nos ultimos anos com XML.

2 / 40

Page 209: Apresenta¸c˜ao - Fernando Lobo

Modelo de informacao semi-estruturado

Os dados sao auto-descritivos.

Podemos forcar a existencia de um esquema se assim o desejarmos.

E mais flexıvel que o modelo relacional.

As linguagens para manipular os dados nao sao tao eficientes comono modelo relacional.

3 / 40

Representacao

A BD e um grafo, uma coleccao de nos e arcos entre nos.

Um no pode ser um no interior ou uma folha.

As folhas tem informacao associada (inteiros, strings, datas, etc.)

Os nos interiores tem 1 ou mais arcos para outros nos.

4 / 40

Page 210: Apresenta¸c˜ao - Fernando Lobo

Nos interiores

Cada arco tem uma anotacao que indica como o no de origem serelaciona com o no destino.

Existe um no especial, a raız, que nao tem arcos a apontar para ele, eque representa a BD inteira.

Todo o no pode ser alcancado atraves de um caminho a partir da raız.

5 / 40

Exemplo: BD de filmes

raiz

rua cidade rua cidade

cf

Beverly

Hills

Carrie

Fisher

Harrison

Ford

Hollywood123 Maple St 7th Av New York

Star Wars 1977

morada

nome

hf

ruacidadenome

Oak Rd

filmeactor

actor

participaEm

temActor

morada

sw

nomeano

temActor

participaEm

6 / 40

Page 211: Apresenta¸c˜ao - Fernando Lobo

Etiquetas em no interior

Uma anotacao L num arco do no N para o no M pode significar 2 coisas:

N e M podem ser objectos que estao relacionados atraves de umaassociacao de nome L.

hf swparticipaEm

N pode ser um objecto e M e um dos atributos do objecto. Nestecaso L e o nome do atributo.

sw 1977

ano

7 / 40

XML — eXtensible Markup Language

XML e um standard que nos permite armazenar e manipularinformacao semi-estruturada.

Muito bom para integrar informacao oriunda de bases de dadosdistintas e para partilhar informacao na web.

8 / 40

Page 212: Apresenta¸c˜ao - Fernando Lobo

XML

XML e uma linguagem de anotacao.

Utiliza etiquetas (tags, em ingles) para descrever informacao.

Podemos definir os tags que quisermos.

9 / 40

XML: tags e elementos

Tags:

<ano> </ano>

Um elemento e um par de “matching tags”e tudo o que esta aıincluıdo.

Um documento XML tem um so elemento raız, que corresponde a BDinteira.

10 / 40

Page 213: Apresenta¸c˜ao - Fernando Lobo

XML bem formado

Nao ha esquema pre-definido.

Encadeamento de tags tem de ser respeitado, tal como os parentesisde uma expressao aritmetica.

11 / 40

Exemplo

<?xml version="1.0" standalone="yes"?>

<Info_Filmes>

<Actor>

<Nome>Carrie Fisher</Nome>

<Morada>

<Rua>123 Maple St</Rua>

<Cidade>Hollywood</Cidade>

</Morada>

<Morada>

<Rua>7th Ave</Rua>

<Cidade>New York</Cidade>

</Morada>

</Actor>

12 / 40

Page 214: Apresenta¸c˜ao - Fernando Lobo

Exemplo (cont.)

<Actor>

<Nome>Harrison Ford</Nome>

<Rua>Oak Rd</Rua>

<Cidade>Beverly Hills</Cidade>

</Actor>

<Filme>

<Nome>Star Wars</Nome>

<Ano>1977</Ano>

</Filme>

</Info_Filmes>

13 / 40

Atributos

Os elementos podem ter atributos. E um modo alternativo derepresentar uma folha no modelo semi-estruturado.

Exemplo,

<Filme ano="1977"><Nome>Star Wars</Nome></Filme>

Ou,

<Filme nome="Star Wars" ano="1977"></Filme>

Ou ainda,

<Filme nome="Star Wars" ano="1977" />

14 / 40

Page 215: Apresenta¸c˜ao - Fernando Lobo

Atributos para associar elementosPodemos usar atributos para representar associacoes entre elementos.

Tornam-se uma especie de apontadores.

<?xml version="1.0" standalone="yes"?>

<Info_Filmes>

<Actor actorID="cf" participaEm="sw">

<Nome>Carrie Fisher</Nome>

<Morada>

<Rua>123 Maple St</Rua>

<Cidade>Hollywood</Cidade>

</Morada>

<Morada>

<Rua>7th Ave</Rua>

<Cidade>New York</Cidade>

</Morada>

</Actor>15 / 40

<Actor actorID="hf" participaEm="sw">

<Nome>Harrison Ford</Nome>

<Rua>Oak Rd</Rua>

<Cidade>Beverly Hills</Cidade>

</Actor>

<Filme filmeID="sw" actores="cf hf">

<Nome>Star Wars</Nome>

<Ano>1977</Ano>

</Filme>

</Info_Filmes>

16 / 40

Page 216: Apresenta¸c˜ao - Fernando Lobo

XML valido

Requer um esquema.

Pode ser definido usando um DTD (Document Type Definition)

Um DTD e uma especie de gramatica que define regras para odocumento.

Uma alternativa ao DTD e usar XML Schema (que nao vamos vernesta disciplina.)

17 / 40

DTDs

<!DOCTYPE <tag raiz> [

<!ELEMENT <nome> ( <componentes> )

<mais elementos>

]>

A descricao de um elemento consiste num nome (tag), e na descricaodos seus elementos constituintes.

I inclui ordem e multiplicidade.

As folhas sao elementos de texto e tem #PCDATA

(Parsed Character Data)

18 / 40

Page 217: Apresenta¸c˜ao - Fernando Lobo

DTD para filmes

<!DOCTYPE Info_Filmes [

<!ELEMENT Info_Filmes (Actor*, Filme*)>

<!ELEMENT Actor (Nome, (Morada+ | (Rua, Cidade)))>

<!ELEMENT Morada (Rua, Cidade)>

<!ELEMENT Rua (#PCDATA)>

<!ELEMENT Cidade (#PCDATA)>

<!ELEMENT Filme (Nome, Ano)>

<!ELEMENT Nome (#PCDATA)>

<!ELEMENT Ano (#PCDATA)>

]>

19 / 40

Definicao de elementos

Os elementos devem aparecer pela ordem especificada.

No final do tag coloca-se um sımbolo que indica a multiplicidade.

I * ! zero ou mais.

I + ! um ou mais.

I ? ! zero ou um.

O sımbolo | tem o significado de “ou” (permite especificar umasequencia alternativa de tags).

20 / 40

Page 218: Apresenta¸c˜ao - Fernando Lobo

Definicao de atributos

<!ATTLIST nome-elemento nome-atributo tipo >

O tipo mais comum e CDATA (uma string)

Identificador e do tipo ID

Referencia e do tipo IDREF, lista de referencias e do tipo IDREFS.

Atributos podem ser obrigatorios (#REQUIRED) ou opcionais(#IMPLIED)

21 / 40

DTD para filmes, com ID’s e IDREF’s

<!DOCTYPE Info_Filmes [

<!ELEMENT Info_Filmes (Actor*, Filme*)>

<!ELEMENT Actor (Nome, Morada+)>

<!ATTLIST Actor

actorID ID #REQUIRED

participaEm IDREFS #IMPLIED

>

<!ELEMENT Nome (#PCDATA)>

<!ELEMENT Morada (Rua, Cidade)>

<!ELEMENT Rua (#PCDATA)>

<!ELEMENT Cidade (#PCDATA)>

<!ELEMENT Filme (Nome, Ano)>

<!ATTLIST Filme

filmeID ID #REQUIRED

actores IDREFS #IMPLIED

>

<!ELEMENT Ano (#PCDATA)>

]> 22 / 40

Page 219: Apresenta¸c˜ao - Fernando Lobo

Utilizacao do DTD

No documento XML colocar STANDALONE = “no”, e depois,

I Incluir o DTD no preambulo do documento XML, ou

I Colocar DOCTYPE <elemento raiz> SYSTEM “path para o ficheiroque contem o DTD”.

23 / 40

Exemplo 1

<?xml version="1.0" standalone="no"?>

<!DOCTYPE Info_Filmes [

<!ELEMENT Info_Filmes (Actor*, Filme*)>

<!ELEMENT Actor (Nome, Morada+)>

...

]>

<Info_Filmes>

<Actor actorID="cf" participaEm="sw">

<Nome>Carrie Fisher</Nome>

<Morada>

...

</Morada>

</Actor>

...

</Info_Filmes>

24 / 40

Page 220: Apresenta¸c˜ao - Fernando Lobo

Exemplo 2, DTD em ficheiro externo

<?xml version="1.0" standalone="no"?>

<!DOCTYPE Info_Filmes SYSTEM "filmes-ID.dtd">

<Info_Filmes>

<Actor actorID="cf" participaEm="sw">

<Nome>Carrie Fisher</Nome>

<Morada>

...

</Morada>

</Actor>

...

</Info_Filmes>

25 / 40

Como validar

Existem programas que permitem validar um documento XML

Um desses programas chama-se xmllint e corre na linha decomandos.

Exemplo de utilizacao,

xmllint --dtdvalid filmesID.dtd --noout filmesID.xml

26 / 40

Page 221: Apresenta¸c˜ao - Fernando Lobo

Linguagens de programacao para XML

Duas linguagens importantes para manipular XML,

XPath

XQuery

27 / 40

XPath

Permite extrair informacao de um documento XML usando expressoesque denotam caminhos a partir do raız do grafo.

Exemplos,

I Retorna os actores

Info_Filmes/Actor

I Retorna os nomes dos actores

Info_Filmes/Actor/Nome

28 / 40

Page 222: Apresenta¸c˜ao - Fernando Lobo

Atributos

Para extrair o valor de um atributo temos de usar @nome-do-atributo.

Exemplo,

I Retorna os IDs dos actores

Info_Filmes/Actor/@actorID

29 / 40

Condicoes

Nome dos actores que moram em Hollywood

/Info_Filmes/Actor[Morada/Cidade = "Hollywood"]/Nome

Nome dos filmes feitos depois de 1980

/Info_Filmes/Filme[Ano > 1980]/Nome

30 / 40

Page 223: Apresenta¸c˜ao - Fernando Lobo

XQuery

XQuery e uma generalizacao do XPath

E uma linguagem funcional baseada em expressoes

Tem algumas semelhancas com SQL

31 / 40

Expressoes FLWR (flower)

F ! for . . .

L ! let . . .

W ! where . . .

R ! return . . .

32 / 40

Page 224: Apresenta¸c˜ao - Fernando Lobo

Expressoes FLWR (flower)

Query tem,

zero ou mais clausulas for e let, intercaladas em qualquer ordem

seguido de uma clausula opcional where

seguido de uma clausula return

33 / 40

Exemplo

Nome dos actores

let $info := doc("filmes-ID.xml")

for $a in $info//Actor

return $a/Nome

variaveis comecam com $

:= ! sinal de atribuicao

return nao tem o significado habitual como em C ou Java. Pode serchamado varias vezes. O resultado vai sendo concatenado sempre quea clausula where e verdadeira.

34 / 40

Page 225: Apresenta¸c˜ao - Fernando Lobo

Mais exemplos

Nome dos actores que moram em Hollywood

let $info := doc("filmes-ID.xml")

for $a in $info//Actor

where $a/Morada/Cidade = "Hollywood"

return $a/Nome

Nome de filmes feitos depois de 1980

let $info := doc("filmes-ID.xml")

for $f in $info//Filme

where $f/Ano > 1980

return $f/Nome

35 / 40

Mais exemplos

Numero de actores

let $seq := (

let $info := doc("filmes-ID.xml")

for $a in $info//Actor

return $a/Nome

)

return count($seq)

36 / 40

Page 226: Apresenta¸c˜ao - Fernando Lobo

Mais exemplos

Dentro de tags, substituir variaveis pelo respectivo valor

let $seq := (

let $info := doc("filmes-ID.xml")

for $a in $info//Actor

return $a/Nome

)

return <actores>{$seq}</actores>

37 / 40

Mais exemplos

Nome dos filmes em que participou o Harrison Ford

let $info := doc("filmes-ID.xml")

let $actores := $info//Actor

let $filmesID_hf := (

for $a in $actores

where $a/Nome = "Harrison Ford"

return $a/data(@participaEm)

)

let $filmes := $info//Filme

for $f in $filmes

where contains($filmesID_hf, $f/@filmeID)

return $f/Nome

38 / 40

Page 227: Apresenta¸c˜ao - Fernando Lobo

Mais exemplos

Retornar pares de actores com a mesma morada(equivalente a um Join)

let $info := doc("filmes-ID.xml")

let $actores := $info//Actor

for $a1 in $actores, $a2 in $actores

where $a1/Morada/Rua = $a2/Morada/Rua

and $a1/Morada/Cidade = $a2/Morada/Cidade

and $a1/Nome < $a2/Nome

return <par>{$a1/Nome}{$a2/Nome}</par>

39 / 40

Informacao adicional

Ha muito mais para alem disto.

Um bom local para explorar e ver os tutoriais de XPath e XQuery emhttp://www.w3schools.com/

Podem testar os exemplos que dei usando um processador de XML,como o Saxon. (Kernow e uma aplicacao grafica que usa Saxon, podeser decarregada em http://kernowforsaxon.sourceforge.net/)

Existem API’s para usar XQuery em programas Java.

40 / 40