Datenbankdesign für Produkte mit Produktbündeln

13

Ich baue ein Datenbanksystem für mein Einzelhandelsgeschäft auf. Ich habe einige Tabellen eingestellt, die sind:

  • Produkt
  • Kauf
  • Der Umsatz
  • Balance

Alle sind miteinander verbunden und können meinen Lagerbestand anzeigen.

Das Problem, das ich habe, ist, dass ich auch Bündel von Produkten verkaufe - die andere Preise haben als ihre Einzelpreise.
Beispiel: Ich verkaufe eine Orange für 1 USD, einen Apfel für 1,2 USD. Ich verkaufe Obstpaket 1 (2 Orangen und 2 Äpfel) für 3,8 USD, Paket 2 (4 Orangen und 4 Äpfel) für 7 USD.

Gibt es einen richtigen Weg, um eine Beziehung für diese Produktpakete herzustellen?

PS: Ich benutze FileMaker Pro, um dies zu erstellen.

shandery
quelle

Antworten:

16

Das von Ihnen beschriebene Muster wird häufig als " Teileexplosion " oder " Stückliste " bezeichnet. Es ist Teil des Diagramm- und Baumteils bei der Untersuchung von Datenstrukturen. Der Kern der Lösung besteht darin, zu erkennen, dass jedes "Produkt" aus anderen "Produkten" bestehen kann. Das Design ist dann eine Netzwerkstruktur, in der es eine ProductTabelle gibt, die für jedes Produkt eine Zeile enthält - unabhängig davon, ob es sich um ein anderes Produkt handelt oder nicht - und dann eine Product ComponentTabelle, die für jedes Produkt eine Zeile enthält, die sich aus anderen Produkten zusammensetzt und jedes entsprechende Produkt, das Bestandteil dieses Produkts ist. In Ihrem Fall hat jedes Produkt einen Preis. Also hättest du so etwas

Product
-----------------------------------
|Name             |Price          |
-----------------------------------
|Orange           |1             |
|Apple            |1.20          |
|Fruit Package    |3.80          |
-----------------------------------

Product Component
----------------------------------------------------------
|Product               |Contains                |Quantity|
----------------------------------------------------------
|Fruit Package         |Orange                  |2       |
|Fruit Package         |Apple                   |2       |
----------------------------------------------------------

Dieser Entwurf ist einer einzelnen Tabelle mit einer rekursiven Zuordnung vorzuziehen, da hierdurch zwei Entitätstypen - Knoten und Verknüpfungen - klar voneinander getrennt werden. In unserem Fall sind die Produkte die Knoten und die Produktkomponenten die Verknüpfungen.

Während das Netzwerkdesign eine übliche Struktur ist, ist die Abfrage problematisch, da es sich bei vollständiger Ausfüllung um eine rekursive Struktur unterschiedlicher Tiefe handelt. Industrielle Stärke DBMS wie Oracle und SQL Server verfügen über spezielle Sprachelemente (CONNECT BY von Oracle und rekursives CTE von SQL Server), um die Deklaration der Abfrage zu unterstützen. Unter der Voraussetzung, dass Sie File Maker Pro verwenden, von dem ich wenig weiß, verfügen Sie möglicherweise nicht über solche Sprachkonstrukte, die Sie unterstützen könnten, und müssen möglicherweise Prozedurcode schreiben, um das Netzwerk zu durchlaufen. Dieses Problem kann jedoch behoben werden, wenn sich herausstellt, dass das Netzwerk eine feste Tiefe aufweist - beispielsweise, dass jedes Produkt entweder keine Komponenten oder eine Komponentenebene enthält. Hier einige Referenzen zu Netzwerkstrukturen im Datenbankdesign:

  1. Praktische Fragen in der Datenbankverwaltung - Fabian Pascal . Kapitel 7 bietet die beste und verständlichste Erklärung, die ich gefunden habe.
  2. Joe Celkos Bäume und Hierarchien in SQL für Smarties, zweite Ausgabe . Dies ist ein vollständiges Buch zu dem Thema, das für den SQL-Standard spezifisch ist.
  3. Unternehmensmodellmuster - David Hay . In einem Buch über Muster, die allen Organisationen gemeinsam sind (leider werden die ER-Diagramme in UML dargestellt, aber das kann überwunden werden), gibt es mehrere Beispiele für Netzwerkstrukturen.
Todd Everett
quelle