T. M.: Problem beim Entwurf einer Datenbankstruktur

Beitrag lesen

Hallo Leute,

bin gerade dabei eine Datenbankstruktur(MSSQL-DB) für ein Intranet-Mailprogramm mit ASP.net (Verwaltung von Verteilerlisten, Massenmailversand) zu entwerfen.

Ein Mitarbeiter kann bestimmte Verteiler/Newslisten abonnieren.

Die Listen werden nach bestimmten Gruppen gegliedert, d.h. es gibt pro Gruppe einen "GRUPPENADMINISTRATOR" Dieser kann neue Listen erstellen und für seine Gruppe "DELEGIERTE" bestimmen die seine Funktion übernehmen können. (z.B. bei Abwesenheit).

Zudem gibt es noch den "ADMINISTRATOR", welcher als darf und kann, egal welche Gruppe. (Er darf also auch neue Gruppen eröffnen)

Da jeder Mitarbeiter anhand seiner Personalnummer eindeutig identifiziert werden kann, benutze ich diese gerade als Primärschlüssel(id_users) der Benutzer-Tabelle. Kompliziert ist vorallem, dass ein Benutzer als Administrator oder eben, ein Administrator auch als normaler Benutzer auftreten kann. Ein Administrator muss also auch Listen abonnieren können.

tbl_users     tbl_groups        tbl_lists
---------     ----------        ----------
id_users--+   id_groups  ---+   id_lists   ----+
password  |   name          +-- id_groups      |
..        |   description       name           |
.         |                     description    |
          |                                    |
          |                                    |
          |                                    |
          |   tbl_users_lists                  |
          |   ---------                        |
          +-- id_users                         |
              id_lists ------------------------+

1. Frage:
Wie integriere ich nun am besten die "GRUPPENADMINISTRATOREN", die "DELEGIERTEN" und die "ADMINISTRATOREN"?

Als 1. Lösung bin ich auf folgende Idee gekommen:

Ich habe mir vorgestellt, folgende zusätzlichen Tabellen zu erstellen um die GRUPPENADMINISTRATOREN", die "DELEGIERTEN" und die "ADMINISTRATOREN" zu integrieren:

tbl_groupadmins    tbl_groups_groupadmins
---------------    ----------------------
id_users           id_groups
....               id_users
..

tbl_delegated      tbl_groups_delegated
-------------      ----------------------
id_users           id_groups
....               id_users
..

tbl_admins         tbl_groups_admins
----------         ----------------------
id_users           id_groups
....               id_users
..

Doch das Problem hier ist die Benennung: Es ist verwirrend dass die Tabelle z.B. tbl_groups_admins heisst und nachher aus id_groups und id_users zusammengesetzt ist..? Wie macht man sowas?

Als 2. Lösung bin ich auf die folgende Idee gekommen um das Problem mit der Benennung zu umgehen:

tbl_groupadmins    tbl_users_groupadmins     tbl_groups_groupadmins
---------------    ----------------------    ----------------------
id_groupadmins     id_users                  id_groups
                   id_groupadmins            id_groupadmins

tbl_delegated      tbl_users_delegated       tbl_groups_delegates
-------------      -------------------       --------------------
id_delegated       id_users                  id_groups
                   id_delegated              id_delegates

tbl_admins         tbl_users_admins          tbl_groups_admins
----------         ----------------          -----------------
id_admins          id_users                  id_groups
                   id_admins                 id_admins

Was mir hier nicht sinnvoll erscheint ist ersichtlich wenn man sich die Werte darin vorstellt.

tbl_admins         tbl_users_admins          tbl_groups_admins
----------         ----------------          -----------------
P1111              P1111                     92
                   P1111                     P1111

Wie würdet ihr das machen?

Also, für eure Vorschläge und Tipps bin ich euch sehr dankbar!

Gruss T.M.