Upload
vudang
View
226
Download
0
Embed Size (px)
Citation preview
1
Bases de Dados
Conversão para Modelo Relacional
2
Modelo Entidade-Associação
IST ▪ DEI ▪ Bases de Dados
2
3IST ▪ DEI ▪ Bases de Dados
Conversão de entidades
� Entidade forte converte-se numa tabela
loan = (loan_number, amount)
• atributos simples mantêm-se
• chave é a mesma da entidade
4IST ▪ DEI ▪ Bases de Dados
Conversão de entidades
� Entidade fraca inclui uma coluna extra com a chave
primária da entidade identificadora
payment = (loan_number, payment_number,
payment_date, payment_amount )
• dispensa conversão da associação identificadora!
3
5IST ▪ DEI ▪ Bases de Dados
Conversão de associações
� Associação “muitos-para-muitos” converte-se numa
tabela com chaves primárias e atributos descritivos
borrower = (customer_id, loan_number)
• chave primária da tabela é união das chaves
� Associações n-árias são tratadas de modo semelhante
▫ se houver seta essa entidade não faz parte da chave
6IST ▪ DEI ▪ Bases de Dados
Conversão de associações
� Associações “um-para-muitos” ou “muitos-para-um”
• pode não ser necessário criar uma tabela
• exemplo
▫ existe participação total do lado “muitos”
▫ adicionar o atributo branch_name à tabela account
4
7IST ▪ DEI ▪ Bases de Dados
Conversão de associações
� Associação “um-para-um”
• pode não ser necessário criar uma tabela
• qualquer um dos lados pode ter uma chave
estrangeira
▫ se a participação for parcial, aparecem nulls
8IST ▪ DEI ▪ Bases de Dados
Conversão de atributos
� Atributos compostos
• representados como atributos individuais
• exemplo
▫ customer com name composto (first_name e last_name)
▫ resulta em name.first_name e name.last_name
5
9IST ▪ DEI ▪ Bases de Dados
Conversão de atributos
� Atributos multi-valor
• necessária tabela adicional ≈ “um-para-muitos”
• chave primária da entidade E e valor do atributo M
• exemplo: dependentes
employee_dependent_names = (employee_id, dname)
• para um funcionário com chave primária 123-45-
6789 e dependentes João e Teresa
▫ ('123-45-6789', 'João') e ('123-45-6789', 'Teresa')
10IST ▪ DEI ▪ Bases de Dados
Conversão de especialização/generalização
� Método 1
• tabela para a entidade genérica
• tabela para cada entidade específica, com chave
para a entidade genérica
person(name, street, city)
customer(name, credit_rating)
employee(name, salary)
• desvantagem: informação dispersa
6
11IST ▪ DEI ▪ Bases de Dados
Conversão de especialização/generalização
� Método 2
• repetir os atributos em cada tabela
person(name, street, city)
customer(name, street, city, credit_rating)
employee(name, street, city, salary)
• se a especialização for total, super-classe parece
dispensável
▫ mas continua a ser necessária para chaves estrangeiras!
• desvantagem: redundância
12IST ▪ DEI ▪ Bases de Dados
Conversão de agregação
� Criar uma nova tabela, contendo:
• chave primária da associação agregada
• chave primária da entidade associada
• atributos descritivos
7
13IST ▪ DEI ▪ Bases de Dados
Conversão de agregação
manages (employee_id, branch_name, title, manager_name)
14IST ▪ DEI ▪ Bases de Dados
Conversão de agregação
� Podia evitar-se uma nova tabela guardando
manager_name em works_on
• admitindo que manager_name pode ser null
8
Bases de Dados
Modelo Relacional
16IST ▪ DEI ▪ Bases de Dados
Bases de dados relacionais
� Estrutura de uma base de dados relacional
• conjunto de tabelas com nome único
• cada tabela guarda entidades desse tipo
� Dentro das tabelas
• cada coluna é um atributo da entidade
• cada linha contém os valores desses atributos
� Cada tabela estabelece uma relação entre um
conjunto de valores
9
17IST ▪ DEI ▪ Bases de Dados
Exemplo
� A relação “conta bancária” (account)
• exemplo de atributos: número, agência, saldo
18IST ▪ DEI ▪ Bases de Dados
Atributos
� Cada atributo tem um domínio
• o conjunto de valores possíveis
� Para o exemplo anterior
• agência – conjunto de todas as localidades
• cada linha é um tuplo (v1 , v2 , v3)
• cada vi tem domínio Di
� Uma relação contem apenas um sub-conjunto de
D1 x D2 x … x Dn
10
19IST ▪ DEI ▪ Bases de Dados
Tuplos
� A relação contém 7 tuplos
� Para o primeiro tuplo t
• t[account_number] = “A-101”
• t[branch_name] = “Downtown”
20IST ▪ DEI ▪ Bases de Dados
Esquema
� Esquema vs. instância
• conteúdo da relação num determinado instante
• analogia com linguagens de programação
▫ relação ≈ variável
▫ esquema da relação ≈ tipo
� Esquema da relação
Account_schema = (account_number, branch_name, balance)
11
21IST ▪ DEI ▪ Bases de Dados
A relação “agência” (branch)
branch_schema = (branch_name, branch_city, assets)
22IST ▪ DEI ▪ Bases de Dados
Atributos comuns
� branch_name é um atributo comum
• forma de associar tuplos de relações distintas
12
23IST ▪ DEI ▪ Bases de Dados
A relação “cliente” (customer)
customer_schema = (customer_name, customer_street, customer_city)
(Nota: neste exemplo não há customer_id e assume-se que a chave é customer_name)
24IST ▪ DEI ▪ Bases de Dados
A relação “titular” (depositor)
depositor_schema = (customer_name, account_number)
13
25IST ▪ DEI ▪ Bases de Dados
A relação “empréstimo” (loan)
loan_schema = (loan_number, branch_name, amount)
26IST ▪ DEI ▪ Bases de Dados
A relação “devedor” (borrower)
borrower_schema = (customer_name, loan_number)
14
27IST ▪ DEI ▪ Bases de Dados
Notas
� A ordem dos tuplos é irrelevante
� Podiam existir valores null
� Assume-se que os clientes não têm nomes iguais
� Assume-se que pode haver clientes com conta mas
sem empréstimo, ou vice-versa, ou nenhuma das
coisas
28IST ▪ DEI ▪ Bases de Dados
Chaves
� Como distinguir tuplos?
• não pode haver 2 tuplos exactamente iguais
• super-chave
▫ o conjunto de atributos que identificam univocamente
• chave candidata
▫ conjunto mínimo de atributos
• chave primária
▫ a chave candidata escolhida
▫ normalmente prefere-se um atributo separado por si só
◦ atenção aos atributos (supostamente) únicos
15
29IST ▪ DEI ▪ Bases de Dados
Chaves estrangeiras
� Chave estrangeira
• referência entre relações