Transformação ODMG Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto...

Post on 18-Apr-2015

143 views 2 download

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”)