Design de banco de dados para faturas, linhas e revisões de faturas

Estou projetando a segunda iteração principal de um banco de dados relacional para o CRM de uma franquia (com muita refatoração) e preciso de ajuda nas melhores práticas de design de banco de dados para armazenamentofaturas de trabalho elinhas de fatura com um fortetrilha de auditoria de quaisquer alterações feitas em cada fatura.

Esquema atualInvoices Mesa
InvoiceId (int) // Primary key
JobId (int)
StatusId (tinyint) // Pending, Paid or Deleted
UserId (int) // auditing user
Reference (nvarchar(256)) // unique natural string key with invoice number
Date (datetime)
Comments (nvarchar(MAX))
InvoiceLines Mesa
LineId (int) // Primary key
InvoiceId (int) // related to Invoices above
Quantity (decimal(9,4))
Title (nvarchar(512))
Comment (nvarchar(512))
UnitPrice (smallmoney)
Esquema de revisãoInvoiceRevisions Mesa
RevisionId (int) // Primary key
InvoiceId (int)
JobId (int)
StatusId (tinyint) // Pending, Paid or Deleted
UserId (int) // auditing user
Reference (nvarchar(256)) // unique natural string key with invoice number
Date (datetime)
Total (smallmoney)
Considerações sobre design de esquema1. É sensato armazenar o status Pago ou Pendente de uma fatura?

Todos os pagamentos recebidos por uma fatura são armazenados em umPayments tabela (por exemplo, dinheiro, cartão de crédito, cheque, depósito bancário). É significativo armazenar um status "Pago" no diretórioInvoices tabela se toda a renda relacionada às faturas de um determinado trabalho puder ser deduzidaPayments mesa?

2. Como acompanhar as revisões dos itens de linha da fatura?

Posso acompanhar as revisões em umfatura armazenando as alterações de status junto com o total da fatura e o usuário da auditoria em umtabela de revisão de faturas (VejoInvoiceRevisions acima), mas é difícil manter o controle de uma tabela de revisão de linha de fatura. Pensamentos?Editar: os itens de linha devem ser imutáveis. Isso se aplica a uma fatura de "rascunho".

3. Imposto

Como devo incorporar o imposto sobre vendas (ou 14% de IVA no SA) ao armazenar dados da fatura?

Editar: Bom feedback, pessoal.Faturas e linhas de fatura são, por definição, imutáveis, portanto, acompanhar alterações não é sensato. No entanto, uma fatura "rascunho" deve ser editável por mais de uma pessoa (por exemplo, o gerente aplica um desconto depois que o técnico cria a fatura) antes de ser emitida ...

4. Melhor maneira de definir e acompanhar o status da fatura?Esboço, projetoEmitidoAnulado

... constrangido a mudar em uma direção?

questionAnswers(4)

yourAnswerToTheQuestion