# Stückliste



## Alex04 (10. Okt 2011)

Hallo,
ich muss eine Art Stückliste implementieren. Java-seitig habe ich dafür eine abstrakte Klasse Material und die 2 konkreten Klassen Teil und Teilset. Teil und Teilset sind von Material abgeleitet. Ein Teilset besteht aus mehreren Materialien. D.h. innerhalb von Teilset gibt es eine Liste von Materialien.
Insgesamt ist das eine Rekursion bzw. Baumstruktur. 
Strategie ist Single Table, d.h. die Attribute von Material sind direkt in der Datenbank und den jeweiligen Tabellen enthalten. Die Tabelle Teil sowie die Tabelle Teilset haben die Attribute von Material direkt verankert.

Die Frage nun, wie gehts weiter? Wie würde ein Select statement aussehen, dass mir einen solchen Baum zurückgibt?

Vielen Dank schon mal für eure Hilfe!

Lg
Alex


----------



## SlaterB (10. Okt 2011)

die Beschreibungen sind reichlich knapp geraten,
wie kann der Baum aussehen, gibt es nur Teillset mit darin mehreren Teilen? oder auch Teilset mit Inhalt u. a. Teilset?
wie ist das implementiert? du sagst Teilset enthält alle Attribute, nur die eigenen oder die aller Teile, oder eine Liste von Ids?
in einzelnen Spalten, ist die Anzahl begrenzt oder muss da ein Feld geparst werden?

mit einer Query mehrere Baum-Ebenen zusammenzusetzen ist generell schwierig, 
die einfache Variante ist eigentlich immer alles in Java zu laden und dort dann mit Maps oder beliebig zusammenzusetzen,
es wird doch sicher nicht zigtausend Materialien geben?


----------



## 123456789 (10. Okt 2011)

Hallo,

ich hatte kürzlich ein ähnliches Problem. Da ich aber meist mit einem Datenbank- ServiceLayer arbeite, konnte ich das recht einfach lösen. 
Das DB Service bietet einfach eine Methode get...() an und innerhalb dieser Methode werden dann die verschiedenen DB- Implementierungen verwendet um das gewünschte Objekt (Baum) zusammen zu bauen. 

Wie SalterB schon erwähnt hat, ist dies mit nur einem SQL- Query ziemlich schwierig.

Der ServiceLayer macht zwar mehr arbeit, aber bietet dafür eine saubere und übersichtliche Implementierung. Ein sehr aufwändiges SQL- SELECT macht auch die weitere Wartung und Erweiterung nicht einfacher.

LG


----------



## ThreadPool (10. Okt 2011)

SlaterB hat gesagt.:


> mit einer Query mehrere Baum-Ebenen zusammenzusetzen ist generell schwierig,
> die einfache Variante ist eigentlich immer alles in Java zu laden und dort dann mit Maps oder beliebig zusammenzusetzen,



Man könnte auch alternative Baummodelle verwenden z.B. Planet MySQL - Archives - Moving Subtrees in Closure Table Hierarchies. Eine noch explizitere Darstellung findet sich in SQL Antipatterns: Avoiding the Pitfalls of Database Programming  im Kapitel "Naive Trees". Dort gibt es auch eine "Gegenüberstellung" der "gängigen" Methoden bezogen auf die Einfachheit von Anfragen.


----------

