Wie man die Daten per
SQL erhält, weiß ich sehr wohl
Ich habe drei Datasets, welche den Inhalt dieser Tabellen liefern. ... Diese Vorgaben sind unveränderbar.
Einfach einen Join verwenden
SQL-Code:
select
b.*
from
books b
where
b.id in ( select book from BookAuthor where autor = :autor);
Mit diesem Ansatz hätte ich dann n+1 Abfragen (n = Anzahl der Authoren). Ziemlich unpraktisch. Von den redundanten Records bei Büchern, die mehr als einen Author haben, mal nicht zu reden.
Ziel ist es, einen universellen Ansatz zu haben, wie man 2 Datasets, die über ein 3. Dataset in einer many-to-many Beziehung stehen, in einer Hierarchie (z.B. treeview) darstellen kann. Die eigentliche Darstellung ist erstmal unerheblich, sondern nur die Aufbereitung bzw die Verbindung der Datasets zu regeln.
Ich greif nochmal mein Beispiel mit den Büchern auf:
Hätte ich ein Datenmodell, wo ein Buch nur einen Author haben kann (also ein AuthorId Feld in der Books Tabelle), dann würde man das Authors Dataset als Master nehmen und das Books Dataset als Detail und diese über AuthorId verbinden.
Da ich aber nun 2 Ebenen von 1 zu n Beziehungen habe würde das wie folgt aussehen:
Master1: Authors
Detail1: BookAuthors (DetailKey = AuthorId, MasterKey = AuthorId
Master2: BookAuthors
Detail2: Books (DetailKey = BookId, MasterKey = BookId)
Aus diesen 2 1-to-n Beziehungen möchte ich aber wieder eine n-to-n Beziehung bauen.
Das sähe etwa so aus:
Master: Authors
Detail: Books (DetailKey = BookId, MasterKey = bookauthors.bookid where bookauthors.authorid = authors.authorid)
Hoffe, das Problem ist etwas klarer geworden.