Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Baumstruktur darstellen (https://www.delphipraxis.net/182109-baumstruktur-darstellen.html)

taveuni 2. Okt 2014 07:54

AW: Baumstruktur darstellen
 
Das gibts auch bei MSSql inkl. Express Versionen ab Version 2008. Stichwort hierarchyid.

Blup 2. Okt 2014 13:40

AW: Baumstruktur darstellen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1274443)
Zitat:

Zitat von Blup (Beitrag 1274437)
Du solltest die Verknüpfung ID - ParentID (häufig gehört auch noch eine Position für die Reihenfolge dazu) auf jeden Fall in einer separaten DB-Tabelle speichern.
Sonst sperrt eine Verschiebung des Elements im Baum auch alle von der ID direkt oder indirekt abhängigen Datensätze.

Das verstehe ich nicht.
Wenn ich einen Knoten verschiebe, ändere ich nur seine Parent-ID. Was hat das mit den Unterknoten zu tun?

Fremdschlüssel von ParentID auf ID kann man innerhalt einer Tabelle vermutlich auch in diesem SQL-Dialekt nicht setzen.
Sollte ein Datensatz gelöscht werden, können immer noch Unterknoten existieren, die mit ParnetID auf den gelöschten Datensatz verweisen.

Das Problem "lock conflict ..." ist abhängig vom Transaktionsmanagment und betrifft z.B. Interbase oder Firebird.
Beispiel:
Die Baumstruktur enthält Artikel (Tabelle T_ARTIKEL Primärschlüssel ID).
Es gibt eine weitere Tabelle T_BESTELLUNG unter anderem mit dem Feld ArtikelID (mit Fremdschlüssel auf T_ARTIKEL.ID).
Der Artikel wird verändert (Bezeichnung, ParentID oder anderes) in Transaktion A.
Dadurch wird eine neue Version dieses Datensatzes erzeugt.
Andere Transaktionen z.B. B, die vor Ende der Transaktion A gestartet wurde, haben jetzt ein Problem.
Bestellungen die diesen Artikel enthalten, können in Transaktion B nicht gespeichert werden (lock conflict ...), da diese mit Fremdschlüssel(ArtikelID) auf die neue Version des Artikel-Datensatz verweisen müssen, der aber in Transaktion B noch nicht bekannt ist.

generic 2. Okt 2014 13:51

AW: Baumstruktur darstellen
 
Zitat:

Zitat von taveuni (Beitrag 1274498)
Das gibts auch bei MSSql inkl. Express Versionen ab Version 2008. Stichwort hierarchyid.

Alternativ geht das auch über CTE bei eigenen Datentypen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz