AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Baum in einer Tabelle speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Baum in einer Tabelle speichern

Ein Thema von NoName1 · begonnen am 2. Dez 2022 · letzter Beitrag vom 2. Dez 2022
Antwort Antwort
NoName1

Registriert seit: 8. Mär 2018
191 Beiträge
 
Delphi 11 Alexandria
 
#1

Baum in einer Tabelle speichern

  Alt 2. Dez 2022, 09:02
Datenbank: egal • Version: egal • Zugriff über: egal
Guten Tag Forumsleser,
ich möchte Dokumente in einer Tabelle speichern. Da die Dokumente in verschiedene Ordnungsgruppen eingeteilt sind, bietet sich hierfür eine Baumstruktur an. So eine Baumstruktur habe ich noch nicht angelegt. Die Tiefe des Baumes soll nicht begrenzt sein.
Meine Fragen: Wieviele Tabellen werden benötigt und wie ist der Aufbau dieser Tabellen?

Ich stelle mir die Struktur in etwa so vor:
HKnoten1
UKnoten1.1
UKnoten1.2
...
UKnoten1.n
UKnoten1.n.1
---
UKnoten1.n.n
HKnoten2
UKnoten2.1
UKnoten2.n
usw.

Wie wird dieses in Tabellen gespeichert?

Vielen Dank für Eure Hilfen im Voraus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#2

AW: Baum in einer Tabelle speichern

  Alt 2. Dez 2022, 09:11
Na meistnes hat man einfach eine Parent-Spalte, wo man den jeweiligen übergeordneten HKnoten1, HKnoten2 und UKnoten1.n verlinkt und leer, wenn es selber die Rootknoten HKnoten1 und HKnoten2 sind.

Meistens aber nicht direkt auf den "Text", falls er mal leer oder doppelt ist, sondern gegen eine ID (z.B. blind durchnummeriert oder ein Timestamp oder eine sprechende ID)


Und passend dazu nutzen gute Grid-/Tree-Komponenten genau das selbe Model.




[add]
Statt des Parent kann man auch den kompletten Pfad speichern, siehe das MSSQL,
oder bei einer Liste von Dateinamen, inkl. Pfad.




Alternativ kann man natürlich auch einfach alle Zeilen in fester Reihenfolge speichern
und jeweils das Level der Einrückung dazu. (wenn diese Werte stimmig sind, ergibt sich ein schöner Tree)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Dez 2022 um 10:01 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Baum in einer Tabelle speichern

  Alt 2. Dez 2022, 09:55
Je nach DB unterstützt auch das DB System eine Baumstruktur. Am Beispiel MSSQL:
https://learn.microsoft.com/en-us/sq...l-server-ver16

Stichwort: Hierarchische Daten

Und: Bäume können recht komplex sein. Ein Knoten kann mehrere Unterknoten haben, aber er kann auch mehrere Oberknoten haben. Der Baum muss nicht insgesamt zusammenhängend sein.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Baum in einer Tabelle speichern

  Alt 2. Dez 2022, 09:57
Darauf achten, dass die Verknüpfung zwischen den Dokumenten (ID, ID_PARENT, optional: POSITION) in einer separaten Tabelle angelegt wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: Baum in einer Tabelle speichern

  Alt 2. Dez 2022, 10:10
Ob in der Tabelle selber oder der Baum in einer eigenen Tabelle, welche auf Erstere verlinkt, ist per se erstmal egal, in Bezug auf das "Wie".

Ja, Position, um eine alternative Sortierung innrhalb der Knoten zu bekommen, kann nicht schaden ... falls es keine passende Sortierung z.B. nach "Name" gibt. (und auch unnötig bei dem MSSQL)

siehe MSSQL: eine blinde Durchnummerierung mag ich nicht wirklich.
Will ist da einen Knoten verschieben/einfügen, dann muß ich eventuell auch alle Pfade der Nachfolgenden umschreiben.

Wird der ganze Pfad, gegenüber nur dem Parent gespeichert, dann müssen beim Verschieben/Umgenennen eines Knotens auch die Pfade aller Unterknoten ändern.

Und außerdem sind das doch "nutzlos" doppete Daten




also TreePath, ... oder TreeID, TreeParentID, ... oder TreeID, TreeParentID, TreeOrder, ... als Spalten
in die Tabelle oder in eine andere Tabelle, welche nur den Tree enthält.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz