Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Relationales Datenbankdesign für mehrere Benutzertypen

Ihr Fall sieht aus wie eine Instanz einer Klasse/Unterklasse.

Es gibt zwei klassische Möglichkeiten, SQL-Tabellen für den Umgang mit Unterklassen zu entwerfen. Jeder hat Vor- und Nachteile.

Eine Möglichkeit heißt "Single Table Inheritance". In diesem Design gibt es nur einen Tisch für alle Arten von Benutzern. Wenn eine bestimmte Spalte nicht zu einer bestimmten Zeile gehört, bleibt die Schnittmenge NULL. Es kann eine Spalte hinzugefügt werden, um den Benutzertyp anzugeben.

Ein anderer Weg heißt "Klassentabellenvererbung". Dies ist ähnlich wie die Antwort, die Nanego gegeben hat, mit ein paar geringfügigen Änderungen. Es gibt eine Tabelle für Benutzer mit allen gemeinsamen Daten und einem ID-Feld. Es gibt eine Tabelle für jede Unterklasse mit Daten, die sich auf diese Unterklasse beziehen. Das ID-Feld wird häufig als Kopie des ID-Felds in der entsprechenden Zeile in der Benutzertabelle eingerichtet. Auf diese Weise kann der Unterklassenschlüssel eine doppelte Aufgabe erfüllen und sowohl als Primärschlüssel als auch als Fremdschlüssel fungieren, der auf die Benutzertabelle verweist. Diese letzte Technik wird "Shared Primary Key" genannt. Es erfordert ein wenig Programmierung beim Einfügen, aber es lohnt sich. Es erzwingt die Eins-zu-Eins-Beziehung und beschleunigt die erforderlichen Joins.

Sie können alle drei Designs als Tags in SO oder als Artikel im Internet nachschlagen.