Представлять древовидную структуру в Sql Server, включая виртуальные пути - PullRequest
0 голосов
/ 05 января 2011

Привет, я хочу создать древовидную структуру в базе данных SQL. Мне нужно иметь следующие свойства.

  • Быстрый выбор
  • Легко выбрать только с такой строкой, как Cat2 / Cat4 -> Возвращает Cat5 & Cat6
  • Поддержка виртуальных категорий
  • Вставка должна быть простой, но не важна по сравнению с быстрым выбором
  • Удалить так же, как и Вставить, просто было бы неплохо, но, опять же, более важно иметь возможность быстрого выбора
  • Изменение порядка снова не так важно, как Select

alt text

Я рассмотрел Materialized-Path иierarchyId, но в большинстве примеров используется пример, такой как AdventureWorks, который слишком сложен для моих нужд.

Просто для записи я использую Sql Server 2008 R2 и C # 4.0

Ответы [ 2 ]

1 голос
/ 21 мая 2012

Поддержка SQL Server рекурсивные CTE , они могут вам помочь.

Вы можете построить древовидную структуру из ваших данных с помощью следующего SQL:

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;

Посмотрите на результаты SQL Fiddle .

0 голосов
/ 21 мая 2012

Может быть, посмотрите на вложенные множества? Смотри Джо Селько.

...