330 likes | 433 Views
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.
E N D
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 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-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) 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-Trabalhador-Horista (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 WHERE Tipo = `Gerente´ SQL2 é melhor
Transformação Esquema Objeto Esquema Relacional * - 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, ...) Classe A Classe B 1 1 Chave primária Chave estrangeira Qual é a melhor transformação?
Transformação Esquema Objeto Esquema Relacional • Associação • 1:N • Tabela_B(ID, IDA, ...) Tabela_A(ID, ...) Classe A Classe B 1 N
Transformação Esquema Objeto Esquema Relacional • Associação • M:N Tabela_A(ID, ...) Tabela_B(ID, ...) Tabela_AB(IDA, IDB, ...) Classe Associação Classe A Classe B M N
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”)