Pergunta

Eu tenho um problema, o que eu espero é muito comum, mas não tenho certeza do que procurar, pois pode ser explicado de muitas maneiras diferentes.

Eu estou projetando uma estrutura de banco de dados para gerenciar faturas, produtos, preços, moedas, etc.

Eu sou capaz de gerenciar preços e nomes dos produtos (espera-se que estejam mudando de vez em quando).

em faturas, os produtos são adicionados por quantidade, com desconto, IVA, unicórnios, esquilos e assim por diante, e então o total da fatura é calculado.

Agora, quando um preço é atualizado na tabela de produtos, a fatura não deve ser alterada. Precisa ficar o mesmo para sempre.

Ao pensar sobre isso, para mim parece que a lista de produtos é uma lista de objetos "tipo de classe", que descrevem como é um produto. Ou poderíamos chamá-lo de "modelo" ou "base" ou "abstrato", dependendo de que a abstração pensamos.

Os produtos que são adicionados à fatura são "instâncias", "implementações", "crianças", "registros versionados" ou qualquer outra coisa que tivéssemos chamadas.

Como eu estruturaria isso no banco de dados? Eu poderia dividi-los em duas mesas diferentes "Abstractproduct" e "produto", mas eles teriam mais (possivelmente todos) de suas colunas em comum. A esse respeito, parece apropriado mantê-los na mesma mesa. Mas então eu precisaria de uma coluna extra para significar se é "classe" ou "instância". Isso é bom também. Isso também pode ser um estrangeiro para a classe foi criado a partir de (ou null para classes).

Eu tentei diferentes abordagens, mas tudo parece ter ressalvas irritantes.

Este é um padrão conhecido? Como isso é chamado? Há melhores práticas para resolver esta questão?

Foi útil?

Solução

É um padrão bem conhecido.Se você quer literatura extensa sobre este tópico, pesquise no "banco de dados temporal".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top