Mehrfach-Hierarchie

Hallo,

ich bin leider noch nicht sehr erfahren mit postgresql, genau genommen ein blutiger Anfänger, und ich habe da ein Problem, bei dem ich absolut nicht weiter komme.

Ich möchte eine n:m Relation für Tätigkeiten haben.

Activities: idActivities, Activity

Instanz von Activities(1): idActivities(1), Activity(1)

Zuordnungen: idActivities, idActivities(1)

Als Beispiel:

Tabelle Activities:
1, Sport
2, Kultur
3, Kampfsport
4, Karate
5, Japan
6, Tanzen
7, Theater

Tabelle Zuordnungen:
Sport, Kampfpsort
Kampfsport, Karate
Japan, Karate
Sport, Tanzen
Kultur, Theater

etc…

Bei nur einer Zuordung, also nur einer direkten übergeordneten Hierarchie krieg ich das hin, aber nicht so.

Ich bin kurz davor, einfach eine Kopie der Activities-Tabelle zu erzeugen, aber das wäre ja recht blöd…

Ich müsste quasi nur eine virtuelle Tabelle erzeugen um dann von beiden Tabellen eine FK zu erzeugen, aber wie…??

Wenn ich Dich richtig verstehe, suchst Du Bäume, trees. Da haben sich andere schon mal drüber Gedanken gemacht, hier z.B.

Und der doc-bot im IRC kennt dies hier:

07:37 < rtfm_please> see http://developer.postgresql.org/cvsweb.cgi/pgsql/contrib/tablefunc/
07:37 < rtfm_please> or Transitive closure - Wikipedia, the free encyclopedia
07:37 < rtfm_please> or PgTree - Database Modules - Trac

Vermutlich findest Du in meinen del.icio.us - Links in den verdächtigen Kategorien auch noch einiges dazu.

Andreas

2 hast du schon … “Activities” und “Zuordnungen”
weiterhin benoetigst du noch eine 3. mit den n:m verknuepfungen

die koennte dann “AZTree” heissen … es wird also sogar ein Netz entstehen
CREATE TABLE “AZTree” (
id_tree,
idActivities
idZuordnungen
)

ob du in dieser Tabelle dann für alle übergeordnete Activities einen Datensatz für Zuordnungen erzeugst, oder nur einen Datensatz für Zuord. in dem Knoten (Activity) wo sie anhängt - bleibt dir überlassen.

@symbiont:

Das verstehe ich nicht, die Tabelle idZuordnungen hat doch keinen Bezug zu Activities und somit bringt mir das doch nichts. Ich müsste doch eigentlich die Einträge von Activities mit sich selbst in Bezug setzen, also ist doch eigentlich die Tabelle Zuordnungen schon für die n:m Relation zuständig.

Aber vielleicht verstehe ich auch den letzten Satz falsch, ich stehe momentan sowieso ganz dolle auf dem Schlauch ;(


@akretschmer: Ja, ich suche Trees mit Querverbindungen. Aber ich benutze ja auch Postgresql und habe in deinem Link was von LTree gelesen…

PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: ltree

Andreas

Zuordnungen.idZuordnungen → AZTree.idZuordnugnen …
und dort ist ein Feld AZTree.idActivities, das auf folgende Weise
AZTree.idActivities → Activities.idActivities referenziert.

in enstprechenden Abfragen kannst du das alles wunderbar miteinandre verknuepfen …

studiere den / die links von AK … da wird ein ähnliches Beispiel ausführlich beschrieben … leider nicht sonderlich übersichtlich, da das Problem eigentlich recht einfach darzustellen ist.

Ich vermute, ihr redet aneinander vorbei. Ich versteh schon, was Du meinst, der Fragesteller will aber mehrstufige Hierarchien darstellen, ähnlich dem Beispiel in PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: ltree Deine Verknüpfungstabelle erscheint mir da nicht hilfreich. Ich selbst hab damit aber auch noch nicht wirklich was zu tun gehabt.

Andreas

was eine “mehrstufige Hierachie” anders sein soll, als auch “nur” eine hierachie…
wenn er sowohl activitaeten als auch zuordnungen als baum darstellen will, dann nimmt er eben 2 verknuepfungstabellen … oder auch nur eine, wenn er auf strikte foreignkeys verzichten kann … dann wird eben neben der id_parent und id_node noch ein feld mit dem “typen” gespeichert … ist fuer model-fanatiker sicher nicht schoen … aber u.U. sehr praktisch

wenn Zuordnungen z.B. ein einfacher Baum ist (über idParent in Zuordnungen) dann braucht er auch nur die eine n:m verknuepfungstabelle zwischen A und Z