dutch english
  Hauptseite Projekte Elektronik Möbelbau Rezepte Corgies Über mich
  Projekte Wandhalter Vereniging 2.0
Vereniging 2.0
Bibliotheken
Datenbank
Menüs

Datenbank

Entwurf

Für den Datenbankentwurf habe ich das Programm MySQL Workbench verwendet. Das Datenbankmodell kann hier als mwb-Datei, pdf-Datei oder als png-Datei runtergeladen werden. Ich habe die MySQL-Engine InnoDB verwendet, damit Fremdschlüsselbeziehungen verwendet werden können, die vom Datenbanksystem automatisch auf Konsistenz geprüft werden.

Tabellenstruktur

Haupttabelle

Die wichtigste Tabelle ist die Tabelle member_entries. Hier werden die Informationen für jedes Mitglied gespeichert. Die meisten Felder sprechen für sich. Es gibt jedoch auch ein paar Felder, deren Bedeutung vielleicht nicht sofort ersichtlich sind:

Feld Erklärung
limit_access Dieses Feld kann benutzt werden um bestimmte Mitglieder von anderen Mitgliedern abzuschirmen. So ist es zum Beispiel möglich, dass bestimmte Mitglieder ihre Daten nur dem Vorstand, jedoch nicht anderen Mitgliedern zur Verfügung stellen möchten.
partner Wenn der Verein sowas wie ein Partnertarif anbietet oder die Mitglieder auch die Daten ihres Partners bearbeiten können, dann steht hier der Index des Partners.
company_information Für einige Vereine ist es wichtig, dass die Mitglieder nachschauen können, wo ihre Mitglieder arbeiten und welche Position im Unternehmen sie haben. Dies kann hier gespeichert werden.
user_group Alle Rechte im System werden in Benutzergruppen zusammengefasst. Jedes Mitglied ist Mitglied in genau EINER Benutzergruppe.
preferred_language Wenn es verschiedene Nationalitäten unter den Mitgliedern gibt, kann hier gespeichert werden in welcher Sprache das Mitglied angesprochen werden möchte. Der Eintrag kann nur einer der in der Tabelle languages definierte Sprache sein.
membership_type Dies ist für Vereine die verschiedene Mitgliedstypen anbieten, zum Beispiel mit verschiedenen Mitgliedsbeiträgen.
membership_end Meist wird die Mitgliedschaft mit dem Ende des Vereinsjahrs beendet. Wenn dieses Feld auf wahr gesetzt wird, dann ist diese Person zwar immer noch Mitglied, kann aber zum Beispiel am Ende des Vereinsjahrs in die Gruppe ehemaliger Mitglieder verschoben werden.

Adressdaten

Die Adressdaten werden in einer eigenen Tabelle gespeichert. Dies hat den Vorteil, dass pro Mitglied mehr als eine Adresse gespeichert werden kann. Ein zweiter Vorteil ist, dass bei Partnern das gleiche Adressfeld verwendet werden kann, damit eine Änderung der Adresse automatisch für beide Mitglieder gilt. Für die Verbindung zwischen Adressen und Mitgliedern gibt es eine Verknüpfungstabelle. Bei jedem Mitglied muss in dieser Tabelle bei genau EINER Adresse das Feld main_address gesetzt sein. Dies ist die Postadresse die benutzt wird für die Korrespondenz (soweit dies nicht per Email geschied).

Das Feld address_type definiert, um welche Art von Adresse es sich handelt. Dies wird durch den Administrator festgelegt und wird zum Beispiel für Heimatadresse, Studienadresse, Firmenadresse, usw. verwendet.

Sprachen und Übersetzungen

In der Tabelle languages stehen alle Sprachen, die durch den Anwender ausgewählt werden können, wofür es also eine Übersetzung aller Texte im System gibt. Das System sucht in der Tabelle mit den Übersetzungen den Übersetzungstext unter Verwendung von module (Modul in dem der Text verwendet wird, zum Beispiel der Dateiname), language (Sprache des Textblocks) und key (ein Begriff, der innerhalb eines Moduls eindeutig sein muss).

Studentenvereine

Wenn das System für einen Studentenverein verwendet wird, dann ist es sinnvoll bei den Mitgliedern auch zu speichern, welches Studienfach sie studieren. In der Tabelle fields_of_study sind alle Studienfächer definiert. Durch die Verwendung der Tabelle studies_student_map können Mitglieder mehr als ein Fach studieren, wobei auch das Anfangs- und Endjahr eingegeben werden kann.

