Datenbankdesign für Rechnungen, Rechnungsposten & Revisionen
Ich entwerfe die zweite große Iteration einer relationalen Datenbank für das CRM eines Franchise-Unternehmens (mit vielen Umgestaltungen) und benötige Hilfe zu den besten Methoden für das Datenbankdesign zum Speichern vonjob Rechnungen und Rechnungszeilen mit einem starkenBuchungskontroll von Änderungen, die an jeder Rechnung vorgenommen wurden.
Aktuelles SchemaInvoices
TabellInvoiceId (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
TabellLineId (int) // Primary key
InvoiceId (int) // related to Invoices above
Quantity (decimal(9,4))
Title (nvarchar(512))
Comment (nvarchar(512))
UnitPrice (smallmoney)
Revision SchemaInvoiceRevisions
TabellRevisionId (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)
Schema Design Überlegungen 1. Ist es sinnvoll, den Status "Bezahlt" oder "Ausstehend" einer Rechnung zu speichern?Alle Zahlungen, die für eine Rechnung eingehen, werden in einem @ gespeicherPayments
table (zB Bargeld, Kreditkarte, Scheck, Bankeinzahlung). Ist es sinnvoll, einen "Bezahlt" -Status im @ zu speicherInvoices
Tabelle, wenn alle Einnahmen, die mit den Rechnungen eines bestimmten Jobs zusammenhängen, aus der @ Tabelle abgeleitet werden könnePayments
Tabelle
Ich kann Revisionen zu einem @ verfolgRechnun durch Speichern von Statusänderungen zusammen mit der Rechnungssumme und dem prüfenden Benutzer in eineminvoice Revisionstabelle (sehenInvoiceRevisions
oben), aber das Verfolgen einer Rechnungsposten-Revisionstabelle fühlt sich schwierig zu pflegen an. Gedanken?Bearbeiten Werbebuchungen sollten unveränderlich sein. Dies gilt für einen Rechnungsentwurf.
Wie soll ich die Umsatzsteuer (oder 14% Mehrwertsteuer in SA) beim Speichern von Rechnungsdaten berücksichtigen?
Bearbeiten Gutes Feedback, Leute. Rechnungen und Rechnungsposten sind per definitionem unveränderlich, daher ist das Verfolgen von Änderungen nicht sinnvoll. Ein Rechnungsentwurf muss jedoch von mehreren Personen bearbeitet werden können (z. B. der Manager gewährt einen Rabatt, nachdem der Techniker die Rechnung erstellt hat), bevor er ausgestellt wird ...
4. Der beste Weg, den Rechnungsstatus zu definieren und zu verfolgen?EntwurProblematisc Voided... gezwungen, sich in eine Richtung zu ändern?