transformação odmg relacional. implementação relacional de bds oo transformação esquema objeto...
TRANSCRIPT
Transformação ODMG Transformação ODMG Relacional Relacional
Transformação ODMG Transformação ODMG Relacional 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 “SQL-triggers” • 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 IntegridadeSe 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 NULLSe 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 NULLSe t = `Trabalhador´ então Gratificação NULLSe 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 NULLSe t = `Trabalhador´ então Gratificação NULL, Período NULL, Horas NULLSe 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 emTrabalhador) (ID = v emHorista))
((ID = v em Trabalhador) (ID = v em Gerente) (ID = v em Horista))
((ID = v em Horista) (ID = v emGerente) (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 Nomes e endereços de todos os empregados horistasempregados horistas• SELECT Nome, Endereço FROM Empregado WHERE Subtipo = `Horista´ (C1)(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)(C2)
As consultas são idênticas, porém C1 é melhor que As consultas são idênticas, porém C1 é melhor que C2 (Empregado na Alternativa 1 é pequena se C2 (Empregado na Alternativa 1 é pequena se comparada com Empregado na Alternativa 2)comparada com Empregado na Alternativa 2)
Transformação Esquema Objeto Esquema
Relacional• Consultas em Superclasse
– Usando o exemplo Empregado-Gerente-Trabalhador-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)(C3)
C1 (sem junção) é melhor que C3 (com C1 (sem junção) é melhor que C3 (com junção)junção)
Transformação Esquema Objeto Esquema
Relacional• Consultas em Subclasse
– Listar as horas extras de todos os trabalhadores 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 SQL2SQL1 e SQL3 são melhores que SQL2
Transformação Esquema Objeto Esquema
Relacional• Consultas Mistas
– Usando o exemplo Empregado-Gerente-Trabalhador-Horista (Fragmentação)
Listar os detalhes de todos os gerentesListar 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 WHERE Tipo = `Gerente´
SQL2 é melhorSQL2 é melhor
Transformação Esquema Objeto Esquema
Relacional
Superclasse
Subclasse
Mista
Subtipo*
Única Tabela
Sem subtipo*
* - Semanticamente próximas do esquema de objetos
Transformação Esquema Objeto Esquema
Relacional
• Associação– 1:1
– Tabela_B(ID, IDA, ...) Tabela_A(ID, ...)
– Tabela_A(ID, IDB, ...) Tabela_B(ID, ...)
– Tabela_AB(ID, ...)
Qual é a melhor transformação?Qual é a melhor transformação?
Chave primária Chave estrangeira
Classe A Classe B1 1
Transformação Esquema Objeto Esquema
Relacional• Associação
– 1:N
• Tabela_B(ID, IDA, ...) Tabela_A(ID, ...)
Classe A Classe B1 N
Transformação Esquema Objeto Esquema Relacional
• Associação– M:N
Tabela_A(ID, ...) Tabela_B(ID, ...) Tabela_AB(IDA, IDB, ...)
Classe A Classe BM N
ClasseAssociação
Transformação Esquema Objeto Esquema
Relacional
• Agregação– Usando o exemplo Catálogo-
Brinquedo • Catálogo(ID, ...) Brinquedo(ID, ...) Composto_de(IDC, IDB, ...)
chaveestrangeira
chaveestrangeira
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”)