Você está na página 1de 40

O Modelo Relacional

Bases de Dados (CC2005)


Departamento de Ciência de Computadores
Faculdade de Ciências da Universidade do Porto

Eduardo R. B. Marques — DCC/FCUP


Fonte: Preston Hunter e Jessie Christensen (database-genius.com)
Bases de Dados O Modelo Relacional 2
Modelação lógica de BDs

Desenho lógico de BDs


A modelação conceptual, como vimos para o modelo ER, define
um modelo para a BD independente do tipo de base de dados.
Um modelo lógico considera já o tipo de BD em causa, sem
necessariamente ser dependente do SGBD.
Modelo Relacional
Modelo lógico para BDs relacionais, baseado no conceito de
relação, também chamado de tabela.
ER > Modelo relacional: Entidades-tipo e relacionamentos no
modelo ER podem ser mapeados em tabelas no modelo
relacional.
Modelo relacional > SQL: um modelo relacional pode ser
depois ser concretizado num SGBD usando a linguagem SQL.

Bases de Dados O Modelo Relacional 3


Conceitos base

Bases de Dados O Modelo Relacional 4


Conceito de relação

Atributos ALUNO Nome


(colunas) NumMec NumCC Nome Curso

{
798764544 12345678 João Pinto LCC
Registos 345673451 17222303 Carlos Semedo MIERSI
(linhas) 487563546 12021999 Maria Silva LBIO
452212348 18392100 Pedro Costa LMAT

Uma relação é um conjunto de tuplos, que pode ser representada na forma de


tabela, com um esquema associado definido por um nome e sequência de
atributos.
Cada tuplo, também chamado registo ou linha, é definido por uma sequência
de valores para atributos da tabela.
Não existe em si uma ordem associada aos tuplos, embora a ordem em que
poderão aparecer numa representação textual/visual resultante de uma
consulta à BD possa ser relevante (como veremos depois).
Bases de Dados O Modelo Relacional 5
Terminologia: relação vs. tabela
Em termos estritos …
Uma relação é um conjunto de tuplos não-ordenados no
sentido matemático do termo.
Uma tabela é um modelo para a representação física de uma
relação em um SGBD.

Vamos no entanto usar o termo tabela para a noção de


relação:
para evitar alguma confusão possível entre a noção de
relacionamento (no modelo ER) e a de relação
… e por ser também o termo usado para designar/implementar
o caso base de uma relação em SGBDs relacionais

Bases de Dados O Modelo Relacional 6


Definições e notação genérica
Uma tabela, denotada por T(A1, …, An) tem nome T e atributos A1, …, An
por ex.
ALUNO(NumMec, NumCC, Nome, Curso)
A cada atributo Ai está associado um domínio de valores dom(Ai). Os
valores no domínio de um atributo são atómicos e podem incluir o
valor especial NULL para denotar a ausência de valor definido, i.e.,
podemos ter NULL ∈ dom(Ai). Contrariamente ao modelo ER, no modelo
relacional os atributos não podem ser compostos ou multi-valor.

Um registo r de uma tabela T(A1, …, An) é um tuplo


r = (v1, …, vn)
tal que vi ∈ dom(Ai). Cada valor vi pode ser denotado por r[Ai].

Bases de Dados O Modelo Relacional 7


Superchave, chave e chave primária
Seja T(A1, …, An) uma tabela.
Um subconjunto K = { K1, …, Km } dos atributos A1, …, An diz-se uma superchave
se é garantido que para qualquer par de registos distintos r1 e r2 temos r1[K] ≠
r2[K].
O tuplo formado por valores de K nunca é igual para 2 registos distintos
Uma superchave K diz-se uma chave se for um conjunto mínimo de atributos,
isto é, ∀i K \ { Ki } não é uma superchave.
Removendo um dos atributos de K, esta deixa de ser uma super-chave, ou seja, já não
permite distinguir unicamente registos.
Uma tabela pode ter várias chaves, que se dizem chaves candidatas. De
entre estas, é comum escolher uma como chave primária que deverá ser a
mais “natural” para identificar os registos de forma única no universo em
questão.
O termo chave secundária é muitas vezes usado para designar uma chave
candidata que não é a chave primária.

Bases de Dados O Modelo Relacional 8


Superchave, chave e chave primária (cont.)

Tabela:
ALUNO(NumMec, NumCC, Nome, Curso)
Superchaves: qualquer conjunto de atributos que inclua
NumMec ou NumCC
{NumMec}, {NumCC}, {NumMec, NumCC}, {NumCC, Nome}, {NumMec,
NumCC, Curso}
Chaves candidatas — apenas duas possibilidades:
{NumMec}
{NumCC}
Chaves primária — NumMec é a escolha mais “natural” para
o universo em questão (diz respeito intrinsecamente ao
universo).

Bases de Dados O Modelo Relacional 9


Notação para tabelas

ALUNO(NumMec, NumCC, Nome, Curso)

ALUNO
NumMec
NumCC
Nome
Curso

Chave primária aparece sublinhada.

Bases de Dados O Modelo Relacional 10


Chave externa (“foreign key”)

Um atributo (ou conjunto de atributos) FK de uma


tabela T é uma chave externa para a chave primária
K de uma tabela T’ se para qualquer registo r em T tal
que r[FK] ≠ NULL então existe um registo r’ em T’ tal
que r[FK] = r’[K] .

Esta restrição é conhecida por integridade


referencial, que discutiremos em pormenor mais
adiante.

Bases de Dados O Modelo Relacional 11


Representação de chaves externas

ALUNO INSCRIÇÃO CADEIRA


NumMec NumMec CodCadeira
NumCC CodCadeira Nome
Nome Docente
Curso
Na representação visual de um esquema relacional, representam-se as
referências usando uma ligação (seta ou arco) dirigida entre chave externa e
chave primária.
INSCRIÇÃO tem 2 chaves externas: NumMec refere-se à chave primária de ALUNO e
CodCadeira à chave primária de CADEIRA . Observe que o par (NumMec, CodCadeira) é
por sua vez é a chave primária de INSCRIÇÃO.

Bases de Dados O Modelo Relacional 12


Representação de esquema — variante
ALUNO(NumMec, NumCC, Nome, Curso)

INSCRIÇÃO(NumMec, CodCadeira)

CADEIRA(CodCadeira, Nome,Docente)

Disposição horizontal usada no livro de referência: “Fundamentals of


database systems, 7th edition”.
Tende a ser menos usada na prática para representação de esquemas.

Bases de Dados O Modelo Relacional 13


Chaves externas — exemplo de dados

ALUNO
NumMec NumCC Nome Curso

798764544 12345678 João Pinto LCC

345673451 17222303 Carlos Semedo MIERSI


INSCRIÇÃO
487563546 12021999 Maria Silva LBIO
NumMec CodCad
452212348 18392100 Pedro Costa LMAT
798764544 12347
345673451 12347 CADEIRA
CodCad Nome Docente
798764544 34248
12347 Bases de Dados José Aguiar Mota
452212348 32439
34248 Álgebra Maria das Dores

32439 Cálculo I Carlos Duarte

Bases de Dados O Modelo Relacional 14


Chaves externas — outros exemplos
DEPARTAMENTO FUNCIONÁRIO

IdDep IdFunc

Nome Nome

Director Departamento

… Supervisor ?

Neste exemplo as chaves externas não fazem parte da chave primária.


Se nem todo o funcionário tem supervisor, podemos ter valores NULL para
o atributo FUNCIONÁRIO.Supervisor.
Nota: de forma similar ao modelo ER denotamos atributos opcionais com ? .

Bases de Dados O Modelo Relacional 15


Chaves externas — outros exemplos (cont.)
DEPARTAMENTO FUNCIONÁRIO
IdDep IdFunc
Nome Nome
Director Departamento
… Supervisor ?

DEPARTAMENTO FUNCIONÁRIO
IdDep Nome Director … IdFunc Nome Departamento Supervisor? …
1 Contabilidade 1 … 1 Carlos Semedo 1 NULL …
2 Produção 4 … 2 Maria Silva 1 1 …
3 Recursos Humanos 6 … 3 Pedro Costa 1 1 …
4 José Neto 2 NULL …
5 António Meireles 2 4 …
6 Fátima Silva 3 NULL …

Bases de Dados O Modelo Relacional 16


Dados consistentes?
ALUNO
NumMec NumCC Nome Curso

798764544 12345678 João Pinto LCC


? 17222303 Carlos Semedo MIERSI
INSCRIÇÃO 345673451
487563546 12021999 Maria Silva LBIO
NumMec CodCad
452212348 ABCDEF Pedro Costa LMAT
111111111 12347
345673451 12347 ?
CADEIRA
798764544 34248
CodCad Nome Docente
452212348 12347
12347 Bases de Dados José Aguiar Mota
Esta BD não faz Álgebra Maria das Dores
34248
sentido. Quais são os
? 34248 Cálculo I Carlos Duarte
problemas? O que está
em causa em cada ? NULL Programação Alberto Manuel
caso?
Bases de Dados O Modelo Relacional 17
Restrições de integridade numa BD relacional

Integridade de domínio
O valor de um atributo faz parte do domínio do atributo.
Integridade de entidade
O valor da chave primária não pode ser NULL (sob pena de não
conseguirmos identificar registos).
Integridade de chave
Dois registos da mesma tabela não podem ter valores iguais
para uma chave, em particular para a chave primária.
Integridade referencial
Um valor definido (≠ NULL) para um atributo que seja chave
externa deve referir-se a uma chave primária da tabela a que a
chave externa se refere.
Bases de Dados O Modelo Relacional 18
Violação de restrições de integridade
ALUNO
integridade NumMec NumCC Nome Curso
referencial 798764544 12345678 João Pinto LCC
? 17222303 Carlos Semedo MIERSI
INSCRIÇÃO 345673451
487563546 12021999 Maria Silva LBIO
NumMec CodCad
452212348 ABCDEF Pedro Costa LMAT
111111111 12347
345673451 12347 ? integridade de domínio
CADEIRA
798764544 34248
CodCad Nome Docente
452212348 12347
12347 Bases de Dados José Aguiar Mota
integridade 34248 Álgebra Maria das Dores
de chave ?
34248 Cálculo I Carlos Duarte
integridade ? NULL Programação Alberto Manuel
de entidade

Bases de Dados O Modelo Relacional 19


Estado e operações sobre uma base de dados
Esquema da BD = { Esquema de tabelas }
Estado da BD = { Conteúdo das tabelas }
O estado da BD é mutável sendo normal considerar as seguintes
operações nucleares para alterar o seu estado:
INSERE(T, r) : insere novo registo r na tabela T
REMOVE(T,k): remove registo (que já exista) com chave primária k
de T.
ACTUALIZA(T,k,r): actualiza registo com chave primária k em T pelo
registo r com a mesma chave primária (pode ser vista como uma
remoção seguida de uma inserção, mas com efeito atómico).
Nota: a estas operações irão corresponder às formas mais simples
dos comandos SQL INSERT, DELETE, e UPDATE (a cobrir em próximas
aulas).
Bases de Dados O Modelo Relacional 20
Operações e restrições de integridade

As operações consideradas podem ser inválidas se


violarem restrição de integridade:
INSERE(T, r) : insere novo registo r na tabela T — pode violar
qualquer um dos tipos de integridade (domínio, entidade,
chave, referencial).
REMOVE(T,k): remove registo (que já exista) com chave
primária k de T — pode violar a integridade referencial se
existir uma referência a k por via de uma chave externa.
ACTUALIZA(T,k,r): actualiza registo com chave primária k em
T pelo registo r com a mesma chave primária — pode violar
qualquer um dos tipos de restrição.

Bases de Dados O Modelo Relacional 21


Exemplos de operações ALUNO

inválidas NumMec NumCC Nome Curso


798764544 12345678 João Pinto LCC
345673451 17222303 Carlos Semedo MIERSI
INSCRIÇÃO
487563546 12021999 Maria Silva LBIO
NumMec CodCad
452212348 18392100 Pedro Costa LMAT
798764544 12347
345673451 12347 CADEIRA
798764544 34248 CodCad Nome Docente
452212348 32439 12347 Bases de Dados José Aguiar Mota
34248 Álgebra Maria das Dores
32439 Cálculo I Carlos Duarte
INSERE(ALUNO, r) tal que r[NumMec] = 798764544 violaria integridade de chave p/ALUNO.
REMOVE(CADEIRA, 32439) violaria integridade referencial p/ INSCRIÇÃO.CodCad.
INSERE(INSCRIÇÃO, r) com r[NumMec] = 999999 violaria integridade referencial p/
INSCRIÇÃO.NumMec.
ACTUALIZA(ALUNO,798764544, r) com r[NumCC] = ‘ABCDE’ violaria a integridade de domínio p/
ALUNO.NumCC.
INSERE(ALUNO, r) com r[NumMec] = NULL violaria a integridade de entidade p/ALUNO.
Bases de Dados O Modelo Relacional 22
SGBDs e restrições de integridade

Um SGBD deverá rejeitar uma operação que viole


restrições de integridades, assinalando o erro.
SGBDs maduros normalmente suportam todos os tipos de
restrições de integridade que mencionamos (domínio,
entidade, chave, referencial).
Há no entanto excepções que se prendem com escolhas
feitas p/implementação de SGBDs, tipicamente por
questões de complexidade de implementação/contexto de
uso/desempenho. Por exemplo:
SQLite não valida restrições de domínio.
Versões antigas de MySQL não tinham suporte p/integridade
referencial.

Bases de Dados O Modelo Relacional 23


Conversão do modelo ER
para o modelo relacional

Bases de Dados O Modelo Relacional 24


Modelo ER → Modelo Relacional
Perspectiva geral
Entidades-tipo e relacionamentos são convertidos em tabelas.
Mapeamento de entidades-tipo em tabelas
Passa pelo mapeamento directa de atributos, excepto no caso de atributos
multi-valor em que precisamos de recorrer a “tabelas auxiliares”.
Mapeamento de relacionamentos — conforme a cardinalidade e
participação das entidades-tipos de um relacionamentos:
Relacionamentos podem resultar em uma tabela nova para o
relacionamento ou na adição de atributos às tabelas correspondentes a
entidade-tipo.
Chaves primárias, externas são definidas em cada caso apropriadamente.
Atributos de relacionamentos têm de ser também considerados no
mapeamento.

Bases de Dados O Modelo Relacional 25


Mapeamento de entidades-tipo

Entidade-tipo E >>> tabela T


Nome de E >>> nome de T
Chave de E >>> chave primária de T
Atributos derivados de E não são mapeados.
Atributo simples de E >>> atributo simples de T
Sub-atributos de atributo composto de E >>> atributos de T
Atributos opcionais levam simplesmente à inclusão de NULL
no domínio do atributos. Mantemos a notação Opcional? .
Atributo multi-valor MV de E >>> tabela auxiliar MV com
chave externa referenciando a chave primária de T. Chave
externa e restantes atributos definem a chave de MV.

Bases de Dados O Modelo Relacional 26


Entidades-tipo — atributos de valor único
E >>> T
PESSOA
NumCC
Nome
Sexo
DataNasc
MRua
MNum
MAndar ?
MLocalidade
MCodPostal

Bases de Dados O Modelo Relacional 27


Entidades-tipo — atributos multivalor
NumCC
E >>> T
… NUM_TELEF
PESSOA NumCC
PESSOA NumCC NumTelef

HABILITAÇÃO
NumTelef Habilitação
NumCC
Grau
Instituição
Grau Ano Ano
Instituição
É criada nova tabela “auxiliar” com chave externa
referenciando a chave primária de T. Chave externa e restantes
atributos definem a chave primária da tabela auxiliar.
Bases de Dados O Modelo Relacional 28
Mapeamento de relacionamentos M:N
T1
E1 FUNCIONÁRIO NumFunc
FUNCIONÁRIO
M TRABALHA_PARA NumFunc
TRABALHA_PARA Horas >>> NumFunc …

N IdProj
T2
E2 PROJECTO IdProj Horas PROJECTO
IdProj

REL(E1,E2, Attrs) com cardinalidade M:N …


Cria-se tabela de “referência-cruzadas” específica a REL.
Chave primária de REL = Chave primária de T1 + Chave primária de T2
(ambas chaves externas)
Attrs mapeados na tabela para REL
Mapeamento é o mesmo independente de a participação de cada uma das
entidades ser parcial ou total.
Bases de Dados O Modelo Relacional 29
Relacionamentos N:1
E1 FUNCIONÁRIO NumFunc T1
FUNCIONÁRIO
N T2
NumFunc DEPARTAMENTO
TRABALHA_EM Gabinete >>>
IdDep IdDep
1
Gabinete …
E2 DEPARTAMENTO IdDep

REL(E1, E2, Attrs) com cardinalidade N:1 e participação


total de E1 (análogo p/1:N com participação total de E2)
chave externa definida em T1 para a chave primária
de T2
Attrs mapeados em T1
Bases de Dados O Modelo Relacional 30
Relacionamentos N:1 (cont.) T1

E1 FUNCIONÁRIO NumFunc T1
PARQUE_ESTACI
N FUNCIONÁRIO ONAMENTO
TEM_LUGAR Lugar >>> NumFunc IdParque

1 IdParque ? …
Lugar ?
PARQUE_ESTACIONAMENTO IdParque

E2

REL(E1,E2, Attrs) c/cardinalidade N:1 e participação parcial de E1


Análoga ao caso anterior, mas levando a atributos opcionais
em T1.
Solução onerosa em termos de espaço se apenas algumas
instâncias se envolverem em REL levando a demasiados valor
NULL.
Bases de Dados O Modelo Relacional 31
Relacionamentos N:1 (cont.) T1

E1 FUNCIONÁRIO T FUNCIONÁRIO
NumFunc
TEM_LUGAR NumFunc
N
NumFunc …
TEM_LUGAR Lugar >>>
T2
Parque
1
PARQUE_ESTACI
Lugar ONAMENTO
PARQUE_ESTACIONAMENTO IdParque
… IdParque
E2 …

Alternativa para REL(E1,E2, Attrs) c/cardinalidade N:1 e


participação parcial de E1
Cria-se tabela de referências cruzadas específica a REL
Chave primária de T1 é chave primária T em e chave externa.
Chave primária de T2 é apenas chave externa em T
Bases de Dados O Modelo Relacional 32
Relacionamentos 1:1
T2
E1
FUNCIONÁRIO NumFunc
T1 DEPARTAMENTO
1
FUNCIONÁRIO IdDepart
GERE InícioFunc >>> NumFunc Gestor
1
… InícioFuncGestor

E2 DEPARTAMENTO IdDept …

REL(E1,E2, Attrs) c/cardinalidade 1:1, participação


parcial de E1, participação total de E2
Chave primária de T1 é adicionada como chave
externa a T2
Attrs mapeados em T2
Bases de Dados O Modelo Relacional 33
Relacionamentos 1:1 (cont.)
E1
FUNCIONÁRIO NumFunc
T1 T2
1
FUNCIONÁRIO CACIFO
TEM_CACIFO >>> NumFunc Id
1 Cacifo ? …
E2 CACIFO Id

REL(E1,E2, Attrs) c/cardinalidade 1:1, participação


parcial de ambas as entidades
Podemos usar estratégia semelhante à anterior, mas chave
externa e atributos da relação são atributos opcionais.
Uma tabela de “referências-cruzadas” poderá ser
preferível se houverem poucas instâncias relacionadas.
Bases de Dados O Modelo Relacional 34
Relacionamentos 1:1 (cont.)
T2
E1
TAXISTA NumLicença
T1 TÁXI
1
TAXISTA Matrícula
CONDUZ InícioFunc >>> NumLicença Taxista
1 … InícioFunc

E2 TÁXI Matrícula …

REL(E1,E2, Attrs) c/cardinalidade 1:1, participação total


de ambas as entidades
Opção 1: Chave primária de T1 é adicionada como chave
externa a T2 e Attrs mapeados em T2, ou vice-versa.
Opção 2: Tabela de referências cruzadas.
Bases de Dados O Modelo Relacional 35
Outros casos — relacionamentos recursivos

T1 = T2
E1 = E2

FUNCIONÁRIO NumFunc
FUNCIONÁRIO

1
NumFunc
>>> Supervisor ?
N
SUPERVISIONA …

Tratados de forma análoga a outros casos (exemplo


acima com cardinalidade 1:N).

Bases de Dados O Modelo Relacional 36


Outros casos — entidades-tipo fracas
Nome DataNasc Sexo

Parentesco
T1 T2
E1 DEPENDENTE
DEPENDENTE FUNCIONÁRIO
N
NumFunc NumFunc
Nome …
DEPENDE_DE
DataNasc
1 Sexo
E2 FUNCIONÁRIO NumFunc Parentesco

Tratados de forma análoga a relações N:1 com participação total de E1


Chave primária de T1 = chave parcial da entidade-tipo fraca + chave externa
para T2

Bases de Dados O Modelo Relacional 37


Exemplo completo
- BD empresa -

Bases de Dados O Modelo Relacional 38


Variante da BD empresa — modelo ER
DataNasc
HorasProj
Num Andar? CP
Email?
Telf
GERE Nome Rua Localização
Nome Salário 1 1

NumCC Localidade

N 1
FUNCIONÁRIO TRABALHA_PARA DEPARTAMENTO
supervisor
1
N 1
1
supervisionado
DIRIGE CONTROLA Nome

N
SUPERVISIONA DataInício
N
M N
TRABALHA_EM PROJECTO DataFim
Horas

Bases de Dados O Modelo Relacional 39


Modelo relacional derivado do modelo ER
PROJECTO
Nome

TRABALHA_EM DataInício

Funcionário DataFim

Projecto Director

Horas DepControlador

NUM_TELEF FUNCIONÁRIO DEPARTAMENTO


NumCC NumCC Nome
Num Nome MRua
Email ? MNum
Salário MAndar ?
Supervisor ? MLocalidade
Departamento MCodPostal
Gestor

Bases de Dados O Modelo Relacional 40

Você também pode gostar