Forums Neueste Beiträge
 

ACC2000: DB-Struktur für Thesaurus

16/12/2007 - 14:13 von Michael Hessler | Report spam
Hallo,

Tabelleneintràge (z.B. Zeitschriftenaufsàtze) sollen
verschlagwortet werden. Die Schlagworte sind in vier Ebenen von
0..9 hierarchisch organisiert, z.B.
A B C D
0 ... 0 ... 0 ... 0 ...
1 1 Betriebssyteme 1 Access 1 Handbücher
2 2 ... 2 MySQL 2 Tipps&Tricks
3 Datenverarbeitung 3 Datenbanken 3 ... 3 ...
usw. 4 4 4 ...
9

Hierzu habe ich vier Tabellen tblCODEa (10 Datensàtze) ..
tblCODEd (10.000 Datensàtze).

Außerdem die Tabelle tblLITERATUR und 1:n zugeordnet
tblLIT_Schlagworte, in der die Schlagworte-Codierung "0000" bis
"9999" eingetragen wird.

Nun bekomme ich bei der Bildung von Formularen so einige Probleme
(ausgelöst durch meine Tabellenstruktur?), z.B.:
In einem Formular möchte ich ein Schlagwort auswàhlen und dazu
die entsprechenden Eintràge aus tblLITERATUR in einem
Endlos-Unterformular anzeigen. Hierzu habe ich in dem Formular zu
jeder tblCODEa..d ein (ungebundenes) Endlos-Formular, über FAQ
4.3 wechselseitig synchronisiert. Das klappt.

Außerdem kann ich noch die in den 4 Fenstern zusammengebaute
Schlagwort-Codierung in ein Hauptformular-Textfeld schreiben,
z.B. "3312". Allerdings schaffe ich es nicht, bei Änderung dieses
Textfeldes die entsprechende Liste der Aufsàtze mit Schlagwort
"3312" in einem Endlos-Unterformular anzuzeigen.

Denkfehler, Fehler der DB-Struktur oder nur fehlendes Wissen?
Danke.
Michael
 

Lesen sie die antworten

#1 Lorenz Hölscher
16/12/2007 - 16:32 | Warnen spam
Hallo Michael,

die grundsàtzliche Idee Deiner Datenbank scheint mir korrekt zu sein,
mit einer Ausnahme: in tblLIT_Schlagworte sind offenbar alle vier
Ebenen in einem einzigen Feld enthalten. Das widerspricht der Ersten
Normalform ("Atomisierung"), weil Du mehrere Inhalte in ein Feld
schreibst. Entsprechend hast Du Probleme, die spàter mal wieder
"auseinanderzufieseln". Außerdem erzwingt das automatisch, daß keine
Deiner Ebenen mehr als 9 Eintràge haben kann, was mir sehr waghalsig
vorausgesetzt zu sein scheint!

Mein dringender Vorschlag wàre also, daraus vier Felder zu machen, die
dann selbstverstàndlich mit referentieller Integritàt mit ihrer
zugehörigen Code-Tabelle verknüpft sind. Und schon hast Du ein zweites
Problem gelöst ("Zu jeder Lösung ein Problem" ;->), daß Du auch
wirklich nur gültige Codierungen auswàhlen kannst, was in Deinem
Beispiel nicht gegeben war.

Damit kommen wir zum zweiten Teil, die jeweils passende Literatur zu
finden. Das würde ich nicht in mühsam (und langsam!) synchronisierten
Formularen machen, sondern grundsàtzlicher und damit eine Ebene
früher: in Abfragen. Das könnte etwa so aussehen:

- eine Abfrage namens "qrySchlagworteUndLiteratur", in der
tblLITERATUR und tblLIT_Schlagworte sinnvoll über den Fremdschlüssel
miteinander verknüpft sind
- darin berechnet ein neues Feld "CodeKomplett" mit der Formel
"[l2sCodeA] & [l2sCodeB] & [l2sCodeC] & [l2sCodeD]" ("l2s" meint
"LiteraturZuSchlagwort")
- und eine Abfrage namens "qryFinden" mit "SELECT * FROM
qrySchlagworteUndLiteratur WHERE ([CodeKomplett] = '1234')"

Damit das nicht weiterhin hart codiert bleibt, kannst Du eine
Parameter-Abfrage draus machen: "...WHERE ([CodeKomplett] = [Welcher
Code?])" oder gar auf ein geöffnetes(!) Formular zugreifen mit
"...WHERE ([CodeKomplett] = Forms!meinFormular!meinSuchfeld )". Damit
bist Du dann wieder bei Deinem Formular.

Such Dir was aus, dann können wir das vielleicht noch ein wenig
konkretisieren, je nachdem, wie Dein Wissensstand ist. Eventuell
guckst Du mal auf meiner Tipps&Tricks-Seite
http://www.cls-software.de/cls_soft...ellen.aspx

tschö, Lorenz

Ähnliche fragen