IMS, DL/I -und XML - Ühus an die Front!

Liebe ExpertInnen,

vor vielen hundert Jahren habe ich mal hierarchische Datenbanken programmiert, lange bevor relationale Datenbanken erfunden waren. Mir fiel das wieder ein, als mir die Aufgabe begegnete, aus einem XML-File eine Datenbank zu bauen. XML hat nämlich die gleiche Struktur wie das IMS - ein Parent hat Childs (pardon), jedes Child kann Geschwister (Siblings) haben. Mehr nicht.

Und nun zum eigentlichen Rätsel: Erinnert sich noch jemand, wie wir damals m:n-Beziehungen dargestellt haben? Den Begriff gab es ja noch gar nicht, aber irgendwie muss es das Konstrukt gegeben haben, einfachstes Beispiel: Ein Buch kann viele Autoren haben., ein Autor kann viele Bücher schreiben. Damit komme ich natürlich ins Grübeln, wie das in XML gemacht wird. Wer weiß was?

Gruß
Ralf

Hallo Ralf,

das kann ich dir nicht sagen. Aber zu hierarchischen Datenbanken habe ich etwas aus meinem Studium beizutragen, was vielleicht deine Frage nach den m:n-Beziehungen beantwortet:

grafik

Gruß
Christa

Danke, Christa, die Grafik hätte es nicht gebraucht (süß: Beziehungen tragen keine Namen. Wie denn auch, sie existieren ja nur als physische Pointer).

Die gelbe Aussage möchte ich so nicht stehen lassen, weil die Ausleihe schon seit Urzeiten das Standardmodell für die Schulung ist und es somit irgend einen Trick geben muss, die m:n-Geschichte (Beziehung will ich es hier nicht nennen) abzubilden. Und Stammbäume sind damals durchaus in IMS gebaut worden.

Muss nochmal grübeln, vielleicht bringt mich „nicht in der gleichen Hierarchie“ weiter.

Gruß
Ralf

Ja, XML ist auch aus meiner Erinnerung einfach eine Art Baum.

Aber was heißt denn m:n. Meines Erachtens braucht es quasi zwei Tabellen, die dann aus beiden Blickrichtungen mehrer Lösungen zulassen. Sagen wir mal Autos und Fahrer. Jeder Fahrer kann sicherlich mehrere Autos haben, Jedes Auto mehrere Fahrer. Halt m:n.

Im XML würde ich erwarten, dass der „Baum“ quasi nur einen Teil beinhaltet. Meinetwegen Fahrer mit deren Autos als Childs. Legt diese beiden Teilinformationen in drei Tabellen „entsteht“ m:n. Eine für die Fahrer, eine für die Autos und eine für die Relationen (Auto zu Fahrer).

fg

Dirk_p

Um eine M:N-Beziehung in einer Baumstruktur abzubilden, müssten die Kind-Daten redundant gespeichert werden. Wenn Buch Eltern und Autor Kind ist, sind die Daten zu einem Autoren bei jedem betroffenen Buch zu speichern.

Alternativ können sog. virtuelle Beziehungen verwendet werden, um die Redundanzen zu vermeiden. Das ist wahrsch. mit „nicht in der gleichen Hierarchie“ gemeint. Buch als Eltern steht mit einem „Autoren-Pointer“ als Kind in hierarchischer Beziehung. Dieses Kindelement enthält ein Attribut, dass auf den/die Autoren verweist. Autor wäre ebenfalls Eltern (in einer eigenen Hierachie). Der „Autoren-Pointer“ verweist auf Autoren als virtuelle Eltern.

Beide Ansätze sind auch in XML möglich. Der Erste ist offensichtlich. Beim Zweiten werden entspr. Referenzen mittels IDREF-Typ gesetzt (siehe bspw. http://www.torsten-horn.de/techdocs/java-xsd.htm#Schema-IDREF).