Mapeamento de Herança
Existem fundamentalmente três estratégias para mapear herança em um banco de dados relacional, exemplificado pela Figura 1.
- Uma tabela por hierarquia: Mapear toda a hierarquia de classes para uma tabela, onde todos os atributos das classes da hierarquia são armazenados nesta única tabela. A desvantagem desta estratégia é que toda vez que um objeto da hierarquia for persistido no banco, é necessário persistir também os valores das demais classes vazios, causando uma grande quantidade de campos inutilizados. Entretanto o acesso ao banco para a manipulação dos dados é mais rápido, uma vez que todos os dados estão em somente uma tabela. É adicionada uma coluna (Object Type) na tabela que referência qual o tipo do objeto, ou seja, de qual classe aqueles dados pertencem;
- Uma tabela por classe concreta: Cada classe concreta mapeada reflete uma tabela com todos os atributos herdados das super classes abstratas. A vantagem desta estratégia é a facilidade de manipulação de dados, uma vez que todos os dados de cada classe estão em apenas uma única tabela. Como desvantagem, destaca-se que quando se modifica uma classe abstrata, é necessário modificar todas as tabelas geradas pelas classes filhas no modelo relacional;
- Uma tabela por classe: Cada hierárquica mapeada reflete uma tabela, relacionadas através do mecanismo de especialização padrão do banco de dados relacional (utilização de chaves estrangeiras). Segunda esta modalidade de mapeamento, tenta-se ao máximo manter a normalização de dados, de forma que a estrutura final das tabelas fica bastante parecida com a hierarquia das classes representada na UML. Esta é a técnica que mais naturalmente mapeia objetos para banco de dados relacionais.
