Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
Bases de Dados (CC2005) Departamento de Ciência de Computadores
Faculdade de Ciências da Universidade do Porto
Eduardo R. B. Marques — DCC/FCUP — parcialmente adaptado de slides por Fernando Silva e Ricardo Rocha —
O Modelo Relacional
Bases de Dados O Modelo Relacional
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, baseadas 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 concretizado num SGBD basedo na linguagem SQL (como veremos também depois).
Modelação lógica de BDs
2
Bases de Dados O Modelo Relacional 3
Conceitos base
Bases de Dados O Modelo Relacional
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.
Conceito de relação
4
ALUNO
NumMec NumCC Nome Curso
798764544 12345678 JoãoPinto LCC
345673451 17222303 CarlosSemedo MIERSI
487563546 12021999 MariaSilva LBIO
452212348 18392100 PedroCosta LMAT
Registos(linhas)
Atributos(colunas)
Nome
{
Bases de Dados O Modelo Relacional
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 uma relação no contexto concreto de um de SGBDs relacionais baseados em SQL.
Terminologia: relação vs. tabela
5
Bases de Dados O Modelo Relacional
Uma tabela, denotada por T(A1,…,An)tem nome T e atributos A1,…,An
por ex. ALUNO(NumMec,NumCC,Nome,Curso)
A cada atributo Aiestá 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].
Definições e notação genérica
6
Bases de Dados O Modelo Relacional
Seja T(A1,…,An)uma tabela. Um subconjunto K = { K1, …, Km }dos atributos A1,…, Andiz-se uma superchave se é garantido que para qualquer par de registos distintos r1er2temos r1[K]≠r2[K].
O tuplo formado por valores de K nunca é igual para 2 registos distintos
Uma superchave Kdiz-se uma chave se for um conjunto mínimo de atributos, isto é, ∀iK\{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 adequada para identificar os registos em causa.
Superchave, chave e chave primária
7
Bases de Dados O Modelo Relacional
Tabela: ALUNO(NumMec,NumCC,Nome,Curso)
Superchaves: qualquer conjunto de atributos que inclúa 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 intrinsicamente ao universo).
Superchave, chave e chave primária (cont.)
8
Bases de Dados O Modelo Relacional
Notação para tabelas
9
ALUNO(NumMec,NumCC,Nome,Curso)
ALUNO
NumMecNumCC
NomeCurso
Chave primária aparece sublinhada.
Bases de Dados O Modelo Relacional
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 Ttal 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.
Chave externa (“foreign key”)
10
Bases de Dados O Modelo Relacional
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.
Representação de chaves externas
11
INSCRIÇÃO
NumMecCodCadeira
ALUNO
NumMecNumCC
NomeCurso
CADEIRA
CodCadeiraNumCC
NomeDocente
Bases de Dados O Modelo Relacional
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.
Representação de esquema — variante
12
ALUNO(NumMec,NumCC,Nome,Curso)
CADEIRA(CodCadeira,Nome,Docente)
INSCRIÇÃO(NumMec,CodCadeira)
Bases de Dados O Modelo Relacional
Chaves externas — exemplo de dados
13
ALUNO
NumMec NumCC Nome Curso
798764544 12345678 JoãoPinto LCC
345673451 17222303 CarlosSemedo MIERSI
487563546 12021999 MariaSilva LBIO
452212348 18392100 PedroCosta LMAT
INSCRIÇÃO
NumMec CodCad
798764544 12347
345673451 12347
798764544 34248
452212348 32439
CADEIRA
CodCad Nome Docente
12347 BasesdeDados JoséAguiarMota
34248 Álgebra MariadasDores
32439 CálculoI CarlosDuarte
Bases de Dados O Modelo Relacional
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 ?.
Chaves externas — outros exemplos
14
FUNCIONÁRIO
IdFunc
Nome
Departamento
Supervisor?
…
DEPARTAMENTO
IdDep
Nome
Director
…
Bases de Dados O Modelo Relacional
Chaves externas — outros exemplos (cont.)
15
DEPARTAMENTO
IdDep Nome Director …
1 Contabilidade 1 …
2 Produção 4 …
3 RecursosHumanos 6 …
FUNCIONÁRIO
IdFunc Nome Departamento Supervisor? …
1 CarlosSemedo 1 NULL …
2 MariaSilva 1 1 …
3 PedroCosta 1 1 …
4 JoséNeto 2 NULL …
5 AntónioMeireles 2 4 …
6 FátimaSilva 3 NULL …
FUNCIONÁRIO
IdFunc
Nome
Departamento
Supervisor?
…
DEPARTAMENTO
IdDep
Nome
Director
…
Bases de Dados O Modelo Relacional
E s t a B D n ã o f a z sentido. Quais são os problemas? O que está em causa em cada caso?
Dados consistentes?
16
ALUNO
NumMec NumCC Nome Curso
798764544 12345678 JoãoPinto LCC
345673451 17222303 CarlosSemedo MIERSI
487563546 12021999 MariaSilva LBIO
452212348 ABCDEF PedroCosta LMAT
INSCRIÇÃO
NumMec CodCad
111111111 12347
345673451 12347
798764544 34248
452212348 12347
CADEIRA
CodCad Nome Docente
12347 BasesdeDados JoséAguiarMota
34248 Álgebra MariadasDores
34248 CálculoI CarlosDuarte
NULL Programação AlbertoManuel
?
?
?
?
Bases de Dados O Modelo 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.
Restrições de integridade numa BD relacional
17
Bases de Dados O Modelo Relacional
Violação de restrições de integridade
18
ALUNO
NumMec NumCC Nome Curso
798764544 12345678 JoãoPinto LCC
345673451 17222303 CarlosSemedo MIERSI
487563546 12021999 MariaSilva LBIO
452212348 ABCDEF PedroCosta LMAT
INSCRIÇÃO
NumMec CodCad
111111111 12347
345673451 12347
798764544 34248
452212348 12347
CADEIRA
CodCad Nome Docente
12347 BasesdeDados JoséAguiarMota
34248 Álgebra MariadasDores
34248 CálculoI CarlosDuarte
NULL Programação AlbertoManuel
?
?
?
?
integridade referencial
integridade de chave
integridade de domínio
integridade de entidade
Bases de Dados O Modelo Relacional
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 nuclares:
INSERE(T,r) : insere novo registo r na tabelaTREMOVE(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 Tpelo registo rcom 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).
Estado e operações sobre uma base de dados
19
Bases de Dados O Modelo Relacional
As operações consideradas podem ser inválidas se violarem restrição de integridade:
INSERE(T,r) : insere novo registo r na tabelaT— pode violar qualquer um dos tipos de restrições (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 kpor via de uma chave externa. ACTUALIZA(T,k,r):actualiza registo com chave primária k em Tpelo registo rcom a mesma chave primária — pode violar qualquer um dos tipos de restrição.
Operações e restrições de integridade
20
Bases de Dados O Modelo Relacional
INSERE(ALUNO,r)tal quer[NumMec]=798764544violaria 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)comr[NumMec]=NULLviolariaaintegridadedeentidadep/ALUNO.
Exemplos de operações inválidas
21
ALUNO
NumMec NumCC Nome Curso
798764544 12345678 JoãoPinto LCC
345673451 17222303 CarlosSemedo MIERSI
487563546 12021999 MariaSilva LBIO
452212348 18392100 PedroCosta LMAT
INSCRIÇÃO
NumMec CodCad
798764544 12347
345673451 12347
798764544 34248
452212348 32439
CADEIRA
CodCad Nome Docente
12347 BasesdeDados JoséAguiarMota
34248 Álgebra MariadasDores
32439 CálculoI CarlosDuarte
Bases de Dados O Modelo Relacional
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 consideramos (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.
SGBDs e restrições de integridade
22
Bases de Dados O Modelo Relacional 23
Conversão do modelo ER para o modelo relacional
Bases de Dados O 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.
Modelo ER → Modelo Relacional
24
Bases de Dados O Modelo Relacional
Entidade-tipo E >>> tabela TNome 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 auxilar MV com chave externa referenciando a chave primária de T. Chave externa e restantes atributos definem a chave de MV.
Mapeamento de entidades-tipo
25
Bases de Dados O Modelo Relacional
Entidades-tipo — atributos de valor único
26
PESSOA
NumCC
Nome
Sexo
DataNasc
MRua
MNum
MAndar?
MLocalidade
MCodPostal
E T>>>
Bases de Dados O Modelo Relacional
É criada nova tabela “auxilar” com chave externa referenciando a chave primária de T. Chave externa e restantes atributos definem a chave primária da tabela auxiliar.
Entidades-tipo — atributos multivalor
27
PESSOA
NumTelef Habilitação
Grau AnoInstituição
NumCC…
PESSOA
NumCC
…
NUM_TELEF
NumCC
NumTelef
HABILITAÇÃO
NumCC
Grau
Ano
Instituição
E T>>>
Bases de Dados O Modelo Relacional
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 RELMapeamento é o mesmo independente de a participação de cada uma das entidades ser parcial ou total.
Mapeamento de relacionamentos M:N
28
TRABALHA_PARA
FUNCIONÁRIO
PROJECTO
Horas
NumFunc
IdProj
TRABALHA_PARA
NumFunc
IdProj
Horas PROJECTO
IdProj
…
>>>
FUNCIONÁRIO
NumFunc
…
E1
E2
T1
T2
M
N
Bases de Dados O Modelo Relacional
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
Relacionamentos N:1
29
TRABALHA_EM
FUNCIONÁRIO
DEPARTAMENTO
Gabinete
NumFunc
IdDep
FUNCIONÁRIO
NumFunc
IdDep
Gabinete
…
DEPARTAMENTO
IdDep
…
>>>
T1
T2
E1
E2
N
1
Bases de Dados O Modelo Relacional
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.
Relacionamentos N:1 (cont.)
30
TEM_LUGAR
FUNCIONÁRIO
PARQUE_ESTACIONAMENTO
Lugar
NumFunc
IdParque
PARQUE_ESTACIONAMENTO
IdParque
…
>>>FUNCIONÁRIO
NumFunc
IdParque?
Lugar?
E1
E2
T1
N
1
T1
Bases de Dados O Modelo Relacional
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 Tem e chave externa. Chave primária de T2 é apenas chave externa em T
Relacionamentos N:1 (cont.)
31
TEM_LUGAR
FUNCIONÁRIO
PARQUE_ESTACIONAMENTO
Lugar
NumFunc
IdParque
TEM_LUGAR
NumFunc
Parque
Lugar
…
PARQUE_ESTACIONAMENTO
IdParque
…
>>>
FUNCIONÁRIO
NumFunc
…
E1
E2
T2
T1
N
1
T
Bases de Dados O Modelo Relacional
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
Relacionamentos 1:1
32
GERE
FUNCIONÁRIO
DEPARTAMENTO
InícioFunc
NumFunc
IdDept
DEPARTAMENTO
IdDepart
Gestor
InícioFuncGestor
…
>>>FUNCIONÁRIO
NumFunc
…
E1
E2
T1
T2
1
1
Bases de Dados O Modelo Relacional
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.
Relacionamentos 1:1 (cont.)
33
TEM_CACIFO
FUNCIONÁRIO
CACIFO
NumFunc
Id
CACIFO
Id
…
>>>FUNCIONÁRIO
NumFunc
Cacifo?
E1
E2
T1 T21
1
Bases de Dados O Modelo Relacional
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 T2e Attrs mapeados em T2, ou vice-versa. Opção 2: Tabela de referências cruzadas.
Relacionamentos 1:1 (cont.)
34
CONDUZ
TAXISTA
TÁXI
InícioFunc
NumLicença
Matrícula
TÁXI
Matrícula
Taxista
InícioFunc
…
>>>TAXISTA
NumLicença
…
E1
E2
T1
T2
1
1
Bases de Dados O Modelo Relacional
Tratados de forma análoga a outros casos (exemplo acima com cardinalidade 1:N).
Outros casos — relacionamentos recursivos
35
FUNCIONÁRIO
NumFunc
Supervisor?
…
FUNCIONÁRIO
SUPERVISIONA
1
N
NumFunc
>>>
E1=E2T1=T2
Bases de Dados O Modelo Relacional
Tratados de forma análoga a relações N:1 com participação total de E1Chave primária de T1= chave parcial da entidade-tipo fraca + chave externa paraT2
Outros casos — entidades-tipo fracas
36
DEPENDENTE
NumFunc
Nome
DataNasc
Sexo
Parentesco
FUNCIONÁRIO
NumFunc
…
DEPENDENTE
Nome
Parentesco
SexoDataNasc
DEPENDE_DE
FUNCIONÁRIO
1
NumFunc
E1
E2
T1 T2
N
Bases de Dados O Modelo Relacional 37
Exemplo completo BD empresa (variante)
Bases de Dados O Modelo Relacional
Variante da BD empresa — modelo ER
38
CP
FUNCIONÁRIO DEPARTAMENTO
PROJECTO
SUPERVISIONA
GERE
CONTROLA
TRABALHA_PARA
DIRIGE
11
TRABALHA_EM
1
N
N
1
N
Horas
N
supervisor
supervisionado
DataInício
DataFim
Nome
Nome Localização
NumCC
Nome Salário
HorasProjDataNasc
Email?
Localidade
Rua
Num Andar?
1
M
N 1
Telf
Bases de Dados O Modelo Relacional
Modelo relacional derivado do modelo ER
39
FUNCIONÁRIO
NumCC
Nome
Email?
Salário
Supervisor?
Departamento
DEPARTAMENTO
Nome
MRua
MNum
MAndar?
MLocalidade
MCodPostal
Gestor
PROJECTO
Nome
DataInício
DataFim
Director
DepControlador
NUM_TELEF
NumCC
Num
TRABALHA_EM
Funcionário
Projecto
Horas