Documente Academic
Documente Profesional
Documente Cultură
RESTRIÇÕES DE
TABELA
INTEGRIDADE
CLUBE JOGADOR SALÁRIO GOLOS
CLUBE J GM GS EUR TREINADOR
Barcelona 6 20 4 CL Tito Vilanova
Porto Boga 24000 5
Chelsea 6 14 4 CL Di Matteo
Porto Zé Manel 20305 0
Porto 6 13 3 CL Vítor Pereira
Barcelona Roger 44333 12
AEK 4 9 9 Europe L.
Man.Utd
GDA Pardal 12000 2
6 13 5 CL Alex Ferguson
Fiorentina 5 12 8 Europe L. Siniša Mihajlović Consistência entre tabelas
relacionadas
NORMALIZAÇÃO NORMALIZAÇÃO
1NF
•Normalizar evita (ou pelo menos, minimiza)
2NF algumas anomalias e redundância
3NF
BCNF •Anomalias: atualização / inserção / eliminação
4NF
5NF EQUIPA JOGADOR SALÁRIO TREINADOR
• Não há linhas duplicadas nos atributos-chave 3ª: «Uma relação está na 3FN se estiver
na 2FN e todos os atributos não primários
• Não há vazios em atributos-chave
são independentes uns dos outros»
NORMALIZAÇÃO – 2ª FN NORMALIZAÇÃO – 2ª FN
NORMALIZAÇÃO
NORMALIZAÇÃO – 3ª FN
além da 3ª FN
A maior parte das tabelas na 3NF estão livres de
anomalias de atualização, inserção e remoção. Mas há
PROJETO Gestor GESTOR Data nasc. ainda etapas de normalização além da 3FN:
•Boyce-Codd NF (BCNF): para todo o XY, X é chave
Prj1 Joaquim Alfreda Mai 86 candidata ou inclui uma chave candidata (qualquer
Prj3 Teresa Joaquim Jan 75 atributo, do qual outro seja funcionalmente dependente
[um determinante], é chave candidata)
Prj2 Joaquim Teresa Mai 86
Prj4 Daniel •4FN: remove redundâncias com base em dependências
Daniel Nov 88 multivaloradas
Prj5 Alfreda
•5FN: toda a dependência de junção é consequência das
chaves candidatas
NORMALIZAÇÃO
RELAÇÕES ENTRE TABELAS
BCNF
VENDE- NOME PRODU- PREÇO • 1M (um para muitos)
DOR# VENDEDOR TO
• MM (muitos para muitos)
1 Big Sell Sal 21
• 11 (um para um)
2 Vizinho Pimenta 140
1 Big Sell Pimenta 130
2 Vizinho Salsa 78
Se os nomes de vendedor são únicos, (VENDEDOR#;
NOME VENDEDOR) e (VENDEDOR#; PRODUTO) são
chaves candidatas, e VENDEDOR# e NOME
VENDEDOR são determinantes que não são chaves
candidatas
RELAÇÃO 1M RELAÇÃO MM
chave estrangeira
LIVROS AUTORES
PRODUTOS PAÍSES ID AUTOR TÍTULO NUM NOME PAÍS
ID NOME PAÍS NUM NOME CAPITAL 5 13 O Chão que 13 Salman Reino
Ela Pisa Rushdie Unido
5 Tapete 1 1 Paquistão Islamabad
2 13 Versículos 31 Eça Portugal
2 Tapete 1 3 Índia Nova Deli Satânicos
62 R. Ortigão Portugal
Abacate Burkina Faso Uagadugu 6 31 Mist. Estrada
6 22 41 de Sintra Tolstoi Rússia
47
1 Caril 3 22 Guatemala Guatemala Mist. Estrada
6 62
de Sintra
10 Lâmpada 50 50 Polónia Varsóvia
62 47 Anna
Karenina
Operadores SELEÇÃO
• SELEÇÃO
• Denota-se por σcond(R) onde
• PROJEÇÃO
• R é uma relação; e
• PRODUTO CARTESIANO
• cond é a condição de seleção.
• JUNÇÃO
• O resultado da seleção é uma relação
• JUNÇÃO NATURAL
com os mesmos atributos que R mas
cujos tuplos verificam a condição
indicada.
SELEÇÃO PROJEÇÃO
• Denota-se por R X S X … X T.
R S = πA,B(R) • O resultado é uma relação U com
A B C A B aridade igual à soma das aridades
5 2 G 5 2 das relações argumento, cujos
2 3 9 2 3 atributos formam os atributos de
5 2 T U. Os tuplos são as combinações
2 3 2 possíveis de tuplos dos
argumentos.
R • Denota-se por R Xθ S.
A B U=RXS • É um produto cartesiano seguido
2 3 R.A B S.A C de uma seleção com condição θ.
4 5 2 3 4 K
S 2 3 3 Y
4 5 4 K
A C
4 5 3 Y
4 K
3 Y
JUNÇÃO JUNÇÃO NATURAL
SELECT ID, NOME FROM ANIMAIS SELECT ID, NOME FROM ANIMAIS
WHERE ESPÉCIE LIKE “Canis%”
ANIMAIS RESPOSTA
ID NOME ESPÉCIE ID NOME ANIMAIS RESPOSTA
5 Cão Canis Canis 5 Cão ID NOME ESPÉCIE ID NOME
5 Cão Canis Canis 5 Cão
24 Panda Panda Panda 24 Panda
24 Panda Panda Panda 56 Lobo
56 Lobo Canis Lupus 56 Lobo
56 Lobo Canis Lupus
9 Leão Felix Leo 9 Leão
9 Leão Felix Leo
SQL SQL
Exemplo 3: Obter os nomes e cidades dos
jogadores que vivam em Tavira, Faro, Elvas ou
Tomar: Exemplo 5: Obter os nomes e números de liga
dos jogadores que tenham número de liga:
SELECT Nome, Cidade FROM JOGADORES
WHERE Cidade IN (‘Tavira’, ‘Faro’, ‘Elvas’, ‘Tomar’) SELECT Nome, NumLiga
FROM JOGADORES
Exemplo 4: Obter o nome e número dos
WHERE NumLiga IS NOT NULL
jogadores cujo nome comece por ‘B’
(maiúsculo) ou termine com ‘o’ (minúsculo):
SQL SQL
Exemplo 6: Obter os nomes dos jogadores
Exemplo 7: Obter os nomes dos jogadores
que jogaram pelo menos um jogo:
mais velhos que Teresa Horta:
SELECT Nome FROM JOGADORES
WHERE NumJogador IN SELECT Nome FROM JOGADORES
(SELECT Jog1 FROM JOGOS) WHERE AnoNasc <
OR NumJogador IN (SELECT AnoNasc FROM JOGADORES
(SELECT Jog2 FROM JOGOS) WHERE Nome = ‘Teresa Horta’)
Bibliografia
• Ramakrishnan & Gehrke, Database Management Systems, Ed.
McGraw-Hill
Na Biblioteca:
• J.C.Date, An Introduction to Database Systems [D-51]
• Ullman & Widom, A First Course in Database Systems [5399 –
CMEST]
• Date & Darwen, A Guide to the SQL Standard [D-34]
• Batini, Ceri & Navethe, Conceptual Database Design [B-85]
• Connolly, Begg & Strechan, Database Systems [5123 – CMEST]
• Machado & Abreu, Projecto de Banco de Dados [5356 – CMEST]