Arbeitsgruppen

In den meisten Vereinen gibt es Arbeitsgruppen, wie die Sport-AG, Party-AG, usw., aber auch den Vorstand. Für jede AG wird definiert, welche Funktionen hier möglich sind. Über die Tabelle committee_function_map wird festgelegt, welche Funktionen in welcher AG möglich sind. Über die zweite Tabelle, committee_member_map, wird festgelegt, welches Mitglied in welcher AG welche Funktion inne hat.

Emaillisten

In den meisten Vereinen gibt es verschiedene Emaillisten, zum Beispiel pro AG, für Mitglieder, für nicht-Mitglieder, usw. Hier werden die Listen in der Tabelle mailinslists definiert. Falls die Listen mit Majordomo arbeiten, kann hier auch direkt die Verwaltungsemailadresse und das Verwaltungskennwort gespeichert werden. Änderungen an Emailadressen oder an Listenmitgliedern werden so direkt bei Majordomo geändert.

Benutzerrechte

In der Tabelle user_rights sind alle Rechte definiert, die ein Mitglied haben kann. Es gibt drei Sorten von Rechten:

  • Systeminterne Rechte
  • Rechte für eine bestimmte A.G.
  • Rechte für einen bestimmten Status

Systeminterne Rechte sind durch die Programmierung von Vereniging 2.0 festgelegt und können daher nicht geändert werden. Desweiteren gibt es dynamische Rechte, die zum Beispiel benutzt werden um im Menü bestimmte Benutzergruppen sichtbar oder unsichtbar zu machen. Wenn es zum Beispiel den Status Mitglied und nicht-Mitglied gibt, dann gibt es ein Recht zum Betrachten von Mitgliedern und ein Recht zum Betrachten von Nicht-Mitgliedern. Das Gleiche gilt für A.G.s. Da aber Stati und A.G.s durch den Administrator angelegt werden, sind diese Rechte nicht statisch. Sie werden mit Hilfe zweier Datenbanktriggern automatisch angelegt wenn ein Wert zu einem dieser Tabellen hinzugefügt wird. Die Datenbank sorgt auch dafür dass sie automatisch gelöscht werden.

Unter value steht der Name des Rechts. Handelt es sich um ein dynamisches Recht, dann wird der Name automatisch durch die Trigger festgelegt, nach dem Schema view_status_.... oder view_committee_....

Eine Benutzergruppe fasst eine bestimmte Anzahl an Benutzerrechte unter einem Namen zusammen. Für die Verbindung zwischen diesen Beidern wird die Tabelle groups_rights_map verwendet. Ein Mitglied ist Mitglied in genau einer Benutzergruppe.

Änderungen protokollieren und per Email verschicken

Alle Änderungen an der Datenbank werden protokolliert, und zwar in der Tabelle logfile. Im Feld logentry steht der eigentliche Inhalt der Änderunge. Dies kann ein einfacher Text sein, aber auch ein XML-Text mit mehreren Änderungen. Wenn hier ein Text steht, der übersetzt werden soll, dann muss in dem String ein "translate(..)" geschrieben werden, mit dem zu übersetzendem Text in den Klammern, also zum Beispiel "translate(login)". In changed_by_member steht, wer die Änderung gemacht hat. Damit wird es möglich, zum Beispiel beim Einloggen anzuzeigen, welche Änderungen in der Vergangenheit gemacht wurden. Wenn sich Daten eines Mitglieds ändern, dann wird dessen Index in das Feld changes_on_member geschrieben. Da nicht alle Änderungen Mitgliedsdaten betreffen, kann dieses Feld auch NULL sein. Mit diesem Feld wird es möglich, direkt beim Bearbeiten der Mitgliedsdaten anzuzeigen, welche Änderungen in der Vergangenheit gemacht wurden.

Das letzte Feld, das zwingend vorhanden sein muss, ist change_type. Es gibt verschiedene Änderungstypen, wie zum Beispiel Änderungen an Mitgliederdaten, Änderungen von Kontaktdaten, Änderungen an Listenwerte, usw. Mittels dieses Typs wird nachgeschaut, wer über diese Änderungen per Email informiert werden soll. Welche Änderungen an wen geschickt werden sollen, steht in der Tabelle email_notifications.

Valid XHTML 1.0 Transitional
Valid CSS!
29.12.2012 10:23u