Hallo Stefan,
ein �hnliches Problem stellte sich mir, als es darum ging
Organisationsstrukturen, welche ja auch B�ume sind, relational abzubilden.
Dabei habe ich den folgenden L�sungsansatz verfolgt:
1. Baumstrukturen werden �ber rekursive Aufrufe aufgel�st - Rekursion wird
jedoch nicht unter SQL unterst�tzt und die Aufl�sung einer Rekursion ist
immer auch mit zus�tzlicher Programmintelligenz verbunden. Diese greift, je
nach Modellierung, in der Ansicht oder bei der Ver�nderung der Daten. Mein
Ansatz an dieser Stelle war, die Programmintelligenz in der Ver�nderung der
Daten (Stored Procedures f�r alle Modifikationen) zu positionieren und so
eine "browsbare" Datenmenge zu erzeugen.
Beispiel Strukturtabelle:
craete table struktur (
stid int not null identity(0,1) primary key, --
Prim�rschl�sel
parentid int null foreign key references struktur (stid), --
Fremdschl�ssel - Ref: Vaterknoten stid (Null bedeutet: Knoten ist oberster
(Kopf) Knoten)
childkey char(4) unique (childkey, parentid), -- Eindeutige
ID des Knotens unter seinem Vater
groupkey varchar(40) unique, --
Vererbter Schl�ssel aus den Childkeys aller Vorfahren einschlie�lich sich
selbst (Hier max 10 Gen.)
Bezeichnung varchar(30) --
Bezeichnugstext des Knotens...
)
Vorteile dieser Methode sind:
- Wenn ich den Tabellen in Reihenfoge des "groupkey" Attributs ausgebe,
bekomme ich alle Daten sauber nach Struktur sortiert. Die Ausgabe in einem
Baumdiagramm in ASP kann dann durch einen simplen Gruppenwechsel abgewickelt
werden ohne dass ich noch einmal auf die Tabelle zugreifen muss. Die
Generation eines Knotens kann �ber die L�nge des Schl�ssels ermittelt
werden.
- Kinder eines Knotens lassen sich so in einem SELECT mittels LIKE emitteln
("groupkey LIKE '4711%'" oder "groupkey LIKE '4711____'").
Weniger vorteilhaft ist:
- Die Ahnereihe eins Knotens wird �ber eine prozedurale Logik in einer SP
ermittelt (WHILE Schleife) und bedarf dann meherer DB Zugriffe.
- Die Logiken der Prozeduren, welche diese Strukturinformationen generieren,
sind teils �u�erst komplex.
- Die Anzahl der maximalen Genrationen wird durch die Modellierung
vorgegeben (in diesem Beispiel 10 Generationen)
Ich hoffe, dass ich Dir damit ein wenig habe helfen k�nnen. Wenn Du
Interesse hast, kann ich Dir heute Abend die entsprechenden Scripte
(Tabellen, Procs und Beispiele) mal per E-Mail zuschicken.
Gru�
Michael
----- Original Message -----
From: "Mayer, Stefan" <[EMAIL PROTECTED]>
To: "ASP Datenbankprogrammierung" <[EMAIL PROTECTED]>
Sent: Wednesday, October 17, 2001 2:03 PM
Subject: [aspdedatabase] Baumnavigation
Mein Infosystem zeigt Beitr�ge aus einer Datenbank an.
jeder Beitrag ist �ber das Feld T_ID (gui-ID) eindeutig identifiziert,
hat neben anderen Feldern einen "TITEL" und eine "INHALT".
in einer zweiten Tabelle gibt's verkn�pfungen.
rowguid - T_ID - Kind
Sprich: Zu jedem Text gibt's n Kinder. Somit sind beliebig viele Ebenen
m�glich.
Diese Seite
show.asp?t=....
gibt den Inhalt aus, und sollte auch die Navigation machen.
Zum eines sollen alle Beitr�ge, die von der Wurzel an bis zu dem
aktuellen Beitrag kommen, angezeigt werden,
gefolgt von einer Trennlinie
anschlie�end alle "Geschwisterbeitr�ge"
und zu jedem der Geschwisterbeitr�ge die direkten Kinder.
Frage: Kann ich das irgenwie in einer Stored Procedure reinpacken (MS
SQL 7.0-Server!) oder was gibt's sonst f�r Ideen und Vorschl�ge dazu?
Stefan.
| [aspdedatabase] als [EMAIL PROTECTED] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
| [aspdedatabase] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp