SQL Recursionsabfragen mit Transact-SQL realisieren

Magic1416

Lieutenant
Registriert
Dez. 2003
Beiträge
513
Hallo Zusammen,

ist es im SQL möglich, eine Art Recursionsfrage in einer Cyrcle Relation zu erstellen ?

Folgendes Scenario am Beispiel Active Directory (vereinfacht):

Ich benutze 3 Tables (siehe Darstellung):

Table 1:
Beinhaltet den LDAPPath des Objekts und einen unique BigInt, welcher der Primary Key ist.

Table 2:
Beschreibt das Object mit allen Eigenschaften. Steht mit einer 1:1 Relation in Bezug zu Table 1

Table 3:
Enthält ausschließlich Foreign Keys und stellt die Members eines AD Objekts dar.


Bei einer Abfrage eines Objektes möchte ich nicht nur die Parents wie bei folgender Abfrage


Code:
SELECT tbl_Object.Name, tbl_Object.Guid, tbl_Object_1.Name, tbl_Object_1.Guid
FROM ((tbl_Object INNER JOIN tbl_Path ON tbl_Object.ID = tbl_Path.OID) INNER JOIN tbl_Member ON tbl_Path.ID = tbl_Member.PID) INNER JOIN tbl_Object AS tbl_Object_1 ON tbl_Member.OID = tbl_Object_1.ID

sondern auch die GrandParents usw. solange bis eine bestimmte Tiefe erreicht ist oder es keine Parents mehr gibt. Das Gesamtergebnis soll untereinander stehen. Ist das irgendwie in einer performanten Art und Weise machbar.

Meine unkonventionelle Methode ist die Aktivierung der CLR auf dem Server und eine Prozedur in .Net schreiben. Das funktioniert, macht mich aber nicht glücklich.

Gruss Magic
 

Anhänge

  • db.JPG
    db.JPG
    22,4 KB · Aufrufe: 214
Du solltest deine Modellierung überdenken (Normalisierung, 1:1-Kardinalität).

(Einfach) verkette Listen sind grundsätzlich... suboptimal.
 
Da geb ich dir grundsätzlich recht. Ich brauch den Table aber, um die n:n Beziehung wieder zu tbl_Object herzustellen. Und da ein einzelnes Objekt keine zwei Pfade im AD haben kann, die 1:1 Einschränkung. Die Member Collection im AD verweist auf einen LDAP Path und damit ist die Circle Relation perfekt.
Mit dem ganzen Konstrukt sollen zügig Abhängigkeiten erkannt werden.

Gruss Magic
 
Zurück
Oben