MySQL "ID Typ" in Datenbank unterscheiden

WhiZZler

Chancentod²
ID: 85586
L
6 Mai 2006
588
32
Begrüße!

Ich habe ein Problem bezüglich des Datenbank Designs. Ich habe ein Tabelle, in der Rechte gespeichert werden. Es soll möglich sein, Rechte an Benutzergruppen, aber auch an einzelne Benutzer zu verteilen. Der Aufbau der Tabelle für die Rechte der Benutzergruppen und der Aufbau der Tabelle für die Rechte für einzelne Benutzer sind genau gleich - bis auf die ID. In der einen Tabelle ist es eben eine Gruppen ID und in der anderen ist es eine Benutzer ID.

Würdet Ihr in diesem Fall zwei Tabellen anlegen? Oder eine Tabelle und in der Tabelle dann irgendwie zwischen den ID Typen differenzieren (z.B. eine extra Spalte "id_type" oder sowas in der Richtung).

Die erste Lösung finde ich irgendwie doppelt gemoppelt, die zweite Lösung erscheint mir irgendwie unsauber. Da ich mit Sicherheit nicht der erste bin, der auf so ein Problem stößt gibt es da doch sicherlich irgendeine Best Practice Lösung oder sowas :LOL: Ich weiß aber ehrlich gesagt nicht so richtig, wonach ich suchen muss..

Danke im voraus,
MfG,
whizzler
 
Wie wäre es mit Lösung 3 ;)
Benutzergruppen und Benutzer befinden sich in einem Nested-Set für die Hierarchien.
Beide joinen auf eine Rechte Tabelle die additiv die Rechte addiert.

Es ist nur eine Tabelle, und Gruppen sowie Benutzer können gleich behandelt werden.
 
Funktioniert leider nicht, da die Benutzer mehreren Gruppen angehören können. Ich muss das Ganze leider in ein bereits existierenden System einbauen und habe deswegen keine Möglichkeiten, daran etwas zu ändern.
 
hmm.. ok.. danke..

ich glaube ich werde es so lösen, dass ich in der tabelle zwei verschiedene id spaten anlege.. also einmal "role_id" und einmal "user_id".. je nachdem, in welcher spalte dann ein wert steht, handelt es sich logischerweise um rechte für eine rolle oder für einen benutzer.. standardwert der id spalten ist dann eben null
 
Verstehe ich Lösung zwei so richtig:

RECHT (recht, inhaber, inhaber_typ)

und inhalber_typ darf die beiden Werte "gruppe" oder "benutzer" besitzen.

So sollte man es auf keinen Fall machen! Es wird damit nicht möglich sein, auf "inhaber" einen Fremdschlüssel zu setzen, da er zwei Tabellen (Benutzer und Benutzergruppe) referenziert.

Was du machen kannst:

RECHT (recht, benutzer, gruppe)

Eins von benutzer und gruppe ist immer NULL.

Oha, ich sehe gerade. Genau das ist auch das, was du als letztes vorgeschlagen hast. Prima :)