Transformação ODMG 
Relacional
Implementação Relacional
de BDs OO
• Transformação Esquema Objeto  Esquema
Relacional
• Transformação Esquema Objeto  Esquema
Objeto-Relacional
• Camada OO no Topo de um SGBDR
• Integração de uma LPOO com um SGBDR
• Interoperabilidade de SGBDOO e SGBDR
Transformação Esquema Objeto 
Esquema Relacional
• Classe de Objetos  Tabela Relacional
– OID  Chave Primária, “Surrogate Key”
– Os métodos são implementados como “stored
procedures”, ou “SQL-functions” ou “SQLtriggers”
• Herança com União
– Alternativa 1: a superclasse e cada uma das
subclasses são transformadas em tabelas
relacionais; uma chave compartilhada ID é
usada para preservar a identidade dos objetos
através das tabelas
Transformação Esquema Objeto 
Esquema Relacional
• Herança com União
– Alternativa 1:
• Usando o exemplo Pessoa-Estudante-
Funcionário
– Pessoa(ID, Nome, Endereço)
– Estudante(ID, Curso, Ano-admissão)
– Funcionário(ID, Depto, Sala)
» Regra de Integridade
Se ID = v em Pessoa então
(ID = v em Estudante)  (ID = v
em Funcionário)  (ID = v em Est
e Func)
Transformação Esquema Objeto 
Esquema Relacional
• Herança com União
– Alternativa 2: tudo em uma tabela; um
atributo `Tipo´ não-nulo é incluído, para
indicar o tipo do objeto/registro; os
demais atributos, salvo ID, podem ser
nulos
Transformação Esquema Objeto 
Esquema Relacional
• Herança com União
– Alternativa 2:
• Usando o exemplo Pessoa-Estudante-
Funcionário
– Pessoa(ID, Tipo, Nome, Endereço, Curso, Ano-
admissão, Depto, Sala)
» Regras de Integridade
Tipo {t | t = `Estudante´  t = `Funcionário´
 t=
`Estudante-Funcionário´}
Se t = `Estudante´ então Depto NULL, Sala
NULL
Se t = `Funcionário´ então Curso NULL,
Ano-admissão NULL
Transformação Esquema Objeto 
Esquema Relacional
• Herança com Exclusão Mútua
– Alternativa 1: Um novo atributo
`Subtipo´, podendo ser NULL, é
acrescentado na tabela-superclasse;
este atributo deve garantir que todo
registro em uma tabela-subclasse é
disjunto
Transformação Esquema Objeto 
Esquema Relacional
• Herança com Exclusão Mútua
• Usando o exemplo Empregado-Gerente-Trabalhador
– Empregado(ID, Subtipo, Nome, Endereço, Salário)
– Gerente(ID, Gratificação)
– Trabalhador(ID, HorasExtras)
» Regras de Integridade
Subtipo {t | t = `Gerente´  t = `Trabalhador´ 
t IS NULL}
 ID em Empregado com t = `Gerente´ então  ID
