AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DB-Verknüpfungen untergeordneter Tree-Nodes anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

DB-Verknüpfungen untergeordneter Tree-Nodes anzeigen

Ein Thema von Pfoto · begonnen am 8. Okt 2005 · letzter Beitrag vom 11. Okt 2005
 
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: DB-Verknüpfungen untergeordneter Tree-Nodes anzeigen

  Alt 11. Okt 2005, 09:03
Hallo Pfoto,

Zitat von pfoto:
Intern wird dann in einer n:n-Tabelle die ID des Nodes und die ID des DB-Eintrags aufgenommen.
Nur zur Begriffsbestimmung - durch die von dir erwähnte m:n Beziehung stellen die Knoten der Baumansicht ein Klassifikationsschema dar. Bei einer 1:n Beziehung zwischen den Knoten und deinen Datensätzen würden wir von einer Gliederung sprechen. Der Unterschied im physischen Datenmodell liegt in der Einführung eines Beziehungsdatentyps. Beschränken wir die Betrachtung vorerst auf Gliederungen.

Gliederungsbäume sind essentiell hierarchische Strukturen und können in relationalen Datenbanken nur als selbstrekursive Tabelle umgesetzt werden. Für die weitere Diskussion führe ich die Tabelle OUTLINE (ID, POSITION, TITLE, OUTLINE_ID, ROOT_ID) zur Aufnahme von Gliederungsbäumen ein. Bei Speicherung nur eines einzigen Baumes würde das Attribut ROOT_ID nicht benötigt. ID ist Primärschlüssel, OUTLINE_ID und ROOT_ID sind "Fremdschlüssel" und referenzieren die eigene Tabelle, TITLE ist der Text für den Gliederungseintrag und POSITION die ab 0 gezählte Ordnungsnummer des Eintrages.

Schon beim Füllen des Baumes musst du dich entscheiden - alles auf einmal rein schaffen oder nur was nötig ist? Ich halte in der Regel eine vollständige Gliederung in einer Query offen:

SELECT * FROM OUTLINE WHERE ROOT_ID = :root ORDER BY OUTLINE_ID, POSITION In seltenen Fällen (stark variierender Grad des Baumes) optimiere ich das Laufzeitverhalten, indem ich nur die Knoten eines Parent vorhalte oder den TITLE ausklammere und den Zugriff darauf über einen Zwischenspeicher unterstütze.

Wenn ich für einen Knoten eine vollständige Expansion brauche, dann geht das mit der oben angegebenen Query recht zügig. Es gibt da keinen Grund Hilfsattribute einzuführen, wie z.B. Zeiger auf andere Ebenen. Die Nachteile hast du ja schon selbst erkannt.

Und solltest du jemals Hilfsattribute zur Beschleunigung von Zugriffen brauchen, dann gehören diese Attribute nicht in die OUTLINE Tabelle. Sie werden entweder nur im Hauptspeicher aufgebaut und vorgehalten oder verschwinden in einer zusätzlichen Tabelle, die später über einen Join in eine View eingebracht werden kann. So bleibt dein fachliches Datenmodell unbelastet.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz