Transformação ODMG Relacional Implementação Relacional de BDs OO • Transformação Esquema Objeto Esquema Relacional 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” • A rica semântica de método de instância é perdida • Herança (só exclusão mútua) – – – – Alternativa 1: uma tabela para cada (sub)classe Alternativa 2: uma única tabela para todas as classes Alternativa 3: uma variação da alternativa 1 Em todas as alternativas: regras de integridade Transformação Esquema Objeto Esquema Relacional • Herança Empregado Gerente Trabalhador – Alternativa 1: Um novo atributo `Subtipo´, podendo ser NULL, é acrescentado na tabelasuperclasse; este atributo deve garantir que todo registro em uma tabela-subclasse é disjunto Transformação Esquema Objeto Esquema Relacional • Herança • 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 – 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 • 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 – 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 » 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 • Qual é a Melhor Implementação Relacional de Herança? – 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 Super classe Subtipo Única Tabela Sem subtipo Sub classe Mista 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”)