Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Abfrage einer m:n - Beziehung in einem Formular





Frage

Hi Leute.. ich versuche mir zur Zeit eine Bücher-DB zu stricken (ja ich weiß, es gibt reichlich, doch keine sagte mir zu..und ich bin Anfänger mit Access). Dabei stoße ich auf folgendes Problem: Ich habe die Daten des Buches in einer Tabellen eingetragen, welche als Primärschlüssel eine Buchnr. erhalten hat. Den Autor erfasse ich in einer seperaten Tabelle mit Vornamen und Namen. Als Primärschlüssel nutze ich hier eine Autoren-ID. Da dies eine m:n - Beziehung ist (ein Autor kann mehrere Bücher schreiben / ein Buch kann mehrere Autoren haben) habe ich eine zwischentabelle eingefügt, in der ich die Buch-ID und die Autoren-ID gegenüberstelle. Sieht so aus: Buch-ID | Autoren-ID 1 1 2 2 2 3 Sprich Buch nr. 1 wurde von Autor Nr 1 geschrieben, Buch nr. 2 von den Autoren 2 und 3. In meinem Formular, werd allerdings nur Daten für das Buch 1 korrekt angezeigt. Die Daten für das Buch 2 wird zwiemal angezeigt, jeweils einmal pro Autor. Wie bekomme ich es hin, das mir das Buch 2 einmal, aber dafür mit beiden Autoren angezeigt wird?? Thx for help Fosco

Antwort 1 von hikE

a) Tabellen umstrukturieren, so dass eine 1:n Beziehung draus gemacht werden kann.

Beispiel:
Autoren und Autorenteams in zwei Feldern einer Tabelle erfassen.

Dann bekommst du zwar auch viele leergelassene Felder in der Autorentabelle, hast aber nur eine ID, die pro Buch verknüpft werden muss.

b) zwei Autorentabellen führen und getrennt 1:n mit dem Buch verbinden.
Vorteil: Autorentabellen enthalten nie leere Felder
Nachteil: wenn ein Autor mal vorne mal hinten steht, musste ihn in beiden Tabellen eingeben.
Nachteil 2: Wat is wenn es 3, 4, 17... werden (kommt bei wissenschaftlichen Artikeln auch schon mal vor)

c) die einspaltige Autorentabelle als Quelle für "Nachschlagen" benutzen und entsprechend zwei, drei, vier, ... Felder in der Buchtabelle einfügen, in der dann die "Werte" unabhängig voneinander nachgeschlagen werden.

Vorteil: jeder Autor muss nur einmal rein
Nachteil: für jeden Autor muss ein Verknüpfungsfeld in die Tabelle "Buch".
Nachteil2: wie b)

d) Abfrage, die eine Autorenkombination liefert im Sinne von a).

Vorteil: keine leeren Felder irgendwo
Nachteil: spätestens wenn du 28.000 Titel drinne hast und noch ne andere Abfrage brauchst (zB Standort), wirst du merken dass man Abfragen nicht beliebig tief verschachteln kann.

Aber vielleicht hat noch jemand hier ne zuendende Idee - die wuerd mich auch interessieren.
Ich fahr meine LiteraturDB gerade nach Prinzip
a) für die Hauptdatensätze (Buchtitel etc) und
c) für Unterdaten (zB Einzelartikel in einem Sammelband)

Gruss HikE

Antwort 2 von Fosco

Hi HikE,

Thx für die hilfe..

Hab das über ein UFO hinbekommen.. leider habe ich dadurch ein anderes Prob bekommen..

Die Datensätze Buch<->Autoren korespondieren über die ISBN-Nummer. Wäre ja soweit o.k., doch leider ist die ISBN-Nummer bis ca 1980-1990 nicht in den Büchern (primär bei mir Taschenbücher) vermerkt worden. Ähnlich wie bei den Schallplatten damals das Copyright.

D.h. Bücher, die keine ISBN haben, werden im Formular nicht angezeigt..

Hat da noch jemand ne Idee??

Thx und Gruß
Fosco

Antwort 3 von HikE

1. Moeglichkeit:
virtuelle ISDN-Nummer erfinden und eintragen (z.B. 1969-0001 für das erste eingegebene Buch aus dem Jahr 1969, ...)
2. Moeglichkeit:
ein anderes (für jeden Datensatz eindeutiges) Zahlenfeld zum Verknuepfen benutzen und nicht die ISBN-Nummer als Verknüpfungsfeld verwenden.

Ich wuerd die zweite Moeglichkeit waehlen, auch schon deshalb weil die ISBN Nummer, wenn sie korrekt mit Strichen und eventuellem X eingegeben wird, als Textstring indiziert wird, und ne Zahl ist fuer Access viel schneller zuzuordnen als ein Textfeld.

Vorteil Moeglichkeit 2 ist auch, du muesstest keine ISBN-ähnlichen Daten erfinden wie in Moeglichkeit 1...

Gruss HikE