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
MesaInvoiceId (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
MesaLineId (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
MesaRevisionId (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?
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".
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?