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 Tabell
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 Tabell
LineId (int) // Primary key
InvoiceId (int) // related to Invoices above
Quantity (decimal(9,4))
Title (nvarchar(512))
Comment (nvarchar(512))
UnitPrice (smallmoney)
Revision SchemaInvoiceRevisions Tabell
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)
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

2. Wie verfolge ich die Revisionen von Rechnungsposten?

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.

3. MwS

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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage