was ist der beste Weg, um eine viele-zu-viele-Beziehung in einer Datenbank zu repräsentieren?

StackOverflow https://stackoverflow.com/questions/1610411

Frage

Wenn ich eine Anzahl von Benutzern und eine Anzahl von Seiten haben, und jeder Benutzer eine beliebige Anzahl der Seiten verwalten können, und jede Seite kann durch eine beliebige Anzahl der Administratoren verwaltet werden, wie konnte ich speichern alle diese Berechtigungen in ein Datenbank?

Zum Beispiel könnte ich ein Feld in der Tabelle users habe, das ist nur eine durch Kommata getrennte Liste von Seiten-IDs oder ein ähnliches Feld in für jede Seite (administriert ... etc). Aber das würde erfordern, dass ich die Zeichenfolge verarbeiten, nachdem es aus der Datenbank kommt.

Ich könnte jedem Benutzer seinen eigenen Tisch geben, mit einem Schlüssel => Wert Art von Layout, wo ich user => einbenutzer haben würde, name => einen Typ, permissions => was auch immer, page_id => 4, page_id = > 8, page_id => 12 usw. Aber das scheint chaotisch und zusätzliche Berechtigungen für den mySQL-Benutzer erfordern würde.

Unter der Annahme, die Anzahl der Seiten relativ klein sein (es wird), habe ich eine ‚Flags‘ Art von Feld in die Benutzer-Tabelle setzen könnte, ein 32-Bit-INT (es würde nicht mehr als 32 ‚Seiten‘ werden in dieser Implementierung). aber das würde nur erlaubt eine Ein- / Aus-Art von Privileg.

Ich habe auch eine Benutzertabelle hat, betrachtet und dann jeder Punkt Benutzer Zugang zu einer Berechtigungstabelle für den Benutzer, die eine Zeile für jede Seite mit den entsprechenden Berechtigungen für diesen Benutzer haben würden - das ist sauberer als die anderen " Tisch-per-User“Lösung, die ich aufgelistet, aber wieder müssen auch zusätzliche Privilegien für das mySQL-Konto.

Jede andere Ideen? wobei die schmerzfreie Lösung dieses Problems Was ist Ihrer Erfahrung, windet sich?

War es hilfreich?

Lösung

viele <-> viele Beziehungen sind in der Regel mit einer Zwischentabelle modelliert. In Ihrem Fall würden Sie diese Tabellen:

User        UserPage       Page
------      -----------    -------
UserID      UserID         PageID
...         PageID         ...

Die Zwischentabelle (UserPage hier) finden Sie Informationen speichern, die zu diesem Satz von IDs (Ihren Berechtigungen, in diesem Fall) insbesondere sind.

Andere Tipps

die kanonische Weise ist eine Zwischentabelle haben, mit nur zwei Felder: der Primärschlüssel jedes der angeschlossenen Tabellen

.

Was Sie brauchen, ist eine Zuordnungstabelle.

USER ----- ----- SEITEN

Der Primärschlüssel für die neue Tabelle ist ein Verbundschlüssel aus der user_id und der page_id

Dies gibt Ihnen die größtmögliche Flexibilität und ermöglicht neue Seiten ohne hinzugefügt werden, die das Schema zu ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top