Как сохранить дерево в базе данных SQL

Я должен сохранить дерево в базе данных, поэтому что лучший способ состоит в том, чтобы сделать это? Покажите метод, Вы используете и называете его за и против. (Я использую SQL Server 2005),

18
задан FrustratedWithFormsDesigner 9 July 2010 в 13:24
поделиться

4 ответа

Я нашел обсуждение в SQL Anti-patterns очень полезным, поскольку оно также фокусируется на недостатках каждой реализации.

Кроме того, слайды 48-77 в этой презентации повторяют этот анализ.

Итог: не существует такого понятия, как универсальное дерево, и нет серебряной пули для деревьев SQL. Вам нужно будет спросить себя о данных, как и сколько они будут выбраны, изменены, будут ли перемещаться ветки и т. Д., И на основе этих ответов реализовать подходящее решение.

14
ответ дан 30 November 2019 в 08:26
поделиться

Я делал это в прошлом, сохраняя данные как xml в SQL.

1
ответ дан 30 November 2019 в 08:26
поделиться
7
ответ дан 30 November 2019 в 08:26
поделиться

Ну, самым простым способом было бы, если бы запись имела столбец ParentID, чтобы она знала, какая запись является ее родителем. Это довольно стандартная практика. Например, интернет-магазин может иметь иерархию категорий товаров. Каждая категория будет иметь ParentID. Пример: Категория "Джинсы" в базе данных одежды может иметь родительскую категорию "Брюки". Немного сложнее, если вы хотите, чтобы запись указывала, кто является ее дочерними категориями, если только вы не ограничите количество дочерних категорий. Если вам нужно бинарное дерево, вы можете иметь столбцы LeftChildID и RightChildID. Если вы допускаете любое количество дочерних элементов, вы можете иметь столбец Children с идентификаторами, разделенными запятыми (например, 1,4,72,19), но это затруднит выполнение запросов. Если ваша база данных позволяет использовать типы массивов в столбцах, вы можете использовать массив вместо разделенной строки, что будет легко для запросов - но я не уверен, что MS SQL Server поддерживает это или нет.

В остальном, все зависит от того, какого рода данные вы моделируете, а также от того, какие операции вы планируете выполнять с этим деревом.

4
ответ дан 30 November 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: