[MySQL] Datenbanktherorie / User vs. Topic Management

NIL Light

Grünschnabel
Hallo,

ich habe mich hier gerade angemeldet, und hier scheinen viele Profis zu Gange zu sein. Und ich könnte ein wenig Hilfe benötigen...

Also, um folgendes geht es: Ich erstelle gerade mit PHP und MySQL eine (noch sehr kleine) Team-Collaboration-Anwendung. Damit sollen eines Tages über verschiedene Länder verteilte, variable Teams online an verschiedenen Projekten zusammenarbeiten können. Kurz gesagt wird das Ganze eine Art "Think Tank", in der Spezialisten aus verschiedenen Fachbereichen partizipieren können, um (hoffentlich synergetisch) Lösungen für eingereichte Probleme zu erarbeiten.

In der MySQL-Datenbank habe ich dafür bislang diese ersten Tabellen erstellt:
- PROJECTS
- PROJECT_HISTORY
- PROJECT_MILESTONES
- PROJECT_TASKS
- USER
- CONTACTS
- KNOWLEDGE_GROUPS

Die wichtigsten beiden Tabellen sind derzeit PROJECTS und PROJECT_HISTORY. In der Tabelle PROJECTS sind die Basisdaten eines Projektes hinterlegt. Ich habe versucht – soweit das Thema Normalisierung bisher bei mir "gesackt" ist (und trotz vielem "googlen" wird es spätestens bei der dritten Normalform derzeit noch etwas zu abstrakt für mich) - dort nur die nicht redunanten Eigenschaften (Kerndaten) zu hinterlegen und alles andere "auszulagern" (z.B. wichtige Projektziele in der Tabelle PROJECT_MILESTONES, den Projektverlauf in PROJECT_HISTORY (eigentlich mehr eine Art "Blog"), Projektteilnehmer über USER und CONTACTS, usw.). Auf der Eingangsseite sieht man schön, wer gerade eingeloggt ist, wann man selbst das letzte mal online war und eine Art "Top Ten" zeigt die Projekte an, deren Lösungsfälligkeit am zeitnahsten ist. Soweit bin ich damit auch schon für's erste fast schon überglücklich, denn: es klappt alles, sogar die User-Logins funktionieren einwandfrei und dank endlich (seit gestern nacht) verstandenem PHP-Session-(Variablen)-Konzept hat die URL im Browser endlich wieder eine erfreuliche Kürze erreicht.

Je nun, jetzt fängt mein Problem an: Die USER-Tabelle. Woran ich "denktechnisch" gerade knabbere, ist folgendes: Ich möchte es so gestalten, dass die Teilnehmer "filtern" können, welche Projekte sie sehen und/oder der (Gruppen)-Supervisor das definieren kann. Beispiel: Projekt A dürfen alle aus der Tabelle USER sehen (Topic of Global Interest), Projekt B dürfen alle USER sehen, die einer der KNOWLEDGE_GROUPS angehören (z.B. der Gruppe Politilogen, Soziologen, Volkswirtschaftler, Mathematiker, Biologen, Ökologen, Klimatologen etc. (auch wenn eine derartige Filterung zunächst scheinbar gegen das Synergie-Konzept verstößt, macht es - so scheint mir - der Usability zu liebe Sinn)). Das Problem vor dem ich nun stehe ist: Wo setze ich die Filterung am Sinnvollsten an? Auf Grund der gewünschten variablen Struktur, möchte ich den "Access Level" nicht in der Tabelle PROJECTS hinterlegen (weil dann potenzielle Interessenten an dem spezifischen Projekt ja automatisch ausgeschlossen wären?). Eine Möglichkeit scheint mir zu sein, eine Tabelle anzulegen, in der für die USER gespeichert ist, für welche Projekten sie sich angemeldet haben bzw. zu denen sie eingeladen wurden. Angenommen ein USER ist als Teilnehmer der KNOWLEDGE_GROUPS Biologen definiert. Er soll also nun also zunächst (automatisch) nur alle PROJECTS sehen können, die thematisch in seinen Fachbereich liegen. Dafür müsste ich aber wiederum definieren, zu welchem Fachbereich das Thema gehört, und genau das will ich eigentlich vermeiden, um die vorliegende Idee der Cross-Faculty-Synergy nicht zu zerstören. Irgendwie beißt sich bei mir derzeit also die Katze in den Schwanz, aber vielleicht sehe ich nach mittlerweile fast 1000 Zeilen Code vor lauter PHP und MySQL auch einfach nicht mehr klar und mache das ganze komplizierter als es vielleicht ist...

Bei einem Redaktionssystem scheint mir die Sache klar zu sein: Als Autor eines Artikel definiere ich bei der Erstellung des Artikels, dass den nur bestimmte Benutzergruppen (registrierte Benutzer oder Gäste oder Admins etc.) lesen dürfen. Die Übertragung dieses Modells auf diese Anwendung ist es, was mich derzeit in den Wahnsinn treibt: Letzte Nacht habe ich von phpMyAdmin geträumt und immer wieder die selbe Tabelle angelegt...

Vielleicht kann mir ja hier jemand ein paar Anregungen geben, oder kennt vielleicht eine gute Abhandlung über kontextsensitives, variables User Access Level Management? Über Google bin ich bislang nicht so richtig weitergekommen und an den gefundenen Stellen dreht es sich meist um konkrete, programmiertechnische Probleme (konkrete MySQL-Fehler etc.). Die habe ich zwar auch, mein Problem ist aber eigentlich mehr ein Datenbank/User-Management-Theoretisches. Der Artikel von Patrick Kamin "Rechteverteilung verschiedener Benutzergruppen" aus diesem Forum muss übrigens erstmal über das Wochenende "sacken", scheint mir aber nach schnellem Überfliegen neue Perspektiven zu eröffnen.

Ich wäre sehr erfreut, falls mir hier jemand ein paar (Verweise auf) theoretische Abhandlungen über diese Art der Relation Topic <–> User geben kann. Ich habe mir auch schon überlegt, mir die Tage mal eine Board-Community-Software wie vBulletin oder phpbb zu installieren, um die dahinterstehenden Konzepte kennen zu lernen. Aber eine theoretische Abhandlung wäre mir lieber. Falls jemand ein Buch zum Thema MySQL und (relationale) Datenbanktheorie empfehlen kann, wäre ich auch dankbar. Mit dem "MySQL Tutorial" von Luke Wellington und Laura Thomson, das ich vor ein paar Tagen gekauft habe, kann ich mich noch nicht so ganz anfreunden :-(

Auf jeden Fall schon mal meinen allerherzlichsten Dank, an die, die sich die Mühe gemacht haben, diesen (hoffentlich nicht zu langen) Post zu lesen!

Herzliche Grüße,
Stefan
 
Hm .. also ich hoffe ich hab das jetzt richtig verstanden .. aber relativ einfach wäre doch zwei Tabellen anzulegen, welche die Rechte zwischen den Instanzen User, Gruppe und den Projekten regelt ..

Bspw.: USER_RIGHTS
ID USER_ID PROJEKTID ACCESS
...

und : GROUP_RIGHTS
ID GROUP_ID PROJEKTID ACCESS
(wie oben)

Naja und wenn halt ein Projekt entweder in der Userrightstabelle oder in der Gruppentabelle steht, dann wirds halt angezeigt .. Viellciht kann man ja da unterschiedl. Stati einfügen .. 1 = Lesen, 2 = Lesen/ Schreiben etc.

Hoffe das hilft ?

Gruß Stefan
 

Neue Beiträge

Zurück