31
© 2012 IST Sistemas de Informação e Bases de Dados 2012/2013 Modelo Relacional Alberto Sardinha

Sistemas de Informação e Bases de Dados 2012/2013 · ©"2012"IST" Contract_Emps name ssn Employees lot hourly_wages ISA Hourly_Emps contractid hours_worked Opção 2 RI: Hourly_Emps

Embed Size (px)

Citation preview

©  2012  IST  

Sistemas de Informação e Bases de Dados 2012/2013

Modelo Relacional

Alberto Sardinha

©  2012  IST  

Sumário

•  Modelo Relacional – Relação, tabela – Restrições domínio, chave e integridade

referencial •  Conversão Modelo EA para Modelo

Relacional

1  

©  2012  IST  

Conjunto de entidades para relações

•  Conjunto de entidades (fortes) origina uma relação no esquema relacional –  atributos do conjunto de entidades mapeados

em atributos com o mesmo nome na relação –  chave primária é a mesma do conjunto de

entidades

2  

Employees(ssn: string, name: string, lot: integer)  

Employees

ssn name

lot

©  2012  IST  

Atributos Multi-valor, Compostos e Derivados

3  

Employees

lot

name ssn

phone

age

Date_of_birth

Address

Street City

Employees(ssn, name, lot, date_of_birth, street, city) Phone(ssn, phone_number)

ssn: FK(Employees)

•  Mul$-­‐valor:  tabela  adicional  

•  Compostos:  apenas  os  atributos  externos  são  representados  

•  Derivados:  não  se  representam  

©  2012  IST  

Conjunto de associações para relações (1)

•  Conjunto de associações “muitos-para-muitos” origina uma relação com esquema composto por: –  chave constituída pelas chaves primárias das

relações que correspondem às entidades participantes

–  atributos descritivos do conjunto de associações

–  chaves estrangeiras que correspondem às chaves primárias das entidades participantes

4  

©  2012  IST  

Conjunto de associações para relações (1)

5  

dname

budget did

since

lot

name

ssn

Manages Employees Departments

Employees(ssn, name, lot) Departments(did, dname, budget) Manages(ssn, did, since) ssn: FK(Employees) did: FK(Departments)  

©  2012  IST  

Employees(ssn, name, lot) Reports_To(supervisor_ssn, subordinate_ssn) supervisor_ssn: FK(Employees) subordinate_ssn: FK(Employees) Reports_To

lot

name

Employees

subor-dinate

super-visor

ssn

Conjunto  de  associações  para  relações  (2)    

©  2012  IST  

Works_In4(ssn, did, from, to, obs) ssn: FK(Employees) did: FK(Departaments) from, to: FK(Duration)

dname budget did

name

Departments

ssn lot

Employees Works_In4

Duration from to

obs

Conjunto  de  associações  ternárias  para  relações    

©  2012  IST  

Associações com Restrições de Chave

•  Primeira abordagem: – A associação origina uma nova relação em

que •  a chave primária é a chave da relação que

corresponde à entidade com restrição; •  chaves estrangeiras correspondem às chaves

primárias das entidades participantes

8  

dname budget did

since

lot name

ssn

Manages Employees Departments

©  2012  IST  

Employees(ssn, name, lot) Departments(did, dname, budget) Manages(did, ssn, since) ssn: FK(Employees) did: FK(Departments)

dname

budget did

since

lot

name

ssn

Manages Employees Departments

Abordagem 1

©  2012  IST  

Associações com Restrições de Chave

•  Segunda abordagem: – Adicionar os atributos que compõem a

chave da entidade sem restrição como chave estrangeira da relação que corresponde à entidade com restrição

– E adicionar os atributos da associação

10  

©  2012  IST  

Employees(ssn, name, lot) Departments(did, dname, budget, ssn, since) ssn: FK(employees)

dname

budget did

since

lot

name

ssn

Manages Employees Departments

Abordagem 2

©  2012  IST  

Vantagens e Desvantagens

12  

Employees(ssn, name, lot) Departments(did, dname, budget) Manages(ssn, did, since) ssn: FK(Employees) did: FK(Departments)

•  MAIS  uma  relação  •  Algumas  consultas  (interrogações)  precisam  juntar  relações  (joins)  

•  Evita  valores  nulos  

Employees(ssn, name, lot) Departments(did, dname, budget, ssn, since) ssn: FK(employees)

•  Não  consegue  evitar  valores  nulos  (null)  

•  Mais  eficiente  •  Menos  uma  relação  •  Sem  necessidade  de  joins  em  consultas    

©  2012  IST  

Restrições de Participação Duas abordagens:

1.  Adicionar a restrição NOT NULL à chave estrangeira

2.  Acrescentar uma RI •  Menos eficiente

©  2012  IST  

Departments(did, dname, budget, ssn, since)

