Introdução àsBases de Dados Relacionais
Introdução às BD relacionaisÁlgebra relacional
SQL
Alexandre Gonçalves, DECivil, [email protected]
Base de dados
• Uma base de dados (BD) é uma coleção estruturada de dados tal que é possível armazenar e extrair conhecimnto eficientemente.
• Um Sistema de Gestão de Base de Dados (SGBD/DBMS) é um programa informático para armazenar uma BD
Modelos / Níveis
MUNDO REAL
MODELODESCRITIVO
MODELOCONCEPTUAL
MODELOOPERATIVO
MODELOINTERNO
descrição das estruturas e transações*
estruturas de dados externas
manipulação e definição da estrutura
estruturas de dados internas
informação informal
dados
informação formal
instanciação dos dados
* ações de modificação de conteúdo da BD
Escolha de um modelo
• As questões mais importantes...– Identificação das entidades e relações– Capacidade de representar o comportamento– Facilidade de interrogação– Espaço exigido– Políticas de acesso– Robustez (consistência e integridade dos dados)
Desenho de uma BD
1. Análise de requisitos• que dados serão guardados• que operações são mais frequentes e sujeitas a
requisitos de performance
2. Desenho da BD conceptual• descrição dos dados em alto-nível• muitas vezes usa-se o modelo E/R, um modelo de dados
semântico
3. Desenho da BD lógica• conversão da BD conceptual para um esquema
(schema) no modelo de dados do SGBD
Desenho de uma BD
4. Refinamento do esquema• análise da coleção de relações• ex: normalização
5. Desenho da BD física• análise de volumes de trabalho expectáveis• ex: construção de índices
6. Desenho da aplicação e segurança• aspetos de implementação particulares
Modelo Relacional
• Modelo para estruturar informação baseado na teoria de conjuntos e lógica de predicados.
• Objetivos: armazenar dados no mínimo espaço possível; obtenção de informação no mínimo tempo; captura das relações inter-dados.
• Outros modelos possíveis: hierárquicos (arborescentes), em rede, orientados a objetos, orientados a conceitos, ...
Definições
• DOMÍNIO (conjunto de valores)
• RELAÇÃO (=TABELA) (esquema com nome e conjunto de atributos)
• ATRIBUTO (=COLUNA)• TUPLO (=LINHA)• CHAVE (K é chave para R significa K�R)
• RESTRIÇÕES DE INTEGRIDADE
TABELA
CLUBE J GM GS EUR TREINADOR
Barcelona 6 20 4 CL Tito Vilanova
Chelsea 6 14 4 CL Di MatteoPorto 6 13 3 CL Vítor PereiraAEK 4 9 9 Europe L.
Man.Utd 6 13 5 CL Alex Ferguson
Fiorentina 5 12 8 Europe L. Siniša Mihajlović
RESTRIÇÕES DE INTEGRIDADE
CLUBE JOGADOR SALÁRIO GOLOS
Porto Boga 24000 5Porto Zé Manel 20305 0Barcelona Roger 44333 12
GDA Pardal 12000 2
Consistência entre tabelas relacionadas
NORMALIZAÇÃO
1NF2NF
3NFBCNF
4NF5NF
NORMALIZAÇÃO
EQUIPA JOGADOR SALÁRIO TREINADOR
Barcelona Boga 24000 Tito Vilanova
Chelsea Juan Gol 20305 Mourinho
Chelsea John Doe 33500 Mourinho
AEK Agounis 44333 Traianos Dellas
Barcelona Smithson 12000 Gerardo Martino
•Normalizar evita (ou pelo menos, minimiza) algumas anomalias e redundância
•Anomalias: atualização / inserção / eliminação
FORMAS NORMAIS
1ª: «Uma relação está na 1FN se todos os seus atributos são simples»
2ª: «Uma relação está na 2FN se estiver na 1FN e todos os atributos não primários são dependentes da chave por inteiro»
3ª: «Uma relação está na 3FN se estiver na 2FN e todos os atributos não primários são independentes uns dos outros»
NORMALIZAÇÃO – 1ª FN
COMPRA Data Descrição
120 6 Jun 2007
133 14 Jul 2007
Item QuantPapel 31Tinta 41
Item QuantPapel 100Lápis 12
NORMALIZAÇÃO - 1ª FN
TRANSACTION
Date ITEM Quant
120 6 Jun 2007 Papel 31
120 6 Jun 2007 Tinta 41
133 14 Jul 2007 Papel 100
133 14 Jul 2007 Lápis 12
• Não há linhas duplicadas nos atributos-chave
• Não há vazios em atributos-chave
FORMAS NORMAIS
1ª: «Uma relação está na 1FN se todos os seus atributos são simples»
2ª: «Uma relação está na 2FN se estiver na 1FN e todos os atributos não primários são dependentes da chave por inteiro»
3ª: «Uma relação está na 3FN se estiver na 2FN e todos os atributos não primários são independentes uns dos outros»
NORMALIZAÇÃO – 2ª FN
NOME PROJETO Orçamento do projeto
Horas
Ana Prj1 400 30José Prj1 400 10Maria Prj2 175 250Maria Prj3 137 10José Prj2 175 25Maria Prj1 400 10David Prj4 260 75
NORMALIZAÇÃO – 2ª FN
NOME PROJETO Horas
Ana Prj1 30José Prj1 10Maria Prj2 50Maria Prj3 10José Prj2 25Maria Prj1 10David Prj4 75
PROJETO Orçamento
Prj1 400
Prj2 175
Prj3 137
Prj4 260
FORMAS NORMAIS
1ª: «Uma relação está na 1FN se todos os seus atributos são simples»
2ª: «Uma relação está na 2FN se estiver na 1FN e todos os atributos não primários são dependentes da chave por inteiro»
3ª: «Uma relação está na 3FN se estiver na 2FN e todos os atributos não primários são independentes uns dos outros»
NORMALIZAÇÃO – 3ª FN
PROJETO Gestor Data nasc.
Prj1 Joaquim Jan 75
Prj3 Teresa Mai 86
Prj2 Joaquim Jan 75
Prj4 Daniel Nov 88
Prj5 Alfreda Mai 86
NORMALIZAÇÃO – 3ª FN
GESTOR Data nasc.
Alfreda Mai 86
Joaquim Jan 75
Teresa Mai 86
Daniel Nov 88
PROJETO Gestor
Prj1 JoaquimPrj3 TeresaPrj2 JoaquimPrj4 DanielPrj5 Alfreda
NORMALIZAÇÃO 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á ainda etapas de normalização além da 3FN:
•Boyce-Codd NF (BCNF): para todo o X�Y, X é chave candidata ou inclui uma chave candidata (qualquer atributo, do qual outro seja funcionalmente dependente [um determinante], é chave candidata)
•4FN: remove redundâncias com base em dependências multivaloradas
•5FN: toda a dependência de junção é consequência das chaves candidatas
NORMALIZAÇÃO BCNF
VENDE-DOR#
NOME VENDEDOR
PRODU-TO
PREÇO
1 Big Sell Sal 21
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ÇÕES ENTRE TABELAS
• 1�M (um para muitos)• M�M (muitos para muitos)• 1�1 (um para um)
RELAÇÃO 1�M
ID NOME PAÍS5 Tapete 12 Tapete 16 Abacate 221 Caril 310 Lâmpada 50
PRODUTOS
NUM NOME CAPITAL1 Paquistão Islamabad
3 Índia Nova Deli
41 Burkina Faso Uagadugu
22 Guatemala Guatemala
50 Polónia Varsóvia
PAÍSES
chave estrangeira
RELAÇÃO M�M
ID AUTOR TÍTULO5 13 O Chão que
Ela Pisa
2 13 Versículos Satânicos
6 31 Mist. Estrada de Sintra
6 62 Mist. Estrada de Sintra
62 47 Anna Karenina
LIVROSNUM NOME PAÍS13 Salman
RushdieReino Unido
31 Eça Portugal
62 R. Ortigão Portugal
47 Tolstoi Rússia
AUTORES
RELAÇÃO M�M
ID TÍTULO
LIVROS
NUM NOME PAÍS
AUTORES
ID NUM
AUTORIA
RELAÇÃO 1�1
ID NOME ESPÉCIE5 Cão Canis Canis
24 Panda Panda Panda
56 Lobo Canis Lupus
9 Leão Felix Leo
ANIMAISNUM EXTINTO LEI24 N DL 4249B
56 N DL 4399A
PROTEGIDOS
Muitas relações 1�1 podem ser condensadas numa só tabela
Operadores
• SELEÇÃO• PROJEÇÃO• PRODUTO CARTESIANO• JUNÇÃO• JUNÇÃO NATURAL
SELEÇÃO
• Denota-se por σcond(R) onde• R é uma relação; e• cond é a condição de seleção.• O resultado da seleção é uma relação
com os mesmos atributos que R mas cujos tuplos verificam a condição indicada.
A B C5 2 B12 3 B26 2 B21 4 B2
R
A B C5 2 B16 2 B2
S = σB=2(R)
SELEÇÃO PROJEÇÃO
• Denota-se por πlista_de_atributos(R).• O resultado é uma relação onde se
encontram apenas os atributos dalista indicada, sendo retirados ostuplos idênticos, para que o resultadoseja uma relação.
PROJEÇÃO
A B C5 2 G2 3 95 2 T2 3 2
R
A B5 22 3
S = πA,B(R)
PRODUTO CARTESIANO
• Denota-se por R X S X … X T.• O resultado é uma relação U com
aridade igual à soma das aridades das relações argumento, cujos atributos formam os atributos de U. Os tuplos são as combinações possíveis de tuplos dos argumentos.
PRODUTO CARTESIANO
A B2 34 5
R
R.A B S.A C2 3 4 K2 3 3 Y4 5 4 K4 5 3 Y
U = R X S
A C4 K3 Y
S
JUNÇÃO
• Denota-se por R Xθ
S.• É um produto cartesiano seguido
de uma seleção com condição θ.
JUNÇÃO
A B2 34 5
R
R.A B S.A C2 3 4 24 5 4 24 5 3 4
T = R XB>C S
A C4 23 4
S
JUNÇÃO NATURAL
• Denota-se por R |X| S.• É uma junção com o operador “=”,
seguida de uma projeção dosatributos distintos da relaçãoresultado.
JUNÇÃO NATURAL
A B2 34 5
R
A B C4 5 2
T = R |X| S
A C4 23 4
S
SQL-Strutured Query Language
• linguagem padrão para aceder e manipular BD relacionais: SQL permite estruturar, manipular, inserir, questionar
• definida pelo ANSI (American National Standards Institute)
• SQL usada em muitos ambientes (SGBD) diferentes, como MS Access, MS SQL Server, Oracle, Sybase, DB2, Informix, etc.
SQL
• SQL Data Definition Language (DDL)– CREATE TABLE– ALTER TABLE– DROP TABLE– CREATE INDEX– DROP INDEX
• SQL Data Manipulation Language (DML)– UPDATE– DELETE– INSERT INTO – SELECT
SQL – Data Definition Language
CREATE TABLE table_name{column1 data_typecolumn2 data_type... colunmn data_type}exemplo:
CREATE TABLE Pinturas{ANO int(4) TITULO varchar(50)AUTOR varchar(50)LOCAL varchar (50)}
ALTER TABLE table_nameADD column data_type
exemplo:ALTER TABLE PinturasADD Materiais varchar(50)
SQL – Data Manipulation Language
UPDATE tableSET column = new_valueWHERE column = old_value
ex.:UPDATE Sistema_SolarSET type = ‘Planeta anão’WHERE name = ‘Plutão’
DELETE FROM tableWHERE column = value
ex.:DELETE FROM PaísesWHERE nome = ‘Sérvia e Montenegro’
INSERT INTO tableVALUES (value1, value2, ..., valuen)ex.:
INSERT INTO PinturasVALUES (‘1507’, ‘Gioconda’, ‘Leonardo da Vinci’, ‘Louvre’, ‘Óleo sobre madeira’)
SQL – Interrogação à BD
SELECT {DISTINCT | ALL}[ * | [ expr-coluna ]… ]
FROM [ tabela(s) ] …{ WHERE condição }{ GROUP BY [ coluna(s) ] … }{ HAVING condição }{ ORDER BY [esquema-ordenação] … }
SQL – SELECT ... FROM ...
SELECT ID, NOME FROM ANIMAIS
ID NOME ESPÉCIE5 Cão Canis Canis
24 Panda Panda Panda
56 Lobo Canis Lupus
9 Leão Felix Leo
ANIMAISID NOME5 Cão24 Panda56 Lobo9 Leão
RESPOSTA
SQL - WHERE
SELECT ID, NOME FROM ANIMAISWHERE ESPÉCIE LIKE “Canis%”
ID NOME ESPÉCIE5 Cão Canis Canis
24 Panda Panda Panda
56 Lobo Canis Lupus
9 Leão Felix Leo
ANIMAISID NOME5 Cão56 Lobo
RESPOSTA
SQL – WHERE
• A condição presente na cláusulaWHERE pode conter os seguintesoperadores:=, <, >, <=, >=, <>, AND, OR, NOT, BETWEEN, IN, LIKE, NULL, ANY e ALL
SQL - WHERE
SELECT NOME, ID FROM PRODUTOSWHERE PAÍS IN
(SELECT NUM FROM PAÍSESWHERE NOME LIKE “P%”)
ID NOME PAÍS
PRODUTOS
NUM NOME CAPITAL
PAÍSES
NOME IDTapete 5
Lâmpada 10Tapete 2
RESPOSTA
SQL
JOGADORES
JOGOS MULTASNumPagamento NumJog Data Quantia
Jog1 Jog2 NumJogo Resultado Data
NumJogador Nome AnoNasc Categ AnoSocio Morada Cidade Telef NumLiga
SQLExemplo 1: Obter os números dos jogadorese os números da liga dos jogadoresresidentes em Faro:SELECT NumJogador, NumLigaFROM JOGADORESWHERE Cidade = ‘Faro’
Exemplo 2: Obter o número de jogador dequem jogou no dia 21/09/2013:
A.B denota o atributo B da relação ASELECT Jog1, Jog2FROM JOGOSWHERE Data = ‘21/09/2013’
SQLExemplo 3: Obter os nomes e cidades dosjogadores que vivam em Tavira, Faro, Elvas ouTomar:
SELECT Nome, Cidade FROM JOGADORESWHERE Cidade IN (‘Tavira’, ‘Faro’, ‘Elvas’, ‘Tomar’)
Exemplo 4: Obter o nome e número dosjogadores cujo nome comece por ‘B’(maiúsculo) ou termine com ‘o’ (minúsculo):
SELECT Nome, NumJogador FROM JOGADORESWHERE Nome LIKE ‘B%’ OR Nome LIKE ‘%o’
SQL
Exemplo 5: Obter os nomes e números de ligados jogadores que tenham número de liga:
SELECT Nome, NumLigaFROM JOGADORESWHERE NumLiga IS NOT NULL
SQLExemplo 6: Obter os nomes dos jogadoresque jogaram pelo menos um jogo:
SELECT Nome FROM JOGADORESWHERE NumJogador IN
(SELECT Jog1 FROM JOGOS)OR NumJogador IN
(SELECT Jog2 FROM JOGOS)
SQLExemplo 7: Obter os nomes dos jogadoresmais velhos que Teresa Horta:
SELECT Nome FROM JOGADORESWHERE AnoNasc <
(SELECT AnoNasc FROM JOGADORESWHERE Nome = ‘Teresa Horta’)
Exemplo 8: Descobrir os nomes e ano denascimento dos jogadores mais velhos:
SELECT Nome, AnoNasc FROM JOGADORESWHERE AnoNasc <= ALL
(SELECT AnoNasc FROM JOGADORES)
SQL
Exemplo 9: Quais os nomes e anos denascimento dos jogadores que não seencontram entre os mais velhos ?
SELECT Nome, AnoNascFROM JOGADORESWHERE AnoNasc > ANY
(SELECT AnoNasc FROM JOGADORES)
SQL – GROUP BY
• Serve para agrupar linhas atravésde um atributo comum
NUM NOME PAÍS13 Salman
RushdieReino Unido
31 Eça de Queiroz
Portugal
62 R. Ortigão Portugal
47 Tolstoi Rússia
AUTORESSELECT NUMFROM AUTORESGROUP BY PAÍS
NUM13
31, 6247
SQL – HAVING
• Serve para indicar condições aoselementos agrupados com GROUP BY
SELECT NUMFROM AUTORESGROUP BY PAÍSHAVING COUNT(NOME)>1
NUM3162
Exemplo 10: Quais os números dos autores dos países com mais que um autor?
SQLExemplo 11: Obter os números dos jogadores dosquais foi recebida em multas a quantia de pelo menos150:
SELECT NumJog FROM MULTASGROUP BY NumJogHAVING SUM(Quantia) >= 150
Exemplo 12: Quantos jogadores vivem em Évora ?
SELECT COUNT(NumJogador)FROM JOGADORESWHERE Cidade = ‘Évora’
SQL
Exemplo 13: Número de multas aplicadas
SELECT COUNT(*)FROM MULTAS
Exemplo 14: Qual o número de cidades emque residem os jogadores ?
SELECT COUNT (DISTINCT Cidade)FROM JOGADORES
SQL – ORDER BY
• Serve para ordenar os resultadospor determinada coluna
NUM NOME PAÍS13 Salman
RushdieReino Unido
31 Eça de Queiroz
Portugal
62 R. Ortigão Portugal
47 Tolstoi Rússia
AUTORESSELECT NUMFROM AUTORESORDER BY NUM
NUM13
314762
SQLExemplo 15: Listar por ordem crescente o número dejogador e a data de cada multa aplicada:
SELECT NumJog, Data FROM MULTASORDER BY NumJog
Exemplo 16: Obter para cada jogador que pagou pelomenos uma multa o total pago e ordenar osresultados por esse valor:
SELECT NumJog, SUM(Quantia)FROM MULTASGROUP BY NumJogORDER BY 2 DESC
NOME GRUPO PAÍSContinental Sky Team E.U.A.
TAP Star Alliance Portugal
Iberia One World Espanha
Qantas One World Austrália
AeroCondor Portugal
Norfolk Air Austrália
Lufthansa Star Alliance Alemanha
Exercício
AERO_DEST
CIDADE_DEST
COMPANHIA AERO_ORI
MÊS NUM_PASSAG
CIDADE_ORI
VOO
EWR N.York Continental LPL Fev 2762 Liverpool CO959
ORY Paris Lufthansa EWR Jan 10423 N.York LH4145
LIS Lisboa AeroCondor OPO Jan 9492 Porto LXQ33
LIS Lisboa AeroCondor OPO Fev 9001 Porto LXQ33
POR Porto TAP LIS Fev 1482 Lisboa TP9192
POR Porto Lufthansa FRA Fev 1728 Frankfurt LH4711
ORY Paris Iberia MAD Jan 6167 Madrid IB013
ORY Paris Iberia MAD Fev 8914 Madrid IB013
CDG Paris TAP MAD Mar 34560 Madrid TP512
CDG Paris TAP MAD Fev 30050 Madrid TP512
EWR N.York TAP FNC Jan 4443 Funchal TP888
EWR N.York TAP FNC Fev 2790 Funchal TP888
Exercício� 1) NORMALIZAR PARA A 3FN� 2) QUERIES
� i. Quais são os voos de companhias portuguesas e quantospassageiros transportou cada um (no total do ano)?
� ii. Quais as companhias que têm voos em Fevereiro a partir deParis ou com destino a Paris ?
� iii. Quais as cidades no Brasil para onde há voos do grupo StarAlliance ?
� iv. Quais os países onde há cidades com mais de um aeroporto ?
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]