Banco de Dados Relacional e Objeto Relacional Uma Comparacao Usando Postgresql
Transformação ODMG Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto...
Transcript of Transformação ODMG Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto...
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”)