Herança em banco de dados: Vale a Pena!

Olá gujeiros,

Já faz um certo tempo que descobri que banco de dados, como o postgres, conseguem fazer herança entre tabelas.
mas nunca me interessei pelo assunto. apenas agora que estou interessado em saber se isso vale a pena usar.

pesquisei nuns sites e muitos dizem que naum vale a pena. mas intaum porque existe esse tipo de artifico?
Gostaria de saber das vantagens e desvantagens, se realmente há, em usar herança em banco de dados.
Atualmente uso o PostgreSQL 8.4 e também estou começando a ver Oracle 11g.

bem gostaria de opnioes

obrigado

Olha cara, tocaste num assunto que eu ja me perguntei muitas vezes.
Ja li muito sobre orientação a objectos no oracle, que permite herança e etc.
mas até agora nas minhas pesquisas não notei se vale a pena ou não.
e ficou a curiosidade até hoje se vale ou não a pena de usar herança nas tabelas do oracle
:idea: :idea: :idea:

[quote=Andr?Heidi Moriya]Olá gujeiros,

Já faz um certo tempo que descobri que banco de dados, como o postgres, conseguem fazer herança entre tabelas.
mas nunca me interessei pelo assunto. apenas agora que estou interessado em saber se isso vale a pena usar.

pesquisei nuns sites e muitos dizem que naum vale a pena. mas intaum porque existe esse tipo de artifico?
Gostaria de saber das vantagens e desvantagens, se realmente há, em usar herança em banco de dados.
Atualmente uso o PostgreSQL 8.4 e também estou começando a ver Oracle 11g.

bem gostaria de opnioes
[/quote]

Em uma palavra: não.

Não vale a pena porque não tem nenhum objetivo e não permite nada mais do que sem, apenas aumenta a complexidade.
Em OO a localização da persistencia deve ser abstraida a tal ponto que é irrelevante se os dados estão em banco de dados ou não.

Essa feature existe porque o modelo entidade-relacionamento inclui entidades, e entidades incluem herança. É uma coisa do conceito de entidade e não de objetos ou tabelas. Portanto quando vc representa uma entidade é natural que o mecanismo permita herança, mas herança não é algo obrigatorio… nem mesmo em OO.

Cara,

Sou Analista de Sistemas há 10 anos e estou formando em Engenharia de Agrimensura e Cartográfica este ano.

Posso lhe afirmar com todas as letras que vale a pena S I M !

O recurso de herança e domínios oferecem um maior poder de abstração na concepção do modelo do mundo real, principalmente se for orientado à objetos geográficos.
Não é a tôa que as arquiteturas de SGBD evoluíram para trabalhar com dados geográficos, à exemplo da extensão espacial PostGIS para o PostgreSQL.

Dê uma estudada sobre OMT-G que é uma técnica de modelagem conceitual de dados orientada à objetos geográficos baseada em premissas de UML.

Para materializar o que estou falando, dê uma olhada neste pdf: http://www.geoportal.eb.mil.br/images/PDF/ET_EDGV_Vs_2_1_3.pdf
Trata-se de uma norma da Comissão Nacional de Cartografia para estruturar o mapeamento de dados cartográficos no Brasil em conjunto com o exército.

Espero ter sido útil não só a você mas também colaborar e motivar os demais aqui no fórum.

[quote=Cartografo]Cara,

Sou Analista de Sistemas há 10 anos e estou formando em Engenharia de Agrimensura e Cartográfica este ano.

Posso lhe afirmar com todas as letras que vale a pena S I M !

O recurso de herança e domínios oferecem um maior poder de abstração na concepção do modelo do mundo real, principalmente se for orientado à objetos geográficos.
Não é a tôa que as arquiteturas de SGBD evoluíram para trabalhar com dados geográficos, à exemplo da extensão espacial PostGIS para o PostgreSQL.

Dê uma estudada sobre OMT-G que é uma técnica de modelagem conceitual de dados orientada à objetos geográficos baseada em premissas de UML.

Para materializar o que estou falando, dê uma olhada neste pdf: http://www.geoportal.eb.mil.br/images/PDF/ET_EDGV_Vs_2_1_3.pdf
Trata-se de uma norma da Comissão Nacional de Cartografia para estruturar o mapeamento de dados cartográficos no Brasil em conjunto com o exército.

Espero ter sido útil não só a você mas também colaborar e motivar os demais aqui no fórum.

[/quote]

