O documento discute diagramas entidade-associação (E-A) e sua aplicação em modelagem de banco de dados. Ele descreve como habilitações de empregados estão associadas a tipos de máquinas e como um diagrama E-A pode representar essas associações.
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
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
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)
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
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
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’)
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