yo,
wenn ich dich richtig verstanden habe, dann hast du erst einmal drei entitäten:
- user: id_user, name,...
- groups: id_groups, name, description
- lists: id_lists, name, description,...
daraus ergeben folgende beziehungstabellen:
jeder user kann einer oder mehrerer(falls nur eine gruppe möglich entsprechend ändern 1:n) gruppen angehören, jede gruppe kann einen oder mehrere user haben. ein group kann einen oder mehrere delegierte besitzen. jeder user kann mehrere groups als vertretung administrieren. delegiert ist ein flag (0/1), ob er delegierterder group ist.
- user_groups: id_user, id_groups, delegiert -> n:m beziehung
ein user kann eine oder mehrere groups verwalten. eine group hat genau einen admin.
- fremdschlüssel in der tabelle groups der auf die users referenziert -> 1:n beziehung
jede group kann eine oder mehrere listen abnonnieren, jede liste wird genau einer group zugeordnet (hier wäre eventuell zu überlegen, ob es nicht wünschwenswert ist, ob eine liste auch mehreren groups zugeordnet werden kann):
- fremdschlüssel in der tabelle lists der auf die group referenziert -> 1:n beziehung
was die rechte angeht des "super-admin" betrifft, so solltest du bei user eine spalte dazunehmen, die einen user als solchen kennzeichnet. will jemand etwas an einer group ändern, zum beispiel eine neue list dazu nehmen oder löschen, sind skripte entsprechend so zu programmieren, dass auf drei dinge geprüft wird. ist er:
1. super-admin
2. group admin
3. delegierter der group
ausserdem ist zu überlegen, ob eine group ebenfalls verschwinden soll und somit alle lists der group, wenn ein group administrator aus der user tabelle gelöscht wird.
ps: ich finde den namen der tabelle "doppelt gemoppelt". es gibt zwar sicherlich auch andere datenbankobjekte, aber um ehrlich zu sein, ich bin bis jetzt noch nicht auf das problem gestossen, eine tabelle nicht als soche zu erkennen. das ist ein wenig so, als wenn ich zwei hunde habe und den einen hund_lessie nenne und den anderen hund_hektor. aber das ist geschmackssache und kann man halten wie ein dachdecker.
Ilja