Satzübergreifende Suche und Restriktion
Andreas Wolf Consulting
andreas.wolf.consulting at debitel.net
So Sep 5 21:15:02 CEST 2004
Liebe KollegInnen, lieber Herr Eversberg,
ich muß leider noch einmal nachfragen, ich habe es irgendwie nicht ganz
verstanden bzw. habe ganz konkret ein Problem diesbezüglich.
Ich darf kurz meine Datenbankkonstruktion vorstellen und dann mein
Problem erläutern:
Ausgangslage:
Der Import von MAB2 des Südwestdeutschen Bibliotheksverbundes in eine
allegro Datenbank.
Konstrukt:
Entsprechend MAB2 importiere und aktualisiere ich die Daten GETRENNT in
Titel-, Lokal, und Exemplardatensätze sowie in PNDs, KSDs und
Schlagwortnormdatei.
Die Daten werden wie in MAB2 mittels IDs miteinander verknüpft (die
Normdatensätze via Normdatenverknüpfung) und für die Datenabfrage wie
folgt in einem Primärregister abgelegt:
titelid
titelid+lokalid
titelid+lokalid+exemplarid
titel2id
titel2id+lokal2id
titel2id+lokal2id+exemplar2id
usw.
Demzufolge finden sich die zugehörigen Daten für die
Bildschirmanzeige/Kartendruck immer. Dies funktioniert auch ohne
Probleme.
Damit nun auch bei der Suche die Daten sich gegenseitig finden, z.B. der
Suche nach einer Signatur (Exemplardatensatz) und einem Titelstichwort
(Titeldatensatz), habe ich eine satzübergreifende Suche für die
Lokaldatensätze (\|;titelid) sowie die Exemplardatensätze (\|;lokalid
und \|;titelid) definiert und kann damit eine Suche starten wie
find SIG signatur? AND TIT &titelwort?
Dies funktioniert auch. (Der Nachteil, daß immer die Reihenfolge "find
exemplardaten AND &lokaldaten AND &titeldaten" eingehalten werden muss,
ist ohne Bedeutung, da wir und darauf kommt es letztlich an, innerhalb
von perl/php die Suchanfrage des Anwenders immer in die richtige
Reihenfolge setzen können). Eine satzübergreifende Suche auch für die
Titeldatensätze würde in jedem Fall zu immer 3 Ergebnissen statt 1
Ergebnis führen, deswegen wurde dies unterlassen.
Soweit, so gut. Nun kommt die Restriktion:
Problem:
Wir sind nun auf die Idee gekommen, eine Restriktion auf z.B. die
Jahreszahl einzuführen (|/jahreszahl). Die Jahreszahl ist IMMER NUR in
den Titeldatensätzen enthalten. Wenn ich das mache, kann ich, wenn ich
ausschließlich in den Titeldaten recherchiere meine Ergebnismenge
problemlos einschränken:
find ( PER person? AND TIT titelwort? ) AND RES jahreszahl
Aber NICHT wenn ich ZUERST eine satzübergreifende Suche starte wie oben
beschrieben und anschließend die Restriktion durchführe:
find SIG signatur? AND TIT &titelwort?
find RES jahreszahl
Das Ergebnis ist immer leer !
Und wenn ich die Abfrage einzeilig durchführe:
find ( SIG signatur? AND TIT &titelwort? ) AND RES jahreszahl
Das Ergebnis ist immer leer !
Und wenn ich recht verstanden habe, darf die Restriktion ja wohl nicht
ZUERST ablaufen, oder ?
Also bin ich auf die Idee gekommen, den Lokal- und Exemplarsätzen
jeweils die zugehörige Jahreszahl aus den Titelsätzen als Restriktion
nachzuladen. Ähem, das geht aber wohl nicht, oder ?
Vielleicht haben Sie eine Erklärung bzw. einen Vorschlag, was ich da
falsch mache oder falsch verstanden habe, ich verstehe es leider nicht.
Viele Grüße und vielen Dank
Ihr Andreas Wolf
Mehr Informationen über die Mailingliste Allegro