Database
 sql >> Datenbank >  >> RDS >> Database

Datenbankdesign 101

Eine gute Datenmodellierungsübung für Anfänger ist das Erstellen eines Datenmodells eines Onlineshops . Jedes Mal, wenn ich diese Übung meinen Schülern gebe, bin ich überrascht, wie schwierig sie für sie ist.

Finde die Konzepte...

Mal sehen, wie es gemacht werden kann. Wir wissen, dass wir für jedes Konzept in der Domäne eine Tabelle erstellen müssen. Denken Sie an die Substantive und Nominalphrasen Sie verwenden würden, um die Domäne zu beschreiben. Grob gesagt ist jedes Substantiv entweder ein Konzept, ein Attribut eines Konzepts oder ein Beispiel . Was sind die grundlegenden Konzepte in einem Online-Shop? Mir fallen sofort zwei Wörter ein:

  • Kunden – Personen, die in unserem Geschäft einkaufen, und
  • Produkte – Artikel, die die Leute in unserem Shop kaufen.

Jeder Kunde hat einen grundlegenden Datensatz, der ihn beschreibt:ID (normalerweise benötigen Sie ein ID-Attribut in Ihrer Tabelle), Name, E-Mail und Passwort. Ebenso hat ein Produkt eine ID und einen Namen. Wir könnten weitere Attribute für Kunden und Produkte hinzufügen, aber für dieses Beispiel reichen diese aus. Wir fügen die beiden Tabellen in unser Modell ein.

... sowie die abstrakten Konzepte

Dies ist ein Geschäft, also wollen wir natürlich wissen was bestellt wurde und von wem . „Order“ ist ein Schlüsselwort in den meisten Datenbanken, daher sollten wir es nicht für einen Tabellennamen verwenden. Stattdessen verwenden wir den Namen purchase für die dritte Tabelle in unserem Modell. Die Tabelle muss irgendwie mit dem customer verbunden sein und zum product . Lassen Sie uns für den Anfang einfach eine Referenz zwischen purchase ziehen und customer , und zwischen purchase und product .

Der customer-purchase Bezug ist ok. Jeder Kauf wird von einem Kunden getätigt; Jeder Kunde kann mehrere Einkäufe tätigen. Diese Referenz ist hier, um zu bleiben.

Allerdings stimmt etwas mit dem purchase-product nicht Hinweis. Mehrere Produkte können in einem Einkauf gekauft werden; mehrere Käufe können dasselbe Produkt enthalten. Unsere Referenz erlaubt jedoch nur den Kauf eines Produkts in einem einzigen Kauf. Lassen Sie uns die Referenz löschen und über eine andere Art der Modellierung nachdenken.

Ein großes Textfeld für alle gekauften Produkte?

Wie wäre es, wenn wir ein großes Textfeld hinzufügen, das die Namen oder IDs der gekauften Produkte speichern kann? Jetzt können wir mehrere Produkte in einem Einkauf kaufen. Allerdings gibt es hier einige Probleme:

  • Erstens ist es schwierig zu überprüfen, ob das Produkt in den purchased_items Feld ist wirklich in der Datenbank.
  • Zweitens, wenn Sie den Namen des Produkts ändern möchten (weil Sie ihn falsch geschrieben haben), müssen Sie alle purchased_items aktualisieren Feldinstanzen im purchase Tabelle.
  • Schließlich ist es schwierig, Daten in der Datenbank zu analysieren. Wenn Sie beispielsweise herausfinden möchten, welches Produkt am häufigsten gekauft wird, müssen Sie eine Textteilzeichenfolgenoperation verwenden. Und das ist nie sehr effizient.

Mehrere Produktspalten in der Einkaufstabelle?

Welche anderen Optionen gibt es? Wir möchten, dass ein Kauf mit mehreren Produkten verbunden ist, also sollten wir vielleicht mehrere purchase_item hinzufügen Spalten in einer Einkaufstabelle? Nun, das ist lästig (ich habe nur 5 Spalten hinzugefügt und wurde müde) und erzeugt ein künstliches und dummes Begrenzung der Anzahl der gekauften Produkte.

Verwenden Sie eine Zwischentabelle!

Die dumme Lösung weist auf die richtige Lösung hin. Wir wollen eine unbegrenzte haben Anzahl der mit dem Kauf verbundenen Produkte. Die einzige Möglichkeit besteht darin, eine Zwischen-Verbindungstabelle zu haben . Nennen wir es purchase_item . Der purchase_item Tabelle ist mit purchase verbunden und product . Jetzt kann ein Kauf beliebig viele Produkte enthalten. Als Bonus können wir der Tabelle zusätzliche Daten hinzufügen:wie oft gekauft, Gesamtpreis für diesen Artikel und so weiter.


Schlussfolgerungen:

  • Tabellen im Modell können nicht nur physische Objekte darstellen wie Kunde oder Produkt. Tabellen können abstraktere Konzepte darstellen wie ein Kauf. Andere Beispiele könnten eine Buchung in einem Hotelreservierungssystem, eine Buchausleihe in einem Modell für eine Bibliothek, ein Termin in einem System für Ärzte usw. sein.
  • Wenn Sie eine Transaktion modellieren (d. h. den Kauf oder Verkauf vieler Dinge), benötigen Sie normalerweise drei Tabellen :eine für die Transaktion (Kauf oder Buchung in einem Hotelreservierungssystem), eine für in einer Transaktion gekaufte/verkaufte Dinge (Produkt, Hotelzimmer) und eine für Transaktionselemente (purchase_item, booking_item). Bei Bedarf können Sie weitere Informationen in der Zwischentabelle hinzufügen.

Erstellen Sie Ihr eigenes Shop-Datenbankmodell mit Vertabelo!