Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Hierarchische Daten speichern und abrufen (https://www.delphipraxis.net/158086-hierarchische-daten-speichern-und-abrufen.html)

EarlyBird 4. Feb 2011 18:12

Datenbank: SQL • Version: - • Zugriff über: -

Hierarchische Daten speichern und abrufen
 
Hallo,
wie speicher ich am besten hierarchische Daten?
z.B. für einen Stammbaum.
Mir geht es nicht um das Datenbanksystem sondern wie ich die Struktur am besten aufbaue.
Wie speicher ich die Daten so das ich von jedem Datensatz alle "Child" und "Parent" Datensätze abrufen kann.
Ich hoffe es versteht jemand wie ich es meine.

Gruß
EarlyBird

stahli 4. Feb 2011 18:18

AW: Hierarchische Daten speichern und abrufen
 
Hast Du mal XML (statt SQL) in Erwägung gezogen?

EarlyBird 4. Feb 2011 18:31

AW: Hierarchische Daten speichern und abrufen
 
Kommt leider nicht in Frage.
Zu den Daten kommen noch ein paar mehr Tabellen und Daten hinzu.
So das ich es insgesamt gesehen besser mit einer Datenbank lösen kann.
Aber Danke für die Anregung.

BUG 4. Feb 2011 18:46

AW: Hierarchische Daten speichern und abrufen
 
Im Grunde brauchst du nur das Elternelement speichern.

Willst du dann die Kinder wissen, mache eine Abfrage wie:
Code:
SELECT * FROM nodes WHERE (parent == ?)
Wobei du ? durch die ID des Knoten ersetzt, dessen Kinder du wissen willst.

Lemmy 4. Feb 2011 19:13

AW: Hierarchische Daten speichern und abrufen
 
Hallo,

im grunde sieht die Tabelle dafür so aus

Code:
CREATE TABLE Tree
(ID INteger,
NodeName Char(),
Parent_ID INTEGER);
wenn DU dann noch ne StoredProcedure machen kannst, dann kannst Du die Daten rekursiv ermitteln. ich glaube Holger Klemt hat dazu mal was im Entwickler geschrieben...

Grüße

mkinzler 4. Feb 2011 19:30

AW: Hierarchische Daten speichern und abrufen
 
Hier würde sich auch eine CTE ( Common Table Expression) anbieten

EarlyBird 4. Feb 2011 20:10

AW: Hierarchische Daten speichern und abrufen
 
Erstmal Danke für die Antworten.

CTE sagt mir jetzt leider nichts.
Werde mich mal mit Google schlau machen.

Im Grund ist mir die Tabellen-Struktur schon klar.
Nur bin ich mir über die Abfrage der Daten noch nicht im klaren.
Ich hatte gehofft das es mit einer bestimmten Tabellen-Struktur einfacher zu lösen ist.

Der beste Weg ist also die Daten über eine StoredProcedure rekursiv Abzufragen?

EarlyBird 4. Feb 2011 20:22

AW: Hierarchische Daten speichern und abrufen
 
das habe ich gerade zu CTE gefunden:
http://msdn.microsoft.com/de-de/library/ms186243.aspx
Scheint ziemlich genau das zu sein was ich suche.:-D
Jetzt muss ich es nur noch genau verstehen und umsetzen.
Danke für Eure vorzügliche schnelle Hilfe

EarlyBird 4. Feb 2011 21:18

AW: Hierarchische Daten speichern und abrufen
 
Ich schon wieder.
Für alle die etwas ähnliches suche:
Ich habe die Abfrage aus http://msdn.microsoft.com/de-de/library/ms186243.aspx
mal ein bisschen vereinfacht.

Delphi-Quellcode:
USE yourDatenbank;
GO
WITH Organigramm (Chef, Mitarbeiter, Title, Level)
AS
(
-- Anchor member definition
      SELECT e.Chef, e.Mitarbeiter, e.Title, 0 AS Level
    FROM dbo.myMitarbeiter AS e
    WHERE e.Chef IS NULL
    UNION ALL
 -- Recursive member definition
    SELECT e.Chef, e.Mitarbeiter, e.Title, Level + 1
    FROM dbo.myMitarbeiter AS e
    INNER JOIN Organigramm AS d
        ON e.Chef = d.Mitarbeiter
)
-- Statement that executes the CTE
SELECT Chef, Mitarbeiter, Title, Level
FROM Organigramm order BY Level, Chef;
GO
So scheint es zu funktionieren.

Der Tip mit CTE war goldrichtig besten Dank noch mal dafür.

jobo 5. Feb 2011 17:34

AW: Hierarchische Daten speichern und abrufen
 
Hallo,

die DB war für Dich ja sekundär. Hier eine schöne Möglichkeit mit Oracle:

CONNECT BY PRIOR
Beschreibt die Beziehung zwischen Eltern und Kind Datensätzen einer Hierarchie

Code:
CONNECT BY <child_value> = <parent_value>
Beispiel:
Code:
conn hr/hr

SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
oder

Code:
SELECT last_name, employee_id, manager_id, LEVEL
FROM employees
START WITH employee_id = 101
CONNECT BY PRIOR employee_id = manager_id;
Wenn Du die Hierarchieebenen kennst und die Liste richtig sortiert ist, kommst Du allerdings ohne solche Dinge aus, wenn Du bspw. einen Treeview befüllen willst.
Stored Procedures, das Oracle Beispiel oben oder auch das Beispiel von MS benötigt man vor allem wenn man einen "Ast" oder Ausschnitt benötigt.

Hier ein paar mehr Infos zu
connect by


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.
Seite 1 von 2  1 2      

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