ssn: FK(Employees) NOT NULL (ssn)

dname

budget did

since

lot

name

ssn

Manages Employees Departments

Abordagem 1

©  2012  IST  

Manages(did, ssn, since) ssn: FK(Employees) did: FK(Departments)

RI: Todos os departamentos têm que ter um gestor associado.

dname

budget did

since

lot

name

ssn

Manages Employees Departments

Abordagem 2

©  2012  IST  

Entidades Fracas

•  Conjunto de entidades fracas origina uma relação que tem – uma chave composta por a chave da

relação que corresponde à entidade forte e a chave parcial

16  

©  2012  IST  

Entidades Fracas

•  Adicionar RI – Quando um tuplo da relação correspondente à

entidade forte é eliminado, os correspondentes tuplos da relação correspondente à entidade fraca também o são.

•  Dispensa conversão da associação identificadora em tabela.

17  

©  2012  IST  

Entidades Fracas

Dept_Policy(ssn, pname, age, cost) ssn: FK(Employees)

RI: Quando um empregado fôr removido da base de dados, os seus dependentes também o devem ser

lot

name

age pname

Dependents Employees

ssn

Policy

cost

©  2012  IST  

Beneficiary

age pname

Dependents

policyid cost

Policies

Purchaser

name

Employees

ssn lot

©  2012  IST  

Policies (policyid, cost, ssn) ssn: FK(Employees) NOT NULL(ssn)

Dependents(policyid, pname, age)

policyid: FK(Policies) RI: Quando uma apólice fôr removida da base de dados, os seus dependentes também o devem ser.

Beneficiary

age pname

Dependents

policyid cost

Policies

Purchaser

name

Employees

ssn lot

©  2012  IST  

Beneficiary

age pname

Dependents

policyid cost

Policies

Purchaser

name

Employees

ssn lot

©  2012  IST  

Dependents(ssn, policyid, pname, age) ssn, policyid: FK(Policies)

RI: Quando um empregado fôr removido da base de dados, as suas apólices e dependentes que lhe correspondem também o devem ser.

Beneficiary

age pname

Dependents

policyid cost

Policies

Purchaser

name

Employees

ssn lot

©  2012  IST  

Generalizações

•  Opção 1 – Mapear cada conjunto de entidades e sub-

classes em relações distintas •  Sempre aplicável •  Relação da sub-classe tem como chave primária:

–  a chave da relação correspondente à super-classe que tb é chave estrangeira

•  RI: se um tuplo da relação correspondente à super-classe é removido, o respectivo tuplo da relação da sub-classe tb o é

–  Restrições de cobertura e disjunção como RIs

23  

©  2012  IST  

Employees(ssn, name, lot) Contract_Emps(ssn, contractid)

ssn: FK(Employees) Hourly_Emps(ssn, hours_worked, hourly_wages)

ssn: FK(Employees) RI1: Quando se elimina um empregado da BD tb tem que se eliminar o tuplo correspondente de Hourly_Emps/Contract_Emps RI2(disjoint): Um empregado ou é contratado ou recebe à hora

Contract_Emps

name ssn

Employees

lot

hourly_wages ISA

Hourly_Emps

contractid

hours_worked

Opção 1

©  2012  IST  

Generalizações •  Opção 2

– Mapear apenas as sub-classes em relações distintas •  Ambas têm os mesmos atributos da super-classe •  Mais eficiente para interrogações a sub-entidades

específicas •  Apenas aplicável quando existe cobertura total •  Quando há RI “overlaps” pode haver dados

duplicados

–  Restrições de cobertura e disjunção como RIs

25  

©  2012  IST  

Contract_Emps

name ssn

Employees

lot

hourly_wages ISA

Hourly_Emps

contractid

hours_worked

Opção 2 RI: Hourly_Emps AND Contract_Emps COVER Employees Contract_Emps(ssn, name, lot, contractid) Hourly_Emps(ssn, name, lot, hours_worked, hourly_wages) RI(disjoint): Não pode existir o mesmo empregado (mesmo ssn) em Hourly_Emps e Contract_Emps

©  2012  IST  

Agregações

•  É um processo semelhante ao aplicado às associações

•  Primeiro mapeia-se o interior da agregação

©  2012  IST  

budget did pid

started_on

pbudget dname

until

Departments Projects Sponsors

Employees

Monitors

lot name

ssn

since

©  2012  IST  

Sponsors(pid, did, since)

pid: FK(projects) did: FK(Departments)

Monitors(ssn, pid, did, until)

ssn: FK(Employees) pid, did: FK(Sponsors)

budget did pid

started_on

pbudget dname

until

Departments Projects Sponsors

Employees

Monitors

lot name

ssn

since

©  2012  IST  

Sumário

•  Modelo Relacional •  Conversão Modelo EA para Modelo

Relacional •  Próxima aula: Linguagem SQL

30