0

Hallo Ich möchte eine Baumstruktur in einer SQL-Datenbank erstellen. Ich brauche folgende Eigenschaften.Baumstruktur in Sql Server inklusive virtuelle Pfade darstellen

  • Schnell Select
  • leicht wählen nur mit einem String wie Cat2/Cat4 -> Gibt Cat5 & Cat6
  • Unterstützung von Virtual Kategorien
  • Insert sollte einfach sein, aber nicht wichtig, im Vergleich zu einem schnellen Wählen
  • löschen gleiche wie Insert, einfach wäre schön, aber auch hier ist es wichtiger, der Lage sein, schnell zu wählen
  • Nachbestellung ist wieder nicht so wichtig wie Select

alt text

Ich habe bei materialisierten-Path und hierarchyid sah, aber die meisten Beispiele verwenden, um eine Probe wie Adventureworks, das ist einfach zu kompliziert, für mein Bedürfnis.

Nur für das Protokoll I SQL Server 2008 R2 verwenden und C# 4.0

+0

Warum muss dies in SQL Server erstellt werden? Würde ein Design, das auf einem natürlich hierarchischen Datenrepository wie XML basiert, nicht besser passen? –

+0

Nun eine XML-Datei wäre eine Möglichkeit, aber wie ist die Auswahl Leistung einer XML-Datei im Vergleich zu auf einem SQL-Server auswählen? – gulbaek

+0

Klingt wie ein perfekter Fall für Hierachyid. – usr

Antwort

0

Vielleicht einen Blick auf verschachtelte Sätze nehmen? Siehe Joe Celko.

1

SQL Server-Unterstützung recursive CTEs, können sie Ihnen wahrscheinlich helfen.

Sie können eine Baumstruktur aus Ihren Daten mit der folgenden SQL bauen:

WITH cat_tree AS (
    SELECT cat_id, cat_name, parent_id, 
     0 AS level, CAST('0' AS varchar(90)) AS path 
    FROM cats 
    WHERE parent_id IS NULL 
    UNION ALL 
    SELECT c.cat_id, c.cat_name, c.parent_id, 
     ct.level + 1, 
     CAST(ct.path+'.'+CAST(
     (row_number() OVER (ORDER BY ct.cat_id)) AS varchar) AS varchar(90)) 
    FROM cats c 
    JOIN cat_tree ct ON c.parent_id = ct.cat_id) 
SELECT * FROM cat_tree 
ORDER BY path; 

Werfen Sie einen Blick auf die Ergebnisse auf SQL Fiddle.