• 25.04.2024, 12:31
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

DUI

Senior Member

mysql-Datenbank Rollen abbilden

Samstag, 15. Juli 2006, 17:49

Hallo zusammen,

wie mache ich es am besten, Unterkomponenten einer Relation Komponente (mit id und name als Attribute) abzubilden?
Kommen die Unterkomponenten (die wiederum ebenfalls Unterkomponenten haben können) am besten in dieselbe Relation Komponente, die dann ein zusätzliches parent-Attribut bekommt?
Oder ist es anstelle des parent-Attributs in der Relation Komponente sinnvoller, eine zusätzliche Relation Komponenten-Beziehung mit den beiden Attributen parent und child zu erstellen?
Kann man das so generell beurteilen oder braucht Ihr noch weitere Infos?

Grüße
DUI


Nachtrag: glaube, ich kann die Frage selber beantworten. Da eine Unterkomponente auch Unterkomponente mehrerer Komponenten sein kann, ist es zussätzliche Beziehungsrelation sicherlich sinnvoller...

Re: mysql-Datenbank Rollen abbilden

Samstag, 15. Juli 2006, 18:05

Also, ich habe mir das jetzt 3x durchgelesen und werde daraus nicht schlau. Kannst du mal sagen, was in etwa du vorhast? Hört sich für mich nach ner Art Navigation oder Seitenschema an...
Signatur out of date...

Re: mysql-Datenbank Rollen abbilden

Samstag, 15. Juli 2006, 18:10

Bin auch nicht ganz durch deinen Text gestiegen ... ?
Was willlste denn genau machen ?

Wenn ich dich teilweise richtig verstanden habe, dann willst du eine Art Diagramm/Mindmap von den Relationen der einzelnen Entitys und deren Attribute ... ?

DUI

Senior Member

Re: mysql-Datenbank Rollen abbilden

Samstag, 15. Juli 2006, 18:20

Also ein zweiter Versuch und dieses mal ausführlicher:

Ein Produkt besteht aus mehreren Komponenten. Komponenten selber können wiederum aus mehreren Unterkomponenten bestehen. Unterkomponenten wiederum können ebenfalls aus mehreren Unterkomponenten bestehen.

Dies möchte ich nun in einer Datenbank abbilden und habe momentan (in etwa) die Relationen:

Produkt (pk_id, name)
Komponente (pk_id, name)
Produkt_zu_Komponente (pk_produkt_id, pk_komponente_id)


Jetzt war die Frage, ob ich die Beziehung der Unterkomponenten in einer weiteren Relation

Komponente_zu_Unterkomponente (pk_komponente1_id, pk_komponente2_id)

abbilden sollte.

Ist es so klar geworden? :)

DUI

Senior Member

Re: mysql-Datenbank Rollen abbilden

Samstag, 15. Juli 2006, 20:24

Die erste Methode mit dem parent-Attribut wollte ich aufgrund der Rekursion eigentlich vermeiden (obwohl Performance in meiner "Demo"-Anwendung keine wirkliche Rolle spielt).

Die als Modified Preorder Tree Traversal bezeichnete Methode war mir bisher bekannt als Nested Set-Baum, den ich auch bereits in einem anderen Teil verwende.

Für den erläuterten Bereich erscheint mir diese Methode aber nicht so edel, da Komponenten und Unterkomponenten ja in mehreren Produkten auftauchen können und dann jedes Mal aufs Neue die Äste bis zu den Unter(Unter)komponenten komplett aufgebaut werden müssten.

Das wird bei meiner obigen Methode vermieden. Hier muss man nur einmalig der Komponente alle Unterkomponenten zuweisen. Bei jedem neuen Gebrauch der Komponente für ein weiteres Produkt stehen alle Unterkomponenten (und deren Unterkomponenten) dann schon fest.
Oder habe ich da einen Denkfehler drin..?

Und konkret nachgefragt: was spricht in Deinen Augen gegen die von mir oben vorgesehene Methode?

Grüße
DUI

Re: mysql-Datenbank Rollen abbilden

Sonntag, 16. Juli 2006, 01:47

Ich habe selbst schon mit einer parent_id gearbeitet, aber die Queries werden unheimlich komplex. Soweit ich mich erinnere, war mir keine Möglichkeit bekannt, diese Verschachtelungen beliebiger Tiefe komfortabel abzufragen.

Die in dem Artikel beschriebene Methode erlaubt extrem kompakte Queries, erfordert dafür aber auch ein wenig mehr Management der Daten (in dem Fall also Aktualisieren der Baumstruktur beim Hinzufügen oder Entfernen von Elementen). Unter dem Strich zahlt sich das aber deutlich aus.

Re: mysql-Datenbank Rollen abbilden

Sonntag, 16. Juli 2006, 04:27

Zitat von »Y0Gi«

Ich habe selbst schon mit einer parent_id gearbeitet, aber die Queries werden unheimlich komplex. Soweit ich mich erinnere, war mir keine Möglichkeit bekannt, diese Verschachtelungen beliebiger Tiefe komfortabel abzufragen.


Richtig, dass geht nur mit richtigen DBMS ;)

Genauer gesagt man braucht eine Objektorientierte Datenbank, ansonsten sind rekursionen leider nicht auflösbar. Mysql kann es definitiv nicht (leider) ;)
c++: The power, elegance and simplicity of a hand grenade.

Re: mysql-Datenbank Rollen abbilden

Sonntag, 16. Juli 2006, 05:08

das von dui angesprochene problem lässt sich aber noch recht gut mit einer mysql lösen. und es kommt hier ja auch nicht auf die performance an.

was du brauchst sind 2 tabellen.

tabelle 1: hier sind alle komponenten und produkte gespeichert. unterschieden wird zwischen denen im grunde nicht, aber du kannst ja einen zusätzlichen wert in der tabelle haben der beschreibt was es ist und auch beschreiben kann in welcher ebene die komponente verwendet wird.

tabelle 2: eine jointable mit nur 2 integern. in spalte 1 steht die id des eintrags in tabelle 1 und in spalte 2 die id dazugehörigen komponente in tabelle 1. für ein produkt aus 10 komponenten gibt es also 10 einträge.

du kannst nun beliebig tief schachteln und die datenbankanfragen sind nicht übermäßig kompliziert.

Re: mysql-Datenbank Rollen abbilden

Sonntag, 16. Juli 2006, 05:27

Zitat von »Clark«



Richtig, dass geht nur mit richtigen DBMS ;)

Genauer gesagt man braucht eine Objektorientierte Datenbank, ansonsten sind rekursionen leider nicht auflösbar. Mysql kann es definitiv nicht (leider) ;)

Ich fürchte, ZODB und Konsorten sind hier keine Option, was die Sache erschwert (aber keineswegs ungewöhnlich macht).