0

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

  • Fast Select
  • Легко выбрать только строки, как CAT2/Cat4 -> Возвращает Cat5 и Cat6
  • Поддержка виртуальных Категории
  • Вставка должна быть легкой, но не важно по сравнению с быстрым Выберите
  • Удалить же, как и вставки, легко было бы хорошо, но опять-таки это более важно, чтобы быть в состоянии выбрать быстро
  • Reorder опять не так важно, как Select

alt text

Я посмотрел на материализованные-Path и hierarchyid` в, но большинство примеров использовать образец, как AdventureWorks, что это слишком сложно, для моей потребности.

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

+0

Зачем это нужно создавать на SQL-сервере? Разве дизайн, основанный на естественном иерархическом хранилище данных, таком как XML, не подходит лучше? –

+0

Ну, файл xml был бы способ сделать это, но как выбрать производительность файла xml по сравнению с выбором на сервере sql? – gulbaek

+0

Звучит как идеальный случай для иерачы. – usr

ответ

0

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

1

Поддержка SQL Server recursive CTEs, возможно, они вам помогут.

Вы можете создать структуру дерева из ваших данных с помощью следующего 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.