2009-03-16 6 views
0

Ich habe eine einfache E-Commerce-Website, die Benutzer mit Konten, Bestellungen und Kontakt/Rechnungsinformationen für diese Benutzer haben wird. Ich wollte nur wissen, wie diese Tabellen am effizientesten und am logischsten aufgebaut werden können. Bisher habe ich grundsätzlich zwei verschiedene Entitäten, Benutzer und Aufträge. Benutzer haben grundlegende Kontoinformationen wie Name und Passwort, Bestellungen enthalten alle Informationen über die bestimmte Reihenfolge.Datenbank-Design, wie Tabellen zu erstellen

Meine Frage ist, sollte ich alle Kontakt-/Rechnungsinformationen in die Benutzertabelle aufnehmen oder zwei separate Tabellen erstellen, die Kontakt- und Rechnungsinformationen enthalten?

+0

Sure sieht aus wie Hausaufgaben. –

+0

Es kann sein - aber das ist nicht etwas, das ich eine volle ERD auf jeden Fall kostenlos machen würde. Ratschläge, wie man Dinge aufstellt, scheinen eine faire Frage zu sein. –

+0

Es ist für ein Projekt für die Arbeit, aber es ist auch ein allgemeiner Ratschlag, den ich brauche, da ich mit dem Datenbank-Design ein wenig eingerostet bin. – roflwaffle

Antwort

4

Man könnte darüber ein wenig mehr denken:

Die Benutzer haben einen Kontakt und Rechnungsadresse, was über den Versand und andere Adressen? Ist es möglich, zwei Benutzer aus einem Unternehmen mit unterschiedlichen Kontaktadressen, aber derselben Rechnungsadresse zu haben? Ist es möglich, dass ein Benutzer mehrere Rechnungsadressen hat, die er zum Zeitpunkt der Bestellung auswählen wird?

Was passiert dann, wenn ein Kunde seine Rechnungsadresse aktualisiert und dann eine Bestellung abruft, bevor die Rechnungsadresse geändert wurde? Sollte die Rechnungsadresse auf der alten Bestellung die neue oder die aus der Bestellung sein?

Wenn das Problem so einfach ist, wie Sie es beschreiben, und ein Benutzer hat einfach Kontakt- und Rechnungsadressen, und es gibt keine anderen "was wäre wenn", dann ist es sinnvoll, diese Adressen einfach in die Tabelle des Benutzers zu legen.Aufgrund meiner begrenzten Erfahrung in dieser Domäne können Sie jedoch sehr wohl feststellen, dass Adressen eigene Entitäten sein müssen, die von bestimmten Benutzern getrennt sind. In der Tat kann es sein, dass Sie einen "Benutzer" als "Kontaktadresse" betrachten.

1

Ich denke, die Kontaktinformationen sollten in der Benutzer-Tabelle sein, es gibt keine Notwendigkeit, es auf dedizierte Postleitzahl Tabellen usw. zu normalisieren. Das Gleiche gilt für die Rechnungsinformationen, wenn sie vielleicht Kreditkartennummer oder so ähnlich sind. Wenn die Abrechnungsinformation einen bestimmten Plan bedeutet, würde ich die verschiedenen verfügbaren Pläne in eine separate Tabelle setzen und sie mit einem Fremdschlüssel "verknüpfen".

1

Wenn Sie suchen kontaktieren und Abrechnungsinformationen zur gleichen Zeit, und Sie werden selten nur einer von ihnen verwenden werden dann keine Verwendung gibt es sie in verschiedenen Tabellen zu trennen, da Sie sie trotzdem werde Beitritt .

Auf der anderen Seite, wenn Sie oft nur Kontakt oder Abrechnung suchen, kann die Leistung von der Trennung profitieren.

Ich persönlich würde sie nicht trennen, da ich viele Male nicht vorhersehen kann, wo ich beide nicht haben will.

2

Kontakt, Rechnungsstellung und Versand (falls erforderlich) Informationen sind logisch getrennt. Aus reiner Normalisierungssicht sollte eine Adresse eine separate Entität sein und Sie sollten eine Beziehung zwischen Kunden und Adressen haben. Der "richtige" Ansatz aus Sicht der Normalisierung hätte eine Viele-zu-Viele-Beziehung zwischen Kunden und Adressen, mit einem Typ zur Unterscheidung zwischen Rechnungs-, Kontakt- und Lieferadressen (vorausgesetzt, es ist zulässig, mehr als jeweils eine zu haben). .

Sie müssen auch Ihre Produkte berücksichtigen. Ein gängiger Ansatz besteht darin, eine Auftragstabelle mit einer darunter liegenden Linientabelle zu erstellen (Eins-zu-Viele-Beziehung von Auftrag zu Linien). Jede Linie verweist auf ein einzelnes Produkt mit einer Menge, einem Preis und anderen relevanten Informationen (Rabatt usw.). Einfache Preisgestaltung kann mit einem Preiseintrag in der Produkttabelle erfolgen; komplexere Preisstrategien erfordern natürlich mehr Aufwand.

Bevor jemand sagt, ich bin zu weit gegangen: "einfache" Websites entwickeln sich oft. Wenn Sie Ihr Datenmodell vorher richtig einstellen, werden Sie unzählige Todesfälle ersparen.

0

Haben Sie Fälle, in denen ein "Benutzer" mehrere Kontakte haben könnte?

Ich hatte Datenbanken Designs, wo ein "Kunde" mehrere Kontakte haben könnte, und in solchen Fällen sollten Sie eine separate Tabelle für Kontakte pflegen. Anderenfalls können Sie die Benutzer und ihre Kontaktinformationen in der gleichen Tabelle behalten, da Sie sie immer zusammen abfragen.

Verwandte Themen