Olha, até onde eu sei, os dados geográficos no banco de dados são apenas tipos de dados. Usá-los não implica que você está usando herança no banco de dados, que foi o que o autor do tópico estava em dúvida (e que eu continuo achando que não vale a pena).

Olá Ataxexe, boa tarde!

Dados geográficos no banco de dados, são mais que tipos espaciais oferecidas pelo PostGIS. Devemos levar em consideração, os seus aspectos: geométricos, descritivos e topológicos.

Quando me referi ao uso em dados geográficos, quis reforçar o “ganho de potencial de abstração” de uma realidade geográfica do mundo real, que pode ser de extrema complexidade, exigindo muitas vezes, vários níveis de generalização/especialização(cartográficas ou não). Tal complexidade pode ser, facilmente, implementada no banco de dados através de herança.

Um dos benefícios que percebi neste recurso é a facilidade de manter estruturas de subclasses (especializadas) ao realizar operações DDL sobre a estrutura da superclasse.

Como havia citado no post anterior, o exército brasileiro construiu normas que estruturam os dados de interesse para as atividades de mapeamento cartográfico. Nessas implementações, é notável o uso do recurso de herança para abstrair derivações espaciais e de negócio.

Vale a pena se informar em: http://www.geoportal.eb.mil.br/images/PDF/ET_EDGV_Vs_2_1_3.pdf

Abraço e até a próxima!

Herança? Não seriam os tipos de dados geoespaciais dos bancos? Realmente não entendi onde entra a herança no banco de dados.

Herança serve para solucionar os “vários níveis de generalização/especialização(cartográficas ou não)”.
Sacou agora?

[quote=Cartografo]Herança serve para solucionar os “vários níveis de generalização/especialização(cartográficas ou não)”.
Sacou agora?[/quote]

Desculpe, mas eu acho que você não entendeu. Eu sei o que é herança, mas não estou entendendo onde está a herança no banco de dados que o autor estava discutindo e que você deveria ter relatado nos seus posts.

Vamos lá, estamos discutindo herança direto no banco de dados e não os conceitos de herança. Gostaria de saber de você o porquê de recomendar a herança no banco de dados (mais uma vez, no banco de dados).

Você mesmo mostra que não se trata de herança aqui:

E foi justamente por isso que eu te questionei onde estaria a herança no banco de dados (mais uma vez pra reforçar: no banco de dados). Isso é somente um tipo de dado fornecido pelo banco. Não se trata de uma herança no banco de dados e, sim, do uso de um tipo específico fornecido por ele (pelo menos até onde eu conheço).

Olá Ataxexe, boa tarde!

Um dos benefícios que percebo no uso de herança é a facilidade de manter estruturas de subclasses (especializadas) ao realizar operações DDL sobre a estrutura da superclasse.

Vamos a um caso de generalização cartográfica que implementa herança (no banco de dados!).

Seja a superclasse denominada de “MUNICIPIO”, representada por uma tabela que contém a seguinte estrutura de dados abaixo:

MUNICIPIO

Atributos

  • codigo
  • nome
  • data_fundacao
  • geometria_ponto (campo espacial que representa às coordenadas da sede municipal)

Devido ao processo de generalização cartográfica por escala, temos a subclasse “MUNICIPIO_LIMITE” herdando os campos da superclasse “MUNICIPIO”:

MUNICIPIO_LIMITE

Atributos

  • codigo (herdado)
  • nome (herdado)
  • data_fundacao (herdado)
  • geometria_ponto (herdado)
  • geometria_poligono (campo espacial que representa o limite de abrangência usado em escalas grandes)

Operações

  • calcular_area()

Porém se quisermos adicionar um novo atributo como “numero_habitantes” que seja pertinente à toda hierarquia, basta adicionar este campo na tabela tabela “MUNICIPIO”, que automaticamente será propagado, por herança, à tabela “MUNICIPIO_LIMITE”.

Esse é um dos cenários mais simples, que exemplificam o uso de herança em modelo de dados geográficos.

Espero ter sido claro desta vez!

Abraço e até a próxima!

[quote=Cartografo]Olá Ataxexe, boa tarde!

Um dos benefícios que percebo no uso de herança é a facilidade de manter estruturas de subclasses (especializadas) ao realizar operações DDL sobre a estrutura da superclasse.

Vamos a um caso de generalização cartográfica que implementa herança (no banco de dados!).

Seja a superclasse denominada de “MUNICIPIO”, representada por uma tabela que contém a seguinte estrutura de dados abaixo:

MUNICIPIO

Atributos

  • codigo
  • nome
  • data_fundacao
  • geometria_ponto (campo espacial que representa às coordenadas da sede municipal)

