Access 2013 Verbandsdatenerhebung

JLtz

Cadet 3rd Year
Registriert
Dez. 2014
Beiträge
33
Access 2013 Grundsatzdesign

Hallo liebe ComputerBase-Nutzer,

ich habe eine grundsätzliche Frage im Bezug zur grundlegenden Datenbankstruktur.
Mein Know-How in diesem Bereich geht leider in Richtung null, wenn nicht sogar null.

Folgendes ist mein Anliegen:

Ich spiele das ganze einmal am Beispiel der Organisationsstruktur einer Partei durch.
Es gibt eine Tabelle mit Mitgliedern mit den Attributen Name, Vorname, Kontaktdaten, Mitgliedsnummer.
Es gibt eine Tabelle Verbände mit den Attributen Verbandsname, Verbandstyp (Ortsverband, Kreisverband, Landesverband, usw.), Vorsitzender, stellv. Vorsitzender usw.
Nun sollen die Attribute mit den Vorsitzenden ein Objekt (?) vom Typ Mitglieder enthalten, bzw. darauf verweisen.

Das war meine Grundidee. Ist es so möglich zu realisieren, wenn ja wie?
Oder ist das Ganze komplett falsch aufgebaut und durchdacht?

Ich danke eurer Mithilfe schon im Vorraus.

Guten Abend!
 
Zuletzt bearbeitet:
Ich verstehe die Idee "Nun sollen die Attribute mit den Vorsitzenden ein Objekt (?) vom Typ Mitglieder enthalten, bzw. darauf verweisen." nicht. Was möchtest du tun?

Um dein aktuelles Datendesign aufzugreifen. Du kannst z.B. in Tabelle "Verband" die genannten Daten abspeichern. Auch kannst du dort den jeweiligen Vorsitzenden und stellv. Vositzenden abspeichern. Benötigst du jedoch mehrere solcher Felder, lagert man das in eine extra Tabelle aus (Tabelle "VerbandMitgliederZuordnung"). In dieser würde man die eindeutige Verbands-ID sowie die Mitglieder ID in Verbindung mit einem Rang-Identifier (Mitglied, Vorsitzender, ...) abspeichern. Vorteil ist, dass man so ganz einfach n-Personen für einen Verband mit Rang hinterlegen kann. Dies könnte man teilweise auch in die Mitglieder-Tabelle verschieben (Annahme: eine Person kann jeweils nur Mitglied in einem Verband bzw. Verbandslevel zeitgleich (also nur Ortsverband, oder eben ein Ortsverband und ein Kreisverband etc) sein), ist aber nicht optimal vom Design und weniger flexibel (n Felder für n Verbandslevel notwendig).

Die Verwendung von Zuordnungstabellen ermöglicht es dir außerdem, dass eine Person n Titel für einen Verband begleiten kann (Mitglied, Kassier, stellv. Vorsitzender, ...).
 
Zuletzt bearbeitet:
Vielleicht ist es etwas einfacher zu erklären wenn ich mein bisheriges Design mal zeige: Anhang anzeigen TestDatenbank.zip
n-Personen brauche ich nicht, mir reicht eine feste Anzahl. Nach deiner Optimierung besteht das Design also aus drei Tabellen? Einer Verbandstabelle, einer Mitgliedertabelle und einer Zuordnungstabelle die die beiden miteinander verbindet?
 
Die von dir gelieferte Datei kann ich leider nicht öffnen, Microsoft Office Produkte gibt es nicht für Linux. Man kann jedoch ganz einfach Diagramme erstellen, die Tabellen und deren Zuordnung einfach und visuell darstellen. Hier (http://wiki.hsr.ch/Datenbanken/Dbs2FS12UebW01) ein Beispiel. Eigentlich ganz einfach. Jede Tabelle ist ein Block, ganz oben steht der Name gefolgt von einer Linie als Trennzeichen. Darunter stehen alle (relevanten) Felder, die Primärschlüssel (primary key PK) werden gekennzeichnet, die zugehörigen Tabellen werden mit einem Strich verbunden und die jeweilige Zuordnung (1:1, 1:n, n:n) aufgeschlüsselt.

Meine Änderung sieht eine dritte Tabelle vor, das ist korrekt. Damit bist du flexibel, zumal eine Person eben doch x-Zuordnungen zu x-Verbänden haben kann und in jedem Verband noch mehrere Ränge begleiten kann. Nach dem Modell muss ein Mitglied gleichzeitig mindestens einmal in der Zuordnungstabelle auftauchen, ansonsten wäre er ein Mitglied ohne Mitgliedschaft in einem Verband.
 
Nach einiger Zeit habe ich jetzt mal versucht deine Tipps umzusetzen. Ich bin nun auf folgendem Stand.
Es gibt 4 Tabellen mit folgenden Attributen:
  1. tMitglied
    • ID (pk)
    • mName (varchar)
  2. tVerband
    • ID (pk)
    • vName (varchar)
  3. tVorstand
    • ID (pk)
    • vVorsitzender (int)
    • vStellvVorsitzender (int)
    • vSchatzmeister (int)
  4. tZuordnung
    • ID (pk)
    • zVerband (int)
    • zVorstand (int)

Die Beziehungen lassen sich folgendermaßen darstellen:

beziehungen.png

Es gibt folgende Abfragen:

  1. qVerband
    • vName
    • zVorstand
    • -> (SELECT tVerband.vName, tZuordnung.zVorstand FROM tVerband INNER JOIN tZuordnung ON tVerband.[ID] = tZuordnung.[zVerband];)
  2. qVorstandID
    • vName
    • vVorsitzender
    • vStellvVorsitzender
    • vSchatzmeister
    • -> (SELECT qVerband.vName, tVorstand.vVorsitzender, tVorstand.vStellvVorsitzender, tVorstand.vSchatzmeister FROM tVorstand INNER JOIN qVerband ON tVorstand.[ID] = qVerband.[zVorstand];)
  3. qVorstand_TestAbfrage
    • vName
    • mName
    • -> (SELECT qVorstandID.vName, tMitglied.mName FROM tMitglied INNER JOIN qVorstandID ON tMitglied.[ID] = qVorstandID.[vVorsitzender];)

--> Problem ist nun folgendes: <--


Durch die Abfrage qVorstand_TestAbfrage bekomme ich nun zwar eine Tabelle mit den Verbänden und dem Vorsitzenden, allerdings habe ich keine Idee wie ich die anderen auch angezeigt bekomme.

Schon mal vielen Dank im Vorraus,

Jan.
 
Mit der Abfrage qVorstand_TestAbfrage limitierst du über den Join (tMitglied.[ID] = qVorstandID.[vVorsitzender) auf den Vorsitzenden. Deine Abfrage qVorstandID macht jeodch bereits eine allgemeine Abfrage für sämtliche Vorsitzenden.

Mit "SELECT qVerband.vName, tVorstand.vVorsitzender, tVorstand.vStellvVorsitzender, tVorstand.vSchatzmeister FROM tVorstand" fragst du die Tabelle Vorstand ab. Mit "SELECT qVerband.vName, tVorstand.vVorsitzender, tVorstand.vStellvVorsitzender, tVorstand.vSchatzmeister FROM tVorstand INNER JOIN qVerband ON tVorstand.[ID] = qVerband.[zVorstand];" hast du deine Abfrage inkl. Join für die Verbandstabelle. Du kannst damit jetzt z.B. nach Verbandsnamen sortieren/suchen ("WHERE qVerband.vName = 'Verbandskreis1'" oder "ORDER BY qVerband.vName").
 
Zurück
Oben