em Gerente e  ID em Trabalhador
 ID em Empregado com t = `Trabalhador´ então
 ID em Trabalhador e  ID em Gerente
 ID em Empregado com t IS NULL então  ID
em Gerente e  ID em Trabalhador
Transformação Esquema Objeto 
Esquema Relacional
• Herança com Exclusão Mútua
– Alternativa 2: tudo em uma tabela; um
atributo `Tipo´, podendo ser NULL, é
incluído, para indicar o tipo do
objeto/registro; os demais atributos,
salvo ID, podem ser nulos
Transformação Esquema Objeto 
Esquema Relacional
• Herança com Exclusão Mútua
• Usando o exemplo Empregado-Gerente-
Trabalhador
– Empregado(ID, Tipo, Nome, Endereço, Salário,
Gratificação, HorasExtras)
» Regras de Integridade
Tipo {t | t = `Gerente´  t = `Trabalhador´ 
t IS NULL}
Se t = `Gerente´ então HorasExtras NULL
Se t = `Trabalhador´ então Gratificação
NULL
Se t IS NULL então HorasExtras NULL,
Gratificação NULL
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Exclusão Mútua
– Alternativa 3: sem o atributo Subtipo na
superclasse;
• Usando o exemplo Empregado-Gerente-
Trabalhador
– Empregado(ID, Nome, Endereço, Salário)
– Gerente(ID, Gratificação)
– Trabalhador(ID, HorasExtras)
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Exclusão Mútua
» Regras de Integridade
Se ID = v em Empregado então
((ID = v em Gerente)   (ID = v em
Trabalhador)) 
((ID = v em Trabalhador)   (ID =
v em Gerente)) 
( (ID = v em Gerente)   (ID = v
em Trabalhador))
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Fragmentação
– Alternativa 1: Um novo atributo
`Subtipo´, não podendo ser NULL, é
acrescentado na tabela-superclasse;
este atributo deve garantir que todo
registro em uma tabela-subclasse é
disjunto
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Fragmentação
– Alternativa 1:
• Usando o exemplo Empregado-Gerente-
Trabalhador-Horista
– Empregado(ID, Subtipo, Nome, Endereço,
Salário)
– Gerente(ID, Gratificação)
– Trabalhador(ID, HorasExtras)
– Horista(ID, Período, Horas)
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Fragmentação
– Alternativa 1:
» Regras de Integridade
Subtipo {t | t = `Gerente´  t = `Trabalhador´ 
t = `Horista´ }
 ID em Empregado com t = `Gerente´ então  ID
em Gerente e  ID em Trabalhador e  ID em
Horista
 ID em Empregado com t = `Trabalhador´ então
 ID em Trabalhador e  ID em Gerente e  ID
