2010/12/8 Marcelo Florindo <[email protected]>:
> Herança no Postgres é uma cópia fiel da tabela pai na tabela filha.

O conceito da herança (SQL) para modelagem de dados não faz o menor
sentido porque é implementado de forma a emular, de maneira bastante
grosseira, a especialização do paradigma OO. Repare que em OO faz todo
sentido utilizarmos subtipos porque existe comportamento a ser herdado
do supertipo, além dos atributos.

Não podemos sobrescrever atributos com a atual definição de herança no
SQL, tal como fazemos com sobrecarga na OOP e isto gera anomalias de
inclusão, atualização e exclusão dependências funcionais e u mais um
tantão de dificuldades para manipulação dos dados.

> Eu vejo a herança como um agilizador na geração de tabelas.

IMHO, herança (SQL) é um facilitador para futuras dores de cabeça.

> Eu crio uma tabela padrão com os dados:
> data_inclusao
> data_ultima_alteracao
> situacao

Como eu disse antes, vc poderia trabalhar com especialização da seguinte forma:

Pessoa: R=({#ID_PESSOA, NOME, IDADE, [...]})
Paciente: R=(#ID_PESSOA, CID, [atributos de pacients])

Definição SQL:

CREATE TABLE Pessoa(
  id_pessoa PRIMARY KEY
  , nome VARCHAR
  , idade INTEGER
);

CREATE TABLE Paciente(
  id_pessoa INTEGER REFERENCES Pessoa(id_pessoa)
  , cid CID_SUS -- (domínio do subtipado)
  , [...]
);

Só pra constar, utilziando INHERIT a definição correta seria compor a
nova tabela com o atributo que caracteriza o Paciente:

CREATE TABLE Paciente(
   cid CID_SUS
) INHERITS(Pessoa);

> e com herança eu não tenho que ficar digitando sempre a mesma coisa
> ;)

Pague para entrar e reze para sair...

Abraço

-Leo
-- 
Leonardo Cezar
http://postgreslogia.wordpress.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a