Считается ли плохим проект сочетать модель списка дополнений и модель вложенных множеств? - PullRequest
3 голосов
/ 23 февраля 2010

Я работаю над созданием древовидной структуры в MySQL и экспериментирую с различными способами представления данных. Однако, как бы я это ни разрезал, недостатки есть.

Модель вложенных множеств позволяет мне легко выбирать целые ветви дерева - что мне нужно сделать. Однако не так просто выбрать непосредственных потомков узла.

Модель списка смежности отлично подходит для получения непосредственных детей, но не так хороша для возврата целых ветвей дерева.

Мне интересно, есть ли что-то особенно плохое в построении древовидной структуры, подобной этой:

TABLE: Tree
    ID
    name
    lft
    rgt
    parentID

Итак, у меня есть модель списка смежностей и модель вложенных множеств в одной таблице. Таким образом, я могу использовать либо / или, в зависимости от того, что я выбираю.

Что думают люди? Это разрешено? (Арахисовое масло и шоколад наконец вместе?) Или это считается плохим дизайном?

Заранее спасибо,

Ответы [ 2 ]

1 голос
/ 23 февраля 2010

Я очень рекомендую это сам. Это стиль, который CakePHP использует для своих древовидных структур, и, как вы указали, он дает вам большую гибкость. Вам просто нужно проделать немного больше работы, чтобы обеспечить целостность вашего дерева, но оно того стоит.

1 голос
/ 23 февраля 2010

Нет, это совсем не плохой дизайн. По крайней мере, по моему мнению.

Однако я бы реализовал только один. Например, я использовал Модель Списка Смежности в качестве основного метода добавления новых элементов и получения ... (очевидно, получение с тех пор, как это так просто), однако я также добавил parentIds для Nested Set.

Преимущество этого состоит в том, что я могу перестроить свой ALM в любое время и легко перемещать вещи, если я сохраню parentIds.

Я бы не использовал в вашем коде, однако, просто он был там в фоновом режиме ...

Отредактированные комментарии

Вы упоминаете, что не так просто выбрать непосредственных детей. Я думаю, что вы делаете что-то не так. Даже в Списке Смежности чрезвычайно легко выбрать ближайших детей.

Если вы создадите новый вопрос, я отвечу, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...