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