Base de dados Introdução às Bases de Dados Relacionais Introdução às BD relacionais Álgebra relacional SQL • 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 Alexandre Gonçalves, DECivil, IST [email protected] Modelos / Níveis • As questões mais importantes... MUNDO REAL informação informal informação formal dados instanciação dos dados MODELO DESCRITIVO MODELO CONCEPTUAL MODELO OPERATIVO MODELO INTERNO Escolha de um modelo descrição das estruturas e transações* manipulação e definição da estrutura estruturas de dados externas – – – – – – 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) estruturas de dados internas * ações de modificação de conteúdo da BD 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 KR) RESTRIÇÕES DE INTEGRIDADE RESTRIÇÕES DE INTEGRIDADE TABELA CLUBE J GM GS EUR TREINADOR Barcelona 6 20 4 CL Tito Vilanova Chelsea 6 14 4 CL Di Matteo Porto 6 13 3 CL Vítor Pereira AEK 4 9 9 Europe L. Man.Utd 6 13 5 CL Fiorentina 5 12 8 Europe L. Siniša Mihajlović Alex Ferguson CLUBE JOGADOR SALÁRIO GOLOS Porto Porto Barcelona Boga Zé Manel Roger 24000 20305 44333 5 0 12 GDA Pardal 12000 2 Consistência entre tabelas relacionadas NORMALIZAÇÃO 1NF 2NF 3NF BCNF 4NF 5NF NORMALIZAÇÃO •Normalizar evita (ou pelo menos, minimiza) algumas anomalias e redundância •Anomalias: atualização / inserção / eliminaçã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 FORMAS NORMAIS NORMALIZAÇÃO – 1ª FN COMPRA Data 120 6 Jun 2007 Item Papel Tinta Quant 31 41 133 14 Jul 2007 Item Papel Lápis Quant 100 12 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 TRANSAC TION 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 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» • Não há linhas duplicadas nos atributos-chave • Não há vazios em atributos-chave 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 Ana José Maria Maria José Maria David PROJETO Prj1 Prj1 Prj2 Prj3 Prj2 Prj1 Prj4 Descrição Orçamento do projeto Horas 400 400 175 137 175 400 260 30 10 250 10 25 10 75 NORMALIZAÇÃO – 2ª FN PROJETO Orçamento Prj1 400 NOME PROJETO Horas Prj2 175 Prj3 137 Prj4 260 Ana José Maria Maria José Maria David Prj1 Prj1 Prj2 Prj3 Prj2 Prj1 Prj4 30 10 50 10 25 10 75 FORMAS NORMAIS NORMALIZAÇÃO – 3ª FN PROJETO Gestor Data nasc. 1ª: «Uma relação está na 1FN se todos os seus atributos são simples» Prj1 Joaquim Jan 75 Prj3 Teresa Mai 86 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» Prj2 Joaquim Jan 75 Prj4 Daniel Nov 88 Prj5 Alfreda Mai 86 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 GESTOR Data nasc. Prj1 Prj3 Prj2 Prj4 Prj5 Joaquim Teresa Joaquim Daniel Alfreda Alfreda Mai 86 Joaquim Jan 75 Teresa Mai 86 Daniel Nov 88 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 XY, 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 RELAÇÕES ENTRE TABELAS VENDEDOR# NOME VENDEDOR PRODUTO 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 • 1M (um para muitos) • MM (muitos para muitos) • 11 (um para um) RELAÇÃO 1M RELAÇÃO MM chave estrangeira PRODUTOS LIVROS PAÍSES ID NOME PAÍS Tapete 5 1 Tapete 2 1 Abacate 6 22 Caril 1 3 Lâmpada 10 50 NUM 1 3 41 22 50 NOME CAPITAL Paquistão Islamabad Índia Nova Deli Burkina Faso Uagadugu Guatemala Guatemala Polónia Varsóvia ID AUTOR 5 13 2 13 ID NUM NOME AUTORIA ID NUM Mist. Estrada de Sintra 6 62 Mist. Estrada de Sintra 62 47 Anna Karenina SELEÇÃO PROJEÇÃO PRODUTO CARTESIANO JUNÇÃO JUNÇÃO NATURAL 31 62 47 NOME PAÍS Salman Rushdie Reino Unido Eça Portugal R. Ortigão Portugal Tolstoi Rússia PROTEGIDOS ANIMAIS PAÍS ID NOME 5 Cão 24 Panda 56 Lobo 9 Leão Operadores • • • • • Versículos Satânicos NUM 13 RELAÇÃO 11 AUTORES TÍTULO TÍTULO O Chão que Ela Pisa 31 6 RELAÇÃO MM LIVROS AUTORES ESPÉCIE Canis Canis Panda Panda Canis Lupus Felix Leo NUM EXTINTO LEI DL 4249B 24 N DL 4399A 56 N Muitas relações 11 podem ser condensadas numa só tabela 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. SELEÇÃO PROJEÇÃO • Denota-se por πlista_de_atributos(R). • O resultado é uma relação onde se encontram apenas os atributos da lista indicada, sendo retirados os tuplos idênticos, para que o resultado seja uma relação. S = σB=2(R) R A 5 2 6 1 B 2 3 2 4 C B1 B2 B2 B2 A 5 6 B 2 2 C B1 B2 PRODUTO CARTESIANO PROJEÇÃO • 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. S = πA,B(R) R A 5 2 5 2 B 2 3 2 3 C G 9 T 2 A 5 2 B 2 3 PRODUTO CARTESIANO R A 2 4 B 3 5 A 4 3 C K Y S U=RXS R.A 2 2 4 4 B 3 3 5 5 S.A 4 3 4 3 C K Y K Y JUNÇÃO • Denota-se por R Xθ S. • É um produto cartesiano seguido de uma seleção com condição θ. JUNÇÃO NATURAL JUNÇÃO R A 2 4 B 3 5 A 4 3 C 2 4 S T = R XB>C S R.A 2 4 4 B 3 5 5 S.A 4 4 3 JUNÇÃO NATURAL R A 2 4 B 3 5 A 4 3 C 2 4 T = R |X| S A 4 B 5 S SQL C 2 C 2 2 4 • Denota-se por R |X| S. • É uma junção com o operador “=”, seguida de uma projeção dos atributos distintos da relação resultado. 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 – Data Definition Language • 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 CREATE TABLE table_name {column1 data_type column2 data_type ... colunmn data_type } exemplo: CREATE TABLE Pinturas {ANO int(4) TITULO varchar(50) AUTOR varchar(50) LOCAL varchar (50)} ALTER TABLE table_name ADD column data_type exemplo: ALTER TABLE Pinturas ADD Materiais varchar(50) SQL – Data Manipulation Language UPDATE table SET column = new_value WHERE column = old_value DELETE FROM table WHERE column = value ex.: UPDATE Sistema_Solar SET type = ‘Planeta anão’ WHERE name = ‘Plutão’ ex.: DELETE FROM Países WHERE nome = ‘Sérvia e Montenegro’ INSERT INTO table VALUES (value1, value2, ..., valuen) ex.: INSERT INTO Pinturas VALUES (‘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 RESPOSTA ANIMAIS ID NOME 5 Cão 24 Panda 56 Lobo 9 Leão ESPÉCIE Canis Canis Panda Panda Canis Lupus Felix Leo ID NOME 5 Cão 24 Panda 56 Lobo 9 Leão SQL - WHERE SELECT ID, NOME FROM ANIMAIS WHERE ESPÉCIE LIKE “Canis%” ID NOME 5 Cão 24 Panda 56 Lobo 9 Leão SQL – WHERE • A condição presente na cláusula WHERE pode conter os seguintes operadores: =, <, >, <=, >=, <>, AND, OR, NOT, BETWEEN, IN, LIKE, NULL, ANY e ALL RESPOSTA ANIMAIS ESPÉCIE Canis Canis Panda Panda ID NOME 5 Cão 56 Lobo Canis Lupus Felix Leo SQL - WHERE SELECT NOME, ID FROM PRODUTOS WHERE PAÍS IN (SELECT NUM FROM PAÍSES WHERE NOME LIKE “P%”) PRODUTOS RESPOSTA ID NOME PAÍS PAÍSES NUM NOME CAPITAL NOME Tapete Lâmpada Tapete ID 5 10 2 SQL SQL Exemplo 1: Obter os números dos jogadores e os números da liga dos jogadores residentes em Faro: JOGADORES NumJogador Jog1 Nome Jog2 JOGOS AnoNasc NumJogo Categ AnoSocio Resultado Morada Cidade Telef NumLiga Exemplo 2: Obter o número de jogador de quem jogou no dia 21/09/2013: Data MULTAS NumPagamento SELECT NumJogador, NumLiga FROM JOGADORES WHERE Cidade = ‘Faro’ NumJog Data Quantia SQL Exemplo 3: Obter os nomes e cidades dos jogadores que vivam em Tavira, Faro, Elvas ou Tomar: SELECT Nome, Cidade FROM JOGADORES WHERE Cidade IN (‘Tavira’, ‘Faro’, ‘Elvas’, ‘Tomar’) Exemplo 4: Obter o nome e número dos jogadores cujo nome comece por ‘B’ (maiúsculo) ou termine com ‘o’ (minúsculo): A.B denota o atributo B da relação A SELECT Jog1, Jog2 FROM JOGOS WHERE Data = ‘21/09/2013’ SQL Exemplo 5: Obter os nomes e números de liga dos jogadores que tenham número de liga: SELECT Nome, NumLiga FROM JOGADORES WHERE NumLiga IS NOT NULL SELECT Nome, NumJogador FROM JOGADORES WHERE Nome LIKE ‘B%’ OR Nome LIKE ‘%o’ SQL Exemplo 6: Obter os nomes dos jogadores que jogaram pelo menos um jogo: SELECT Nome FROM JOGADORES WHERE NumJogador IN (SELECT Jog1 FROM JOGOS) OR NumJogador IN (SELECT Jog2 FROM JOGOS) SQL Exemplo 7: Obter os nomes dos jogadores mais velhos que Teresa Horta: SELECT Nome FROM JOGADORES WHERE AnoNasc < (SELECT AnoNasc FROM JOGADORES WHERE Nome = ‘Teresa Horta’) Exemplo 8: Descobrir os nomes e ano de nascimento dos jogadores mais velhos: SELECT Nome, AnoNasc FROM JOGADORES WHERE AnoNasc <= ALL (SELECT AnoNasc FROM JOGADORES) SQL SQL – GROUP BY Exemplo 9: Quais os nomes e anos de nascimento dos jogadores que não se encontram entre os mais velhos ? SELECT Nome, AnoNasc FROM JOGADORES WHERE AnoNasc > ANY (SELECT AnoNasc FROM JOGADORES) • Serve para agrupar linhas através de um atributo comum AUTORES NUM 13 NOME PAÍS Salman Rushdie Reino Unido 31 Eça de Queiroz Portugal 62 47 R. Ortigão Portugal Tolstoi Rússia SQL – HAVING NUM 31 62 Exemplo 10: Quais os números dos autores dos países com mais que um autor? 31, 62 47 Exemplo 11: Obter os números dos jogadores dos quais foi recebida em multas a quantia de pelo menos 150: SELECT NumJog FROM MULTAS GROUP BY NumJog HAVING SUM(Quantia) >= 150 Exemplo 12: Quantos jogadores vivem em Évora ? SELECT COUNT(NumJogador) FROM JOGADORES WHERE Cidade = ‘Évora’ SQL Exemplo 13: Número de multas aplicadas SELECT COUNT(*) FROM MULTAS Exemplo 14: Qual o número de cidades em que residem os jogadores ? SELECT COUNT (DISTINCT Cidade) FROM JOGADORES NUM 13 SQL • Serve para indicar condições aos elementos agrupados com GROUP BY SELECT NUM FROM AUTORES GROUP BY PAÍS HAVING COUNT(NOME)>1 SELECT NUM FROM AUTORES GROUP BY PAÍS SQL – ORDER BY • Serve para ordenar os resultados por determinada coluna AUTORES NUM 13 NOME PAÍS Salman Rushdie Reino Unido 31 Eça de Queiroz Portugal 62 R. Ortigão Portugal 47 Tolstoi Rússia SELECT NUM FROM AUTORES ORDER BY NUM NUM 13 31 47 62 SQL Exercício Exemplo 15: Listar por ordem crescente o número de jogador e a data de cada multa aplicada: SELECT NumJog, Data FROM MULTAS ORDER BY NumJog Exemplo 16: Obter para cada jogador que pagou pelo menos uma multa o total pago e ordenar os resultados por esse valor: SELECT NumJog, SUM(Quantia) FROM MULTAS GROUP BY NumJog ORDER BY 2 DESC GRUPO PAÍS Continental 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 AERO_ CIDADE DEST _DEST COMPANHIA AERO _ORI MÊS NUM_P ASSAG CIDADE _ORI 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 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 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] Star Alliance Alemanha Exercício VOO ORY • NOME 1) NORMALIZAR PARA A 3FN 2) QUERIES i. Quais são os voos de companhias portuguesas e quantos passageiros transportou cada um (no total do ano)? ii. Quais as companhias que têm voos em Fevereiro a partir de Paris ou com destino a Paris ? iii. Quais as cidades no Brasil para onde há voos do grupo Star Alliance ? iv. Quais os países onde há cidades com mais de um aeroporto ?