Anúncio

Base de Dados - Diagramas E-A (cont.)

22 de Nov de 2022
Anúncio

Mais conteúdo relacionado

Mais de Mariana Hiyori(20)

Anúncio

Último(20)

Base de Dados - Diagramas E-A (cont.)

  1. Base de Dados Diagramas E-A (cont.) 2018/2019
  2. TPC1 • Numa empresa cada empregado tem no máximo uma habilitação mas uma dada habilitação pode ser possuída por vários empregados. • Um empregado está habilitado a operar determinado tipo de máquina se tiver uma de entre várias habilitações, mas cada habilitação está associada com a operação de um único tipo de máquina. • Possuir uma dada habilitação permite ao empregado manter vários tipos de máquinas apesar de a manutenção de um tipo de máquina requerer uma habilitação específica.
  3. TPC1 (cont) a) Desenhe o diagrama E-A usando as seguintes entidades e associações: Entidade Associação Entidade Habilitação Possuída_por Empregado Tipo_Máquina Necessita_para_Operação Habilitação Habilitação Permite_Manutenção Tipo_Máquina b) Redesenhe o diagrama com as associações Necessita_para_Operação e Permite_Manutenção combinados numa só associação M:N Operação_ou_Manutenção
  4. Revisão • Diagramas E-A • Entidades, atributos e associações • Associações 1:1, 1:N, M:N • Obrigatoriedade de participação • Decomposição de relações M:N
  5. Sumário • Associações Complexas • Situações Ambíguas • Entidades fracas • Associação unária e Papel • Generalização e Especialização • Agregação • Restrições não-formalizáveis • Erros comuns
  6. Exemplo • Qualquer fornecedor fornece qualquer peça a qualquer cliente Fornecedor Peça Cliente F1 P1 C1 F2 P1 C2 F2 P2 C1
  7. Solução: 3 associações? • Que fornecedores fornecem que peças? • Que peças são fornecidas a que clientes? • Que fornecedores fornecem que clientes? • Que fornecedores fornecem que peças a que clientes? Fornecedor Peça Cliente F1 P1 C1 F2 P1 C2 F2 P2 C1
  8. Associações Complexas • Relacionam mais do que duas entidades entre si • Devem ser usadas apenas quando o conceito não pode ser representado por um conjunto de associações binárias
  9. Associações Complexas Grau 1:1:1 • A cada par de ocorrências das entidades B e C está associada apenas uma ocorrência de A (ou nenhuma) • Análogo para B e C
  10. Associações Complexas Grau (1:1:N) • A cada par de ocorrências das entidades B e C está associada uma, várias ou nenhuma ocorrência de A • A cada par de ocorrências de A e C está apenas uma ocorrência de B • A cada par de ocorrências de A e B está apenas uma ocorrência de C • Análogo para 1:M:N e M:N:P
  11. Associações Complexas Grau 1:1:1 • A cada par de ocorrêmcoas das entidades B e C está associada apenas uma ocorrência de A (ou nenhuma) • Análogo para B e C
  12. Solução: 3 associações? • Que fornecedores fornecem que peças a que clientes? Fornecedor Peça Cliente F1 P1 C1 F2 P1 C2 F2 P2 C1
  13. Solução: Associação Complexa (M:N:P) • Qualquer fornecedor fornece qualquer peça a qualquer cliente • Decompor em associações 1:N
  14. Solução: Associação Complexa (M:N:P) • Qualquer fornecedor fornece qualquer peça a qualquer cliente Fornecimento
  15. Situações Ambíguas (Fan Trap) • Permite responder às questões: • Quais os empregados de uma direção? • Quais os departamentos de uma direção? • A que direção pertence um empregado? • A que direção pertence um departamento? • A que departamento pertence um empregado? • Quais os empregados de um departamento? Fan Trap N:1/1:N
  16. Situações Ambíguas (Chasm Trap) • E se um empregado pertencer a uma direção mas não pertencer a um departamento? Chasm Trap 1:N/1:N
  17. Solução • Solução com 3 associações
  18. Exercício 1 • Numa companhia cada departamento possui um carro que só pode ser usado por empregados do departamento devidamente autorizados. Considere a estrutura Carro (N_registo, marca) Departamento (Nome_dep, localização) Empregado (N_emp, nome_emp, categoria)
  19. Exercicio 1 (cont.) • Se souber o número de um empregado autorizado, a estrutura permitirá determiner qual o carro utilizado? • Se souber o número de registo de um carro poderá saber que empregados estão autorizados a usá-lo? • Como pode o diagrama ser estendido (por adição de uma associação) para que represente utilizadores autorizados? • Como podem ser representados utilizadores autorizados se for permitido um novo atributo?
  20. Exercício 2 • Um modelo conceptual representa autores e a classificação por temas dos seus livros. Discuta as vantagens:
  21. Associação unária e Papel • O papel pode ser especificado para evitar ambiguidades funcionário supervisiona supervisor supervisionado 1 N
  22. Generalização e Especialização • Quando entidades obedecem a hierarquia de especialização • Disjoint/Overlapping (default) • Herança e atributos empregado CC nome IS-A freelancer tarifa_horária horas_trabalho contratado salário_mensal disjoint
  23. Agregação • Projetos (executados por departamentos) podem ser monitorizados por um empregado Empregado CC nome até monitoriza Projeto Departamento desde pid inicio did nome executa
  24. Restrições não formalizáveis • Não conseguimos representar todo o tipo de restrições no diagrama E-A • Descritos como anexo ao diagrama E-A Empregado Departamento trabalha cc did nome N 1 nome orçamento desde até Restrições de Integridade: (IC-1) Empregados têm de trabalhar pelo menos três meses num departamento
  25. Erros comuns • Usar atributos que podem ser calculados (# funcionários) • Entidades sem atributos • Restrições anexas que podem ser modeladas • Entidades com uma única instância (e.g. empresa para base de dados da empresa) • Partes isoladas do diagrama • Agregação de várias associações (agregação deve apenas conter uma associação)
  26. Resumo
  27. Base de Dados Modelo Relacional 2018/2019
  28. Sumário • Estrutura de Bases de Dados Relacionais • Modelo Relacional • Estruturas, atributos • Base de dados relacional • Chaves
  29. Modelo Relacional • Criado em 1970 por Edgar F. Codd • O modelo relacional é independente da implementação • Facilmente traduzido para base de dados relacionais, mas também para muitas outras aplicações • Um modelo formal simples e elegante baseado na teoria dos conjuntos: permite rapida deteção de anomalias
  30. Ideias fundamentais • Tudo é representado por relações (conjunto de tuplos) • Todos os elementos de uma relação devem respeitar o seu esquema • Todas as operações sobre os dados são operações sobre conjuntos • Situações que não podem ocorrer são especificadas como restrições
  31. Exemplo de uma Relação • Como tabela • Ou como conjunto: Cliente {(Silva, Av. da Liberdade, Lisboa), (Antunes, Rua da Prata, Lisboa), (Costa, Av. Aliados, Porto)} cliente_nome cliente_rua cliente_cidade Silva Av. da Liberdade Lisboa Antunes Rua da Prata Lisboa Costa Av. Aliados Porto
  32. Estrutura Básica • Formalmente, dados conjuntos D1, D2, …, Dn, a relação r é um subconjunto de D1 x D2 x … x Dn Logo, a relação é um conjunto de n-tuplos (a1, a2, …, an) onde ai e Di • Exemplo: Se • cliente_nome = {Silva, Antunes, Costa} • cliente_rua = {Av. Da Liberdade, Rua da Prata, Av. Aliados} • cliente_cidade = {Lisboa, Porto} Então r = {(Silva, Av. da Liberdade, Lisboa), (Antunes, Rua da Prata, Lisboa), (Costa, Av. Aliados, Porto)} É uma relação sobre cliente_nome x cliente_rua x cliente_cidade
  33. Tipo de Atributos • Cada atributo de uma relação tem um nome • O conjunto de valores permitidos por cada atributo é designado por domínio • Valores dos atributos são necessariamente atómicos i.e. um único valor indivisivel
  34. Exemplo Entidade • Consideremos a entidade Pessoa com os atributos: NISS, primeiro nome, último nome, idade • Pessoa(NISS, primeiro_nome, ultimo_nome, idade) • Onde os domínios dos atributos são: • NISS – conjunto, S, dos números de segurança social • primeiro_nome – conjunto, A, de sequências finitas de letras • ultimo_nome – conjunto, A, de sequências finitas de letras • idade – conjunto, N, dos inteiros positivos < 150 • Função: (NISS, primeiro_nome, ultimo_nome, idade): Pessoa −> S x A x A x N
  35. Esquema da Relação • A1, A2, …, An são atributos • R = (A1, A2, …, An) é o esquema da relação • Exemplo Cliente=(cliente_nome, cliente_rua, cliente_cidade) • r(R) é uma relação no esquema R • Exemplo cliente(Cliente) • Ou cliente(cliente_nome, cliente_rua, cliente_cidade)
  36. Instâncias da Relação • Os valores (instâncias) de uma relação são especificados por uma tabela • Um elemento t de r é um tuplo, representado por uma linha da tabela cliente_nome cliente_rua cliente_cidade Silva Av. da Liberdade Lisboa Antunes Rua da Prata Lisboa Costa Av. Aliados Porto Atributos (colunas) tuplos (linhas)
  37. Propriedades das Relações • Não contém tuplos duplicados (é um conjunto) • Não contém nome de atributos duplicados • A ordem dos tuplos é irrelevante • A ordem dos atributos é irrelevante
  38. Base de Dados Relacional • A Base de Dados consiste em múltiplas relações cujo conteúdo varia no tempo • Esquema relacional é a descrição das estrutura das relações de BD Relacional • A informação sobre a empresa é decomposta por partes, onde cada relação guarda uma parte da informação • conta: guarda informação sobre contas • titular: guarda informação sobre a titularidade de clientes sobre contas • cliente: guarda informação sobre clientes • Porque não armazenar toda a informação numa só relação? banco(conta_numero, saldo, cliente_nome, …)
  39. A base de dados banco conta_numero agencia_nome saldo A-102 Lumiar 500 A-217 Campolide 1000 A-222 Caparica 1500 A-201 Campanhã 700 cliente_nome cliente_rua cliente_cidade Silva Av. da Liberdade Lisboa Antunes Rua da Prata Lisboa Costa Av. Aliados Porto Pereira Av. da Liberdade Lisboa Nunes Rua Forte Almada cliente_nome conta_numero Silva A-102 Antunes A-101 Antunes A-305 Costa A-201 Pereira A-217 Nunes A-222
  40. Chaves • Seja K ⊆ R • K é superchave de R se os valores para K forem suficientes para identificar um único tuplo de cada possivel relação r(R) • Possivel r significa uma relação que poderia existir na organização que estamos a modelar • Exemplo: {cliente_nome, cliente_rua} e {cliente_nome} são ambos supercahve de cliente, se não for possivel ter dois clientes com o mesmo nome • K é uma chave candidate se K é mínimo • Exemplo: {cliente_nome} é chave candidate para cliente, uma vez que é superchave mas não contém subconjuntos que sejam superchave • Chave primária é uma chave candidate usada como identificador principal de um tuplo
  41. Chaves na relação cliente • Será {cliente_nome, cliente_rua, cliente_cidade} uma superchave? • Será {nome_rua} chave candidate? • Será {nome_rua, nome_cidade} superchave? cliente_nome cliente_rua cliente_cidade Silva Av. da Liberdade Lisboa Antunes Rua da Prata Lisboa Costa Av. Aliados Porto Pereira Av. da Liberdade Lisboa Nunes Rua Forte Almada
  42. Chaves na relação titular • Quais as chaves candidatas? cliente_nome conta_numero Silva A-102 Antunes A-101 Antunes A-305 Costa A-201 Pereira A-217 Nunes A-222
  43. Chaves Estrangeiras • Uma chave estrangeira é uma conjunte de atributos que referencia a chave primária (ou chave candidata) de outra tabela • Obriga a que um valor que apareça numa relação apareça igualmente numa segunda relação • Exemplo: Se “Lumiar” é o nome de uma agência que aparece nos tuplos de uma relação conta, então existe obrigatoriamente um tuplo na relação agências com valor “Lumiar”
  44. Exemplos de Chaves Estrangeiras conta_numero agencia_nome saldo A-102 Lumiar 500 A-217 Campolide 1000 A-222 Caparica 1500 A-201 Campanhã 700 cliente_nome cliente_rua cliente_cidade Silva Av. da Liberdade Lisboa Antunes Rua da Prata Lisboa Costa Av. Aliados Porto Pereira Av. da Liberdade Lisboa Nunes Rua Forte Almada cliente_nome conta_numero Silva A-102 Antunes A-101 Antunes A-305 Costa A-201 Pereira A-217 Nunes A-222
  45. Base de Dados SQL 2018/2019
  46. Sumário • Linguagem de Definição de Dados • Criar Base de Dados • Popular Base de Dados • Trabalho prático • Linguagem de Manipulação de Dados • Query • Trabalho prático
  47. Base de Dados exemplo • conta(conta_numero, agencia_nome, saldo) • agencia(agencia_nome, agencia_cidade) • cliente(cliente_nome, cliente_rua, cliente_cidade) • emprestimo(emprestimo_numero, agencia_nome, quantia) • titular(nome_cliente, conta_numero) • devedor(nome_cliente, emprestimo_numero)
  48. Linguagem de Definição de Dados • Permite a especificação não só do conjunto de relações como também a informação sobre cada relação incluindo: • O esquema de cada relação • O domínio de valores associados a cada atributo • Restrições de integridade • O conjunto de índices a manter para cada relação • Informação de segurança e autorização sobre cada relação • A estrutura física de armazenamento de uma relação no disco
  49. Tipos de domínios em SQL • char(n) – string de caracteres de tamanho fixo, tamanho n especificado pelo utilizador • Varchar(n) – string de comprimento variável com número máximo de caracteres n especificado pelo utilizador • Integer – inteiro • Numeric(p,d) – número de virgula fixa, com precisão do número de digitos p e d especificado pelo utilizador • … muitos outros
  50. Criação de Tabelas • Em SQL uma relação é definida usando o comando create table: CREATE TABLE r ( A1 D1, A1 D2, …, An Dn, constraint1, …, constraintm ) • r é o nome da relação • cada Ai é um atributo no esquema da relação r • Di é o tipo de valores no domínio do atributo Ai CREATE TABLE agencia ( agencia_nome char(15), agencia_cidade char(30) )
  51. Restrições de Integridade • Assegurar valores não nulos: not null • Definir identificador: primary key (A1, …, An) CREATE TABLE agencia ( agencia_nome CHAR(15), agencia_cidade CHAR(30) NOT NULL, PRIMARY KEY (agencia_nome) ) • Chave primária implica que atributo não é null
  52. Apagar e Alterar Tabelas • O comando drop table apaga toda a informação da relação DROP TABLE r • O comando alter table é usado para adicionar ou remover atributos de uma relação já existente ALTER TABLE r ADD A D ALTER TABLE r DROP A • Onde A é o nome do atributo e D o dominio do atributo • Ao adicionar um atributo, este assumirá o valor null para todos os tuplos já existentes • A remoção de atributos não é suportada por muitos sistemas de BD
  53. Inserção de Tuplos • O comando insert into permite inserir novos tuplos na tabela • Inserir um novo tuplo na tabela conta: INSERT INTO conta VALUES (‘A-9732’, ‘Campolide’, 1200) Ou INSERT INTO conta (agencia_nome, saldo, conta_numero) VALUES (‘Campolide’, 1200, ‘A-9732’)
  54. Classroom: TP_Folha1
  55. Estrutura Básica de uma Query • O formato típico de uma query SQL é: SELECT A1, A2, …, An FROM r1, r2, …, rm WHERE P • Ai representa um atributo • Ri representa uma relação • P é o predicado • O resultado de uma query é uma relação
  56. A clausula SELECT • O comando SELECT lista os atributos desejados no resultado da query • Exemplo: encontrar nomes de todas as agências na relação empréstimo: SELECT agencia_nome FROM emprestimo • Nota: As palavras-chave SQL são case insensitive
  57. A clausula SELECT (cont) • O SQL permite duplicados nas relações assim como no resultado da query • Para forçar a eliminação de resultados duplicados, podemos usar a palavra chave DISTINCT na query • Exemplo: encontrar nomes de todas as agências na relação empréstimo e remover duplicados: SELECT DISTINCT agencia_nome FROM emprestimo
  58. A clausula SELECT (cont) • Um asterisco no comando select significa “todos os atributos” SELECT * FROM emprestimo • O comando SQL pode conter expressões aritméticas que envolvam operações +,-,* e / operando sobre constants e/ou atributos de tuplos SELECT empréstimo_numero, quantia*100 FROM emprestimo • Retorna uma relação com o valor da quantia multiplicado por 100.
  59. A clausula WHERE • A clausula WHERE especifica as condições que o resultado deve satisfazer • Exemplo: encontrar todos os número de empréstimo para empréstimos feitos na agência de Campolide e cuja quantia é superior a 1200€ SELECT empréstimo_numero FROM empréstimo WHERE agencia_nome = ‘Campolide’ AND quantia > 1200 • Resultados de comparações podem ser combinados através de operadores lógicos AND, OR ou NOT • As comparações podem ser aplicadas ao resultado de expressões aritméticas
  60. A clausula WHERE • O SQL possui um operador de comparação BETWEEN • Exemplo: encontrar todos os número de empréstimo para empréstimos cuja quantia é superior a 1200€ e menor que 5000€ SELECT empréstimo_numero FROM empréstimo WHERE quantia BETWEEN 1200 AND 5000
  61. A clausula FROM • A cláusula FROM lista as relações envolvidas na query • Corresponde ao produto cartesiano da operação • Exemplo: encontrar produto cartesiano titular x emprestimo SELECT * FROM titular, empréstimo
  62. A clausula FROM (cont) • Exemplo: encontrar nome, número de empréstimo e quantia de todos os clientes que têm um empréstimo na agência de Campolide SELECT cliente_nome, empréstimo.empréstimo_numero, quantia FROM devedor, empréstimo WHERE empréstimo.empréstimo_numero = devedor.empréstimo_numero AND agencia_nome = ‘Campolide’
  63. Renomear • O SQL permite renomear as relações e atributos utilizando a clausula AS: nome_antigo AS novo_nome • Exemplo: encontrar nome, número de empréstimo e quantia de todos os clientes; muda o nome da coluna emprestimo_numero para emprestimo_id SELECT cliente_nome, empréstimo.empréstimo_numero AS empréstimo_id, quantia FROM devedor, empréstimo WHERE empréstimo.empréstimo_numero = devedor.empréstimo_numero
  64. Variáveis Tuplo • Variáveis de tuplo são definidas na clausula FROM através da utilização (opcional) da cláusula AS: • Exemplo: encontrar nome, número de empréstimo e quantia de todos os clientes que têm empréstimo SELECT D.cliente_nome, D.empréstimo_numero, E.quantia FROM devedor AS D, empréstimo AS E WHERE E.empréstimo_numero = D.empréstimo_numero
  65. Operadores de Strings • O operador LIKE permite pesquisar strings utilizando padrões descritos com dois caracteres especiais • Percentagem (%) – coincide com qualquer substring • Underscore (_) – coincide com qualquer caracter • Exemplo: encontrar nome de todos os clientes cujo nome da rua contenha Liberdade SELECT cliente_nome FROM cliente WHERE cliente_rua LIKE ‘%Liberdade%’ • O SQL suporta muitas outras operações sobre strings
  66. Ordenação de Tuplos • Listar por ordem alfabética os nome de todso os clientes com um empréstimo na agência de Campolide SELECT DISTINCT D.cliente_nome FROM devedor AS D, empréstimo AS E WHERE E.empréstimo_numero = D.empréstimo_numero AND agencia_nome = ‘Campolide’ ORDER BY cliente_nome • Para especificar ordem o sentido da ordem podemos usar a palavra DESC ou ASC (default) ORDER BY cliente_nome DESC
  67. Classroom: TP_Folha2
Anúncio