MySQL datenbankstruktur user, gruppen und projekte

adblue

Well-known member
24 Juli 2009
57
2
hi

ich habe ein kleines php-projekt mit folgenden datenbanken: user, projekte und grupppen.

jeder user muss ich einer gruppe innerhalb eines projektes sein.

dazu verwende ich die datenbank 'user_to_gruppen' mit folgenden spalten: userID und gruppenID

mein problem ist jetzt. ich will die mysql datenbank fragen welcher user zu dem projekt mit der id = 1 gehört. mit dieser obengenannten datenbank geht das nicht. ich muss den umweg über die gruppen gehen. kann ich auch eine datenbank anlegen mit folgenden spalten: userID, gruppenID und projektID ? macht das ganze sinn?



danke
 
mit dieser obengenannten datenbank geht das nicht. ich muss den umweg über die gruppen gehen.

Ist das Projekt von der Gruppe abhängig oder vom User?
Wenn es abhängig vom User ist (was mehr Sinn machen würde soweit ich das verstehe) könntest du einfach eine neue Tabelle 'user_to_projects' einführen und die projektID aus den jeweiligen Gruppen löschen.

Sollte das Projekt abhängig von der Gruppe sein, musst du halt eine weitere Tabelle 'gruppen_to_projects' einführen und dann den Umweg über die Gruppen machen.
 
# gruppen
idgruppe

# projekte
idprojekt

# user
iduser
figruppe


Jetzt brauchst du eine Zwischentabelle (zwei, wenn ein User in mehreren Gruppen sein darf):

# projekte_gruppen
idfigruppe
idfiprojekt

ich will die mysql datenbank fragen welcher user zu dem projekt mit der id = 1 gehört

PHP:
SELECT iduser FROM user, projekte_gruppen WHERE figruppe = idfigruppe AND idfiprojekt = 1
 
hi nochmal so ganz versteh ich das noch nicht.


also vorgabe: ein user kann innerhalb eines projektes nur in einer gruppe sein. der user kann allerdings in mehreren projekten sein.


wie sieht die db dann aus?
 
dann brauchst du drei Tabellen für
- User
- Gruppe
- Projekt

und zwei Tabellen für Zuordnungen
- User-Gruppe -> welcher User gehört zu welcher Gruppe (ein User kann da natürlich mehrfach auftauchen)
- Gruppe-Projekt -> welche Gruppe gehört zu welchem Projekt

Die Einschränkung, dass jeder User nur in einer Gruppe eines Projekts sein darf, lässt sich damit aber nicht so ohne weiteres abbilden...
 
Wenn man die Zuordnung anders speichert, kann man das recht simpel abbilden:
Code:
project_users: [U]project_id[/U] | [U]user_id[/U] | group_id
Somit kann ein Nutzer innerhalb eines Projektes unweigerlich nur in einer Gruppe sein.
 
ok soweit verstanden. wie würde es aussehen, wenn ein user doch in mehreren gruppen innerhalb eines projekts sein kann?


danke!!!
 
Code:
project_users: [U]project_id[/U] | [U]user_id[/U] | group_id
Somit kann ein Nutzer innerhalb eines Projektes unweigerlich nur in einer Gruppe sein.
Das stimmt natürlich... Ich hatte mich wohl zu sehr daran festgebissen, dass der User in eine Gruppe und die Gruppe zum Projekt gehört, wenn man eine User-zu-Projekt-Zuordnung erstellt und die Gruppe nur als Zusatzinfo mit reinhängt, geht das natürlich... Allerdings ist dann die Info, welche Gruppe zu welchem Projekt gehört, redundant vorhanden...

wie würde es aussehen, wenn ein user doch in mehreren gruppen innerhalb eines projekts sein kann?
Dann kannst du es genau so bauen, wie ich oben geschrieben habe...
 
ok soweit verstanden. wie würde es aussehen, wenn ein user doch in mehreren gruppen innerhalb eines projekts sein kann?
danke!!!

Dann kannst du es genau so bauen, wie ich oben geschrieben habe...

ja oder wie tleilax geschrieben hat. Einzige Änderunge wäre die Erweiterung des PK:mrgreen:

Code:
project_users: [U]project_id[/U] | [U]user_id[/U] | [U]group_id[/U]
 
ja oder wie tleilax geschrieben hat. Einzige Änderunge wäre die Erweiterung des PK:mrgreen:

Code:
project_users: [U]project_id[/U] | [U]user_id[/U] | [U]group_id[/U]
Dann wäre aber wieder - wie oben schon geschrieben - die Info, welche Gruppe zu welchem Projekt gehört, redundant vorhanden. (Und diesmal ohne Vorteil, für den man das in Kauf nimmt.)
 
Das ist natürlich richtig. Allerdings müsste man dann keinen Join machen:roll:

Aber durch die Brille der Normalisierung hast du mit deiner Lösung natürlich den Besten Vorschlag geliefert.;)