Devido ao processo de generalização cartográfica por escala, temos a subclasse “MUNICIPIO_LIMITE” herdando os campos da superclasse “MUNICIPIO”:

MUNICIPIO_LIMITE

Atributos

  • codigo (herdado)
  • nome (herdado)
  • data_fundacao (herdado)
  • geometria_ponto (herdado)
  • geometria_poligono (campo espacial que representa o limite de abrangência usado em escalas grandes)

Operações

  • calcular_area()

Porém se quisermos adicionar um novo atributo como “numero_habitantes” que seja pertinente à toda hierarquia, basta adicionar este campo na tabela tabela “MUNICIPIO”, que automaticamente será propagado, por herança, à tabela “MUNICIPIO_LIMITE”.

Esse é um dos cenários mais simples, que exemplificam o uso de herança em modelo de dados geográficos.

Espero ter sido claro desta vez!

Abraço e até a próxima!

[/quote]

Bom, continuo sem entender. Isso parece ser herança na modelagem de classes e não diretamente no banco. Se isso estiver sendo feito diretamente no banco, não consigo ver vantagens em fazê-lo no banco em vez de fazer nas classes.

Não é trollagem não, quem me conhece do GUJ sabe que eu não costumo trollar. É que simplesmente o seu exemplo é bem claro para ilustrar o uso de herança na modelagem das classes, mas realmente não consigo perceber a vantagem disso estar diretamente no banco (na verdade nem sei como fazer isso no banco, talvez seja por isso que estou fazendo a confusão toda).

Digo isso porque poderíamos replicar isso tranquilamente em um modelo de classes e utilizar a persistência normalmente sem herança direto no banco de dados.

Provavelmente estamos falando de coisas diferentes… pelo menos é o que parece até agora.

Estamos falando da mesma coisa meu amigo!

Trata-se de uma evolução natural das tecnologias de SGBD, assim como a extensão espacial que citei anteriormente, para aumentar o poder de abstração de dados em nível físico de banco.

Acredito, piamente, que a idéia é a possibilidade de trabalhar “de verdade” com Modelagem Orientada à Objetos (MOO) em toda a arquitetura de 3 camadas(Interface, Aplicação e Dados), sem ter que fazer “arrumações” e “sacrifícios” em nível físico de banco para poder “simular” OO.

Para desmistificar o provável, segue um exemplo bastante trivial de generalização/especialização IMPLEMENTADA na tecnologia PostgreSQL:


create table pessoa(
codigo serial,
nome varchar(150),
primary key(codigo)
)

create table pessoa_fisica(
cpf double precision,
dt_nascimento timestamp,
unique(codigo)
) inherits (pessoa);

create table pessoa_juridica(
cnpj double precision,
dt_abertura timestamp,
unique(codigo)
) inherits (pessoa);


Perceba que se quisermos adicionar o campo “telefone”, que é comum a qualquer tipo de pessoa seja “física” ou “jurídica”, basta alterarmos somente a tabela pessoa:

alter table pessoa add column telefone integer;

Isso seria um dos benefícios. Entretanto, existem contratempos também mas, que a depender da complexidade do modelo, podem ser resolvidos através de triggers.

Agora que conheceu um pouco mais, pode fazer as suas considerações.

Abraço e até a próxima!

Interessante. Só acho que isso ainda está longe de simular a OO de fato (até porque herança nem é requisito obrigatório de OO e, inclusive, deve ser usada com muito cuidado).

De um ponto, pode ser válido pra persistência de subclasses, mas herança é apenas uma característica da OO. Um ponto importantíssimo seria permitir o “many-to-many” sem a famosa gambiarra de três tabelas, mas isso não parece ser o caso.

Eu compartilho a mesma opinião do sergiotaborda, acho que cria uma complexidade desnecessária e está incrivelmente longe de aproximar a OO do banco de dados relacional.

Bom, espero que o autor tenha aproveitado essa discussão para fazer suas reflexões sobe o assunto.

Existem outras fontes para o devido aprofundamento, além da que citei.

Agradeço a oportunidade de me expressar aqui no fórum!

Sigamos com sede de conhecimento sempre!

[quote=Cartografo]Perceba que se quisermos adicionar o campo “telefone”, que é comum a qualquer tipo de pessoa seja “física” ou “jurídica”, basta alterarmos somente a tabela pessoa:

alter table pessoa add column telefone integer;

Abraço e até a próxima![/quote]

Você não esta simulando OO, e sim herança. OO não se resume a herança.