Base de Dados
Diagramas E-A (cont.)
2018/2019
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.
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
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
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
Exemplo
• Qualquer fornecedor fornece qualquer peça a qualquer cliente
Fornecedor Peça Cliente
F1 P1 C1
F2 P1 C2
F2 P2 C1
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
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
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
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
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
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
Solução: Associação Complexa (M:N:P)
• Qualquer fornecedor fornece qualquer peça a qualquer cliente
• Decompor em associações 1:N
Solução: Associação Complexa (M:N:P)
• Qualquer fornecedor fornece qualquer peça a qualquer cliente
Fornecimento
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
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
Solução
• Solução com 3 associações
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)
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?
Exercício 2
• Um modelo conceptual representa autores e a classificação por temas
dos seus livros. Discuta as vantagens:
Associação unária e Papel
• O papel pode ser especificado para evitar ambiguidades
funcionário
supervisiona
supervisor supervisionado
1 N
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
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
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
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)
Resumo
Base de Dados
Modelo Relacional
2018/2019
Sumário
• Estrutura de Bases de Dados Relacionais
• Modelo Relacional
• Estruturas, atributos
• Base de dados relacional
• Chaves
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
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
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
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
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
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
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)
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)
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
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, …)
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
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
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
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
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”
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
Base de Dados
SQL
2018/2019
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
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)
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
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
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)
)
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
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
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’)
Classroom: TP_Folha1
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
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
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
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.
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
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
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
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’
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
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
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
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
Classroom: TP_Folha2

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

  • 1.
    Base de Dados DiagramasE-A (cont.) 2018/2019
  • 2.
    TPC1 • Numa empresacada 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) Desenheo 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 fornecedorfornece 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 • Relacionammais 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 Grau1: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 Grau1: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 (FanTrap) • 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 (ChasmTrap) • E se um empregado pertencer a uma direção mas não pertencer a um departamento? Chasm Trap 1:N/1:N
  • 17.
  • 18.
    Exercício 1 • Numacompanhia 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 • Ummodelo conceptual representa autores e a classificação por temas dos seus livros. Discuta as vantagens:
  • 21.
    Associação unária ePapel • 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 (executadospor 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 • Usaratributos 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.
  • 27.
    Base de Dados ModeloRelacional 2018/2019
  • 28.
    Sumário • Estrutura deBases de Dados Relacionais • Modelo Relacional • Estruturas, atributos • Base de dados relacional • Chaves
  • 29.
    Modelo Relacional • Criadoem 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 umaRelaçã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 • Consideremosa 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 DadosRelacional • 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 dedados 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çãocliente • 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çãotitular • 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 • Umachave 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 ChavesEstrangeiras 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.
  • 46.
    Sumário • Linguagem deDefiniçã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 Dadosexemplo • 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çãode 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íniosem 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 AlterarTabelas • 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.
  • 55.
    Estrutura Básica deuma 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 SQLpermite 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áveisde 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.