1

Ich arbeite mit Ruby on Rails, aber diese Frage gilt für die Anwendung/Datenbank-Modell-Design im Allgemeinen. Ich möchte viele Arten von Personen wie Benutzer (jemand, der sich einloggen kann), Mitarbeiter und Kunde modellieren. Jeder von diesen hat gemeinsame Attribute wie Name und E-Mail, die Teil einer Person Superklasse sein sollten. Jeder Typ hat auch andere spezifischere Attribute. Eine Person kann eine oder mehrere dieser Rollen sein (jemand kann sowohl ein Angestellter als auch ein Kunde sein).Rails Person Modell mit verschiedenen Rollen als Unterklasse

In Code scheint die entsprechende Struktur wie eine Superklassen-/Unterklassenbeziehung zu sein, aber aus einer Datenbanknormalisierungsperspektive sollte es eine Customer-Tabelle geben, die auf die Personentabelle für ihre gemeinsamen Attribute verweist.

Ich muss entscheiden, wie diese beiden Ansätze kombiniert werden.

Zum Beispiel möchte ich in der Lage sein, einen Kunden von Customer.create(name: “Johnny Appleseed”, favorite_product: widget) erstellen und Abfrage Employee.where(email: “[email protected]”), und vermeiden Sie die Person Felder in jedem Rollenmodell zu duplizieren. Auf diese Weise kann ich die Art und Weise ändern, wie ich eine Person modelliere, ohne dass alle anderen Tabellen mit den gleichen Änderungen aktualisiert werden müssen.

+0

Kann der Benutzer dieselbe Person wie Kunde und Mitarbeiter sein? Ich denke, Sie versuchen wirklich, einen Tisch zu haben, mit einer Möglichkeit zu sagen, welche Person Mitarbeiter, Kunde oder beides ist. –

+0

Denken Sie "Rolle" <"Person", wenn Sie sagen, dass die entsprechende Struktur wie eine Superklassen-/Unterklassenbeziehung aussieht? – jvillian

Antwort