2010-07-09 4 views

ответ

11

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

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

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

3

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

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

2

Существует два основных подхода

  1. В каждой записи, хранить идентификатор родителя в обнуляемого колонка (корень дерева не имеет родителя) вложенная техника множественной модели
  2. Используй Джо Селко объяснила here и (благодаря комментарий от @onedaywhen), а также в том, что является первоисточником here

EDIT: новая ссылка для этого материала here.

Плюсы и минусы ?? !! Ты ведь шутишь, правда ?!

+0

Celko приписывает модель вложенного набора Майклу Камфонсасу, хотя, похоже, Celko придумал эту фразу и, конечно же, отполировал и популяризировал технику. – onedaywhen

+0

+1 - Я только что использовал статью Целько несколько недель назад, и это было очень полезно. –

+0

Ссылки в этом ответе, к сожалению, сейчас нарушены. Кто-нибудь знает, где еще найти эту информацию? – Qqwy

1

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

Смежные вопросы