Seite 1 von 1

Ich komm bei Datenbankimplementierung nicht weiter

Verfasst: Mo, 28.02.2011 17:18
von HSling
Hi,
Ich hab folgende Datenbank (siehe Bild): http://img268.imageshack.us/i/bildschirmfotoc.png
ich hatte damals in der Schule nur die relationale Datenbank Theorie, leider nie die Implementierung. Naja jedenfalls habe ich nach dem damals gelernten Muster die Relationen und Beziehungen in Tabellen umgewandelt (nach 3. Normalform).

ist das so überhaupt richtig, beziehungsweise nötig? Ich hab irgendwie das Gefühl, dass die Tabellen wie "IstInVerteiler" überflüssig sind, beziehungsweise eh nicht von Base erkannt werden.


Mein eigentliches Problem ist jetzt aber, dass ich die Tabellen mit Daten befüllen will. Jedoch will ich nicht immer nur eine Tabelle auf einmal Befüllen. Am liebsten wäre es mir, wenn ich zum Beispiel Rechner und OS gleichzeitig in einer Abfrage eintragen könnte (Noch idealer wäre es natürlich, wenn ich OStyp und OSversion aus einem Dopdown auswählen könnte und die entsprechende ID bekomme). Dies geht aber nicht, da ich, wenn ich eine entsprechende Abfrage erstelle keine neuen Datensätze einfügen kann (es ist ausgegraut). Wenn ich ein Formular mache, krieg ich es irgendwie auch nur hin, höchstens auf eine Tabelle zuzugreifen.

Wie soll ich weiter vorgehen? Oder sind meine Vorstellungen eh falsch?


Vielen Dank für Eure Hilfe :)

Re: Ich komm bei Datenbankimplementierung nicht weiter

Verfasst: Di, 01.03.2011 15:50
von Jott
Hallo HSling,

meiner Meinung nach sind deine Tabellen gut. Wenn z.B. ein Mitarbeiter in mehreren Verteilern sein können soll, ist eine Tabelle wie "IstInVerteiler" auf jeden Fall nötig (und Base erkennt sie auch).


Zum Eintragen:
Das Eintragen von Daten in soeinen komplexen Tabellenentwurf ist in der Tat nicht so einfach ^^:
Ich empfehle dir, das Ganze auf mehrere Formulare aufzuteilen. Z.B. je ein Formular für:
- m:n-Beziehungen um die Tabelle "Mitarbeiter" ("Nutzt", "ArbeitetInProj", "IstInTausch", "IstInVerteiler")
- "Projekte"
- "Abteilungen"
- "Rechner"
usw.

Dann kannst du zwar nicht alles auf einmal eintragen, aber es ist sehr viel übersichtlicher für den Anwender. Ich würde dir empfehlen: Mach dir mal ein paar Skizzen, wie du dir eine gute Benutzeroberfläche für dein Programm vorstellst. Stell sie auch ruhig hier rein.

Wie du deine m:n-Beziehungen zum Laufen kriegst steht schonmal in folgendem pdf:
http://www.ingo-bartling.de/info/klasse ... obase8.pdf


Zum Abfragen:
Die Abfrage von m:n Beziehungen ist nicht ganz trivial. Beispiel:
Der Mitarbeiter mit dem Login "ma86" ist in den Verteilern "Sport", "Allgemeines", "Projektgruppe1"
Der Mitarbeiter mit dem Login "dj65" ist in den Verteilern "Allgemeines", "Projektgruppe2"
Eine Abfrage nach dem Muster "Gib mir alle Mitarbeiter und 'ihre' Verteiler!" würde nun zu folgender Tabelle führen:
ma86 | Sport
ma86 | Allgemeines
ma86 | Projektgruppe1
dj65 | Allgemeines
dj65 | Projektgruppe2
Das heißt, fragst du nun mehrere m:n-Beziehungen auf einmal ab wird es sehr unübersichtlich!

Will man das Ganze dann eher so haben:
ma 86 | Sport, Allgemeines, Projektgruppe1
dj65 | Allgemeines, Projektgruppe2
wird es kompliziert (Makros!). Ist aber alles möglich ;-)

Re: Ich komm bei Datenbankimplementierung nicht weiter

Verfasst: Mi, 02.03.2011 17:39
von HSling
Danke schonmal :)
Ok die M:N Beziehungen klappen nun. Nur Krieg ich jetzt die 1:n Beziehungen nicht so eingebunden wie ich es gerne hätte. Die hätte ich nämlich auch gerne so, dass man die Beschreibung anklickt(dadurch wird die ID gewählt) und nicht die ID wissen muss. Wie schaffe ich das am besten?

Re: Ich komm bei Datenbankimplementierung nicht weiter

Verfasst: Sa, 05.03.2011 16:27
von Jott
Hoffe, meine Antwort kommt nicht zu spät ;-)

Dafür benutzt du am besten ein Listenfeld. Ich gehe davon aus, du hast jetzt ein Textfeld, in dem die jeweilige ID steht, richtig?

- Im Formular-bearbeitungsmodus einfach Rechtsklick auf dieses Textfeld.
- Im Menü auf "Ersetzen durch" gehen und "Listenfeld" wählen.
- Nun in den Eigenschaften dieses Listenfeldes (erreichst du über den Formular-Navigator) den Reiter "Daten" wählen.
- Machst du das ganze z.B. für Mitarbeiter <-> Abteilung, stellst du nun folgendes ein:
  • Datenfeld: AbteilungsID
    Eingabe erforderlich: je nachdem wie du deine Tabellen aufgebaut hast
    Art des Listeninhalts: SQL
    Listeninhalt: "SELECT "Abteilungsbezeichnung", "AbteilungsID" FROM "Abteilung" ORDER BY "Abteilungsbezeichnung" ASC"
    Gebundenes Feld: 1
Jetzt sollte es klappen.

Ich bin mir grad nicht sicher, ob irgendein Assistent aufgeht, sobald du die Listbox einfügst. Wenn ja: Mach den bloß zu :lol: