Muito obrigado por tua mensagem, Adami!  Gostei muito do exemplo e de
como o explanaste.

Só algumas pequenas observações, que nada deslustram:


2016-08-25 14:17 GMT-03:00 Tiago José Adami <adam...@gmail.com>:
>
> E eu avalizo totalmente esta declaração. E ainda quero citar um
> exemplo do porquê chaves naturais compostas DEVEM ser utilizadas
> sempre que possível.

Eu diria que *sempre* _têm_ de ser utilizadas.  Se não for possível, é
erro de modelagem, provavelmente de compreensão ou do modelo
relacional.  Especificamente, se for necessário pode-se definir uma
chave artificial *além* das naturais.


> Como exemplo à declaração do Dutra, a tabela RESERVA_ITEM_AUTORIZACAO
> possui 7 campos em sua chave primária, todos naturais que são todos os
> campos da tabela. Ou seja, é uma tabela onde todos os campos são parte
> da chave primária, sendo uma tabela "clássica" de relacionamento N*N.

Sim, no n:n por definição todos os atributos participam da chave, que
no caso é sempre composta e única (não há chaves alternativas).

Mas referi-me a uma situação um pouco diferente: há casos em que há
dificuldades de se obter uma chave natural que realmente garanta
unicidade. Por exemplo, o RG, para as SSPs, é uma chave artificial; a
natural é nome completo, filiação, data e local de nascimento… e há
casos de duplicação dos atributos que acabo de listar, por incrível
que pareça: por exemplo, dois homens, se não me engano nascidos no
interior da BA, que tinham o mesmo nome, que nasceram no mesmo dia e
cidade, e cujos mãe e pais também tinham nomes idênticos.

Num caso desses, a saída é incorporar mais informações ao modelo.  Não
sei o que a SSP/BA fez nesse caso, nem o que as SSPs em geral fazem,
mas o óbvio seria incorporar alguma informação adicional: como
exemplos meio idiotas, só mesmo a título de exemplo, identificação da
certidão de nascimento, ou hora de nascimento, ou nomes dos avós…

Outro exemplo é uma tabela armazenando um registro de atividades
(trilha de auditoria).  Pode ser necessário colocar todos os atributos
do /log/ como chave, e no limite até incorporar um contador para o
caso em que no mesmo momento a mesmíssima mensagem apareceu várias
vezes.  Mas, geralmente, um TIMESTAMP resolve um caso desses.


> Finalizando minha "história", com exceção de um índice único e 2
> TRIGGERs para tratar horários conflitantes, toda a integridade lógica
> ficou GARANTIDA apenas pelo uso das FK's e PK's com atributos
> naturais, mesmo que com vários campos. E o número de FK's foi reduzido
> para 1 terço do que havia antes, pois a propagação das chaves
> compostas garante a integridade com a tabela "pai" de todos os níveis
> superiores.

E imagino que tanto desempenho quanto carga de máquina e de rede,
usabilidade e manutenção melhorem muito.


-- 
skype:leandro.gfc.dutra?chat      Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191              gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691        ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to