Hilfe bei Access

  • Hey Leute,
    (keine Ahnung ob das der richtige Bereich ist)


    Ich wurde heute ins kalte Wasser geworfen und muss eine Datenbank in Access erstellen. (Ich hab noch nie Access gesehen)
    Soweit kein Problem, nur benötige ich jetzt bei dem einen Feld in der Tabelle ein Array. (Feld "Teilnehmer", sollen mehrere Integer Werte rein -> 0=entschuldigt, 1=..., 2=... .)
    Wie löse ich das jetzt?
    Hab mir gedacht ich erstell ne zusätzliche Tabelle und schreib da alle Namen rein und verlinke die dann irgendwie über eine Beziehung oder Abhängigkeit oder kein Plan. xD
    Wie gesagt, kenn mich überhaupt nicht aus. Wäre nett wenn mir jemand ziemlich genau erklären könnte was ich machen muss. :P


    Gruß Paranoid

  • Ich wusste ich würde Access irgentwann mal brauchen und dennoch hab ichs nicht installiert xD


    http://www.access-tutorial.de/tabellen/beziehungen.htm <- Gutes Tutorial zu Access


    Datenbank Design is eine Nummer für sich. Wenn du genauer beschreibst, was du machen sollst, dann kann man dir bestimmt auch sagen wie "Sinnvoll" deine Idee ist :D


    Gruß
    florian0

  • Okay also...
    Ich muss eine Datenbank für die örtliche (freiwillige) Feuerwehr erstellen.
    Dabei brauch ich bei mehreren Feldern ein Array, aber hier jetzt mal ein konkretes Beispiel:
    Es gibt eine Tabelle "Übungen". Darin enthalten ist das Datum der Übung, das Thema, Ort, Übungsstart/-ende und eben auch die Teilnehmer. Dabei sollen in dem Feld "Teilnehmer" keine Namen stehen, sondern nur Zahlen von 0-5 (0=unentschuldigt, 1=entschuldigt, 2=anwesend, ... 5=...). Jetzt stellt sich mir halt die Frage, wie ich diese Integer Werte am Besten da reinschreibe um sie später evtl. auch einfach auslesen zu können. Es können unterschiedlich viele von 0 bis ca. 30 sein. (Java Style mit int[] und Länge n scheint wohl nicht zu funktionieren ;D)
    Wenn du noch irgendwelche Infos brauchst, frag.^^


    //Es muss nichts komplexes sein, wie gesagt, ist weder für Schule noch für Uni oder sonstwas. Soll halt einfach nur einfach, handlich, nützlich sein. :)

  • In SQL gibt es an sich keine Arrays. Ich würde jetzt einfach eine Zeichenkette erzeugen und diese in dem Feld speichern.
    Die Zeichenkette würde dann natürlich auch Delimiter enthalten, um die Daten später auswerten zu können.


    Kuh :>

  • In SQL gibt es an sich keine Arrays. Ich würde jetzt einfach eine Zeichenkette erzeugen und diese in dem Feld speichern.
    Die Zeichenkette würde dann natürlich auch Delimiter enthalten, um die Daten später auswerten zu können.


    Kuh :>


    Du meinst also ich soll in das Feld "Teilnehmer" dann einfach "00102035030205010205304103023010130" reinschreiben? Und das funktioniert bzw. verhält sich so als würd ich in Java ein Array erstellen wo jede Zahl seinen "Slot" hat?
    Gibt es keine schönere Lösung?^^

  • Blos keine Aufzählungen in Feldern ... sonst Fallen mir noch alle Haare aus :D


    Mach neben "Übungen" noch eine "Teilnehmer"-Tabelle.


    Dann machst du eine dritte Tabelle, nennen wir sie Mal "Verknüpfungstabelle". Da schreibst du die Nummer der Übung rein und die Nummer des Teilnehmers. Zusätzlich kannst du in dieser Tabelle noch speichern ob dieser anwesend war, oder nicht.

  • Blos keine Aufzählungen in Feldern ... sonst Fallen mir noch alle Haare aus :D


    Mach neben "Übungen" noch eine "Teilnehmer"-Tabelle.


    Dann machst du eine dritte Tabelle, nennen wir sie Mal "Verknüpfungstabelle". Da schreibst du die Nummer der Übung rein und die Nummer des Teilnehmers. Zusätzlich kannst du in dieser Tabelle noch speichern ob dieser anwesend war, oder nicht.


    Mit "Teilnehmer"-Tabelle meinst eine Art Mitgliederliste wo alle erfasst sind? Wenn ja, die ist sogar bereits vorhanden. Eben ne Tabelle wo jeder Kamerad erfasst ist mit persönlichen Daten etc. Dann soll ich einfach noch eine Liste erstellen und da dann die eindeutige ID der Übung auf der X-Achse und die eindeutige ID der Person auf der Y-Achse und in die Tabelle rein dann die Zahl?
    Also bspw. so:
    ___ 1..2..3..4..5..6 <-- Übungen
    1__.0..2..3..4..2..1
    2__...
    3__...
    4__...
    ...
    30_...
    ^
    Personen

  • Ja so ähnlich ...
    Für jede Übung pro Teilnehmer einen eigenen Eintrag.



    Uebungs-Tabelle


    Personal-Tabelle


    Verknüpfungstabelle


    Edit: Und da kann man dann ohne viel Programmieraufwand solche Ausgaben rausholen:



    Gruß
    florian0

  • Der Gedanke, so weit ich mich erinnere, hinter Beziehungen, ist es konsistent zu sein, bzw Sachverhalte zu modellieren. http://de.wikipedia.org/wiki/Konsistenz_(Datenspeicherung)
    Die Information ist also nur 1 mal abgelegt in einer Tabelle und soll mit möglichst wenigen und zugleich einfachen SQL Statements, mit einfach meine ich schnell auf dem Server ausführbar, wieder rekonstruierbar sein.


    Falls ich da falsch liege, bitte ich um verbesserung ;)


    Gruß

  • Stimmt soweit:


    Siehe auch:
    http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29
    (Nur die Normalformen 1-3, der ist is nicht besonders relevant)


    Theoretisch muss man die Beziehungen garnicht mit in die Datenbank einbringen. Man könnte sie auch nur theoretisch darstellen (Musste ich bei unserem Schul-Abschlussprojekt machen, weil die Datenbank auf InnoDB statt auf MyISAM gestellt war und InnoDB keine Beziehungen kann). Man läuft dann eben auf die Gefahr hin, das die Datenbank fehlerhaft wird.
    z.B. Man löscht eine Uebung die 30 Teilnehmer hatte, dann hat man 30 Zombieeinträge in der vk_Personal_Uebung die keiner mehr Zuordnen kann. Ist die Beziehung in der Datenbank festgelegt, ist dieser Vorgang nicht möglich.


    Gruß
    florian0


  • entweder hab ich dich grad falsch verstanden, oder du hast behauptet, dass InnoDB keine foreign key constraints beherrscht.. wenn ja: GLAUBT DEM KERL KEIN WORT!!!!


    BTT: Aber ja, das ist der scherz dabei, in Java, würdest du vielleicht ein Array in ein anderes Array reinpacken, in das du dan noch ein array reinpackst, um deine "mehrdimensionalen" informationen abzubilden. in Datenbanken hast du diese möglichkeit (zurecht) nicht. hier hast du die möglichkeit "zwischentabellen" zu machen. das mag zwar auf dem ersten blick nach viel nutzloser arbeit ausschauen - ist es aber nicht.
    beispiel: nehmen wir florians konzept (das gut ist).
    wenn du zum beispiel rausfinden willst wer eigentlich nie zur übung kommt, ist dir die tabelle "Übung" egal und somit der datenbank auch.
    in deiner java-schachtel dingens müsstest du in jeder Übung nachschauen ob es jemanden gibt der in jeder übung einen "gefehlt" eintrag hat - um das zu erreichen musst du dir vielleicht sogar zusätzlich noch ein weiteres konstrukt anlegen...


    ps: Access soll zwar soooo toll sein, hat aber nur annähernd was mit datenbanken zu tun. schau dir lieber SQL datenbank systeme an.
    edit: access ist wie ms paint ... du kannst schnell mal was mache, aber mit photoshop kommst doch weiter... und auf einer bewerbung siehts auch besser aus :)

  • Ich nochmal...
    Ich versuch mich jetzt gerade an nem Formular.
    Und zwar will ich, das man bei der Kameradenliste (wo alle mit Kontaktinfos drinstehen) neue Kameraden hinzufügen kann. So weit so gut. Mein Problem ist jetzt, dass die Kamerad-ID ja eine fortlaufende Zahl sein soll, deswegen hab ich da kein Autowert genommen (weil es da ja vorkommen kann, dass "Lücken" entstehen), sondern einfach nur eine eindeutige Zahl. Wenn ich nun auf den Button "New" für einen neuen Datensatz drücke funktioniert eigentlich alles, nur wenn ich diesen dann speichern will, sagt er mir eben dass ich noch eine Kamerad-ID eingeben muss.
    Also, ist es irgendwie möglich, dass ich entweder sofort wenn ich einen neuen Datensatz anlege, er als Kamerad-ID die nächste Zahl nimmt, oder eben wenn ich diesen speichere er eine ID bestimmt?