em Horista
 ID em Empregado com t = `Horista´ então  ID
em Horista e  ID em Gerente e  ID em
Trabalhador
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Fragmentação
– Alternativa 2: tudo em uma tabela; um atributo
`Tipo´ não-nulo é incluído, para indicar o tipo
do objeto/registro; os demais atributos, salvo
ID, podem ser nulos
• Usando o exemplo Empregado-Gerente-Trabalhador-
Horista
– Empregado(ID, Tipo, Nome, Endereço, Salário,
Gratificação, HorasExtras, Período, Horas)
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Fragmentação
– Alternativa 2:
» Regras de Integridade
Tipo {t | t = `Gerente´  t = `Trabalhador´  t
=`Horista´}
Se t = `Gerente´ então HorasExtras NULL,
Período NULL, Horas NULL
Se t = `Trabalhador´ então Gratificação NULL,
Período NULL, Horas NULL
Se t = `Horista´ então HorasExtras NULL,
Gratificação NULL
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Fragmentação
– Alternativa 3: sem o atributo Subtipo na
superclasse;
• Usando o exemplo Empregado-Gerente-Trabalhador-
Horista
–
–
–
–
Empregado(ID, Nome, Endereço, Salário)
Gerente(ID, Gratificação)
Trabalhador(ID, HorasExtras)
Horista(ID, Período, Horas)
Transformação Esquema
Objeto  Esquema Relacional
• Herança com Fragmentação
– Alternativa 3: sem o atributo Subtipo na
superclasse;
» Regras de Integridade
Se ID = v em Empregado então
((ID = v em Gerente)  (ID = v em
Trabalhador)  (ID = v em
Horista)) 
((ID = v em Trabalhador)  (ID = v
em Gerente)   (ID = v em
Horista)) 
((ID = v em Horista)  (ID = v em
Gerente)  (ID = v em Trabalhador))
Transformação Esquema
Objeto  Esquema Relacional
• Para Cada Tipo de Herança, Qual é a Melhor
Implementação Relacional?
– Prova-se que, para consultas em superclasse e em subclasse, a
Alternativa 1 é pelo menos tão boa quanto as outras, em todos
os casos
– A prova é baseada em um Modelo de Custos e em Categorias de
Consulta
• O Modelo de Custos leva em conta o tamanho dos registros
de uma tabela e o seu número de registros
• Consultas sobre estruturas de herança podem ser assim
categorizadas
– Consultas em Superclasse: acessam atributos em
superclasse
– Consultas em Subclasse: acessam atributos em
subclasse
– Consultas Mistas: acessam atributos ao longo de
estruturas de herança
Transformação Esquema
Objeto  Esquema Relacional
• Consultas em Superclasse
– Usando o exemplo Empregado-Gerente-
Trabalhador-Horista (Fragmentação),
Alternativa 1
– Empregado(ID, Subtipo, Nome, Endereço,
Salário)
– Gerente(ID, Gratificação)
– Trabalhador(ID, HorasExtras)
– Horista(ID, Período, Horas)
Transformação Esquema
Objeto  Esquema Relacional
• Consultas em Superclasse
– Nomes e endereços de todos os
empregados horistas
• SELECT Nome, Endereço
FROM Empregado
WHERE Subtipo = `Horista´ (C1)
Transformação Esquema
Objeto  Esquema Relacional
• Consultas em Superclasse
– Usando o exemplo Empregado-Gerente-
Trabalhador-Horista (Fragmentação),
Alternativa 2
– Empregado(ID, Tipo, Nome, Endereço, Salário,
Gratificação, HorasExtras, Período, Horas)
» SELECT Nome, Endereço
FROM Empregado
WHERE Tipo = `Horista´ (C2)
As consultas são idênticas, porém C1 é
melhor que C2 (Empregado na Alternativa
1 é pequena se comparada com
Empregado na Alternativa 2)
Transformação Esquema
Objeto  Esquema Relacional
• Consultas em Superclasse
– Usando o exemplo Empregado-GerenteTrabalhador-Horista (Fragmentação),
Alternativa 3
–
–
–
–
Empregado(ID, Nome, Endereço, Salário)
Gerente(ID, Gratificação)
Trabalhador(ID, HorasExtras)
Horista(ID, Período, Horas)
Transformação Esquema
Objeto  Esquema Relacional
• Consultas em Superclasse
– SELECT Empregado.Nome,
Empregado.Endereço
FROM Empregado, Horista
WHERE Empregado.ID = Horista.ID
(C3)
C1 (sem junção) é melhor que C3
(com junção)
Transformação Esquema
Objeto  Esquema Relacional
• Consultas em Subclasse
–
Listar as horas extras de todos os
trabalhadores
• SQL1 = SQL3
SELECT HorasExtras
FROM Trabalhador
• SQL2
SELECT HorasExtras
FROM Empregado
WHERE Tipo = `Trabalhador´
SQL1 e SQL3 são melhores que SQL2
Transformação Esquema
Objeto  Esquema Relacional
• Consultas Mistas
–
Usando o exemplo Empregado-Gerente-TrabalhadorHorista (Fragmentação)
Listar os detalhes de todos os gerentes
• SQL1 = SQL3
SELECT Nome, Endereço, Salário, Gratificação
FROM Empregado, Gerente
WHERE Empregado.ID = Gerente.ID
• SQL2
SELECT Nome, Endereço, Salário, Gratificação
FROM Empregado
SQL2 é
WHERE Tipo = `Gerente´
melhor
Transformação Esquema
Objeto  Esquema Relacional
Super
classe
Sub
classe
Mista
Subtipo*
Única
Tabela
Sem
subtipo*
* - Semanticamente próximas do esquema de objetos
Transformação Esquema
Objeto  Esquema Relacional
• Associação
– 1:1
Classe A
Chave primária
1
1
Classe B
Chave estrangeira
– Tabela_B(ID, IDA, ...) Tabela_A(ID, ...)
– Tabela_A(ID, IDB, ...) Tabela_B(ID, ...)
– Tabela_AB(ID, ...)
Qual é a melhor transformação?
Transformação Esquema
Objeto  Esquema Relacional
• Associação
– 1:N
Classe A
1
N
Classe B
• Tabela_B(ID, IDA, ...) Tabela_A(ID, ...)
Transformação Esquema Objeto 
Esquema Relacional
• Associação
– M:N
Classe
Associação
Classe A
M
Tabela_A(ID, ...)
Tabela_B(ID, ...)
Tabela_AB(IDA, IDB, ...)
N
Classe B
Transformação Esquema
Objeto  Esquema Relacional
• Agregação
– Usando o exemplo Catálogo-Brinquedo
• Catálogo(ID, ...)
Brinquedo(ID, ...)
Composto_de(IDC, IDB, ...)
chave
estrangeira
chave
estrangeira
Transformação Esquema
Objeto  Esquema Relacional
• Composição
– Usando o exemplo Universidade-
Departamento
• Universidade(ID, ...)
Departamento(ID, IDU, ...)
–
Regras de Integridade
» Se Universidade.ID = v for removida então
Departamento.IDU = v removido
(“DELETE CASCADE”)
Download

Transformação Esquema Objeto Esquema Relacional