Frage

Ich habe ein Problem, das ich erwarte, ist sehr häufig, aber ich bin nicht sicher, worauf ich suchen kann, da er auf viele verschiedene Arten erklärt werden kann.

Ich entscheide eine Datenbankstruktur für die Verwaltung von Rechnungen, Produkten, Preisen, Währungen usw.

Ich bin in der Lage, Preise und Namen der Produkte zu verwalten (diese werden voraussichtlich ab und zu ändern).

auf Rechnungen, Produkte werden mit Quantität hinzugefügt, mit Rabatt, MwSt., Einhörner, Eichhörnchen usw., und dann wird die Gesamtsumme der Rechnung berechnet.

Nun, wenn ein Preis in der Produkttabelle aktualisiert wird, soll die Rechnung nicht sich ändern. Es muss für immer gleich bleiben.

Wenn Sie darüber nachdenken, scheint es mir, dass die Produktliste eine Liste von Objektlisten ist, die eine Liste von "Klassenart" -Onobjekte ist, die beschreiben, wie ein Produkt aussieht. Oder wir könnten es als "Template" oder "Base" oder "Abstract" nennen, je nachdem, welche Abstraktion wir denken.

Die der Rechnung hinzugefügten Produkte sind "Instanzen", "Implementierungen", "Kinder", "versionierte Datensätze" oder was auch immer wir angerufen würden.

Wie würde ich das in der Datenbank strukturieren? Ich könnte sie in zwei verschiedene Tabellen "AbstractProduct" und "Produkt" teilen, aber sie hätten am meisten (möglicherweise alle) ihrer Kolumne gemeinsam. In diesem Zusammenhang scheint es angemessen zu sein, sie in derselben Tabelle zu halten. Dann brauche ich dann eine zusätzliche Spalte, um anzuzeigen, ob es sich um "Klasse" oder "Instanz" handelt. Das ist auch in Ordnung. Dies könnte auch ein Auslagerkäufer für die Klasse sein, der er erstellt wurde, von (oder null für Klassen).

Ich habe verschiedene Ansätze ausprobiert, aber alles scheint nervige Vorbehalte zu haben.

ist das ein bekanntes Muster? Wie heißt es? Gibt es Best Practices, um dieses Problem zu lösen?

War es hilfreich?

Lösung

Es ist ein bekanntes Muster.Wenn Sie eine umfangreiche Literatur zu diesem Thema wünschen, suchen Sie auf "Temporale Datenbank".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top