Modelagem de dados - Dados que nao podem ser alterados

Eu estava dando uma olhada nesse site aqui;
http://www.macoratti.net/cbmd1.htm
E ali esta uma explicaçao da modelagem de dados. Porem, pelo que eu entendi, a modelagem da nota fiscal esta errada.
Gostaria de saber de vcs como resolvem o problema de dados que nao podem ser alterados.
Por exemplo: Uma nota fiscal, depois que é emitida, nao pode ter nenhuma alterçao a partir daquele momento, mas digamos que o cliente mude de razao social. O problema é que na tabela de clientes ele tera o nome atualizado, mas isso n pode acontecer c a nota fiscal.
Como vcs analizariam esse problema. Eu, nesse caso, desnormalizaria a tabela de nota fiscal e colocaria todos os dados ali (nome, endereço etc), ou seja, os dados seriam duplicados.
E vcs? Oq acham?

Ou você guardaria o histórico de alteração dos dados do cliente e usaria a data de emissão da nota (por exemplo) para recuperar a “versão” correta do cliente.

Usar a data nao serve pois eu pode existir a possibilidade de emitir a 2 notas em 1 dia para o mesmo cliente (talvez a data e a hora vc quis dizer). E’ isso q eu fico pensando, n é o primeiro exemplo de normalizaçao q eu vejo q usam a nota fiscal como exemplo. Pra mim isso é errado, e n consigo achar nada q sustente q esse tipo de normalizaçao é certo.

Esqueça a data. Foi um exemplo mal dado.

Cliente

id (PK)
razão social
id versão anterior (auto relacionamento)

Nota Fiscal

id cliente (foreign key para cliente)

Agora você percebe que cada Nota vai estar associada a uma versão do Cliente?

Mas isso n ficaria MUITO complicado de gestir? Pois certamente o codigo do cliente nao vai estar somente na nota fiscal.
Digamos q tenha uma tabela de CONTRATO, vc tem o contrato com o cliente, q serà sempre o mesmo ID (ou estou enganado), se eu ficar mudando o id toda vez q tem uma alteraçao no cliente, seà dificil ficar gestindo esse negocio de ID pra la. Oq vcs acham?

[quote=devaney]Mas isso n ficaria MUITO complicado de gestir? Pois certamente o codigo do cliente nao vai estar somente na nota fiscal.
Digamos q tenha uma tabela de CONTRATO, vc tem o contrato com o cliente, q serà sempre o mesmo ID (ou estou enganado), se eu ficar mudando o id toda vez q tem uma alteraçao no cliente, seà dificil ficar gestindo esse negocio de ID pra la. Oq vcs acham?[/quote]

Você não vai alterar o ID do cliente nem na tabela de Cliente nem na tabela de Nota Fiscal. Você não vai alterar nenhum dado do Cliente, na verdade. Quando for preciso “alterar” o Cliente, você vai inserir um novo registro de Cliente que aponta para a versão anterior. O código do cliente na nota fiscal continua o mesmo. Novas notas fiscais sempre serão emitidas usando a versão mais recente do Cliente.

Mas se você leu meu post, a primeira palavra era “OU”. Isso significa que é apenas uma alternativa a desnormalizar a informação. Não é a MELHOR maneira nem a PIOR maneira. É apenas OUTRA maneira e tem seus prós e contras.

Acho q entendi mais ou menos. Pelo q eu entendi, a nota fiscal seria do id cliente q estaria na coluna “versao anterior”.
Mesmo assim acho esse tipo de gestao dificil.
Como eu vou saber qual é a mais recente? Ver qual é o id maior? Se for assim acho um pouco estranho.
To procurando entender para tentar achar a melhor soluçao mesmo. Pois esse é um tipo de problema q tem mtos sistema por ai a fora.
Eu tinha dado aquela soluçao pois apesar de gostar do conceito da normalizaçao, em mtos casos é mto dificil de aplicar (na minha opiniao).
Estou curioso pra ver um sistema c esse tipo de normalizaçao funcionando.

[quote=devaney]Como eu vou saber qual é a mais recente? Ver qual é o id maior? Se for assim acho um pouco estranho.
[/quote]

Estranheza é subjetivo. Tudo pode ser estranho quando você vê pela primeira vez.