Yii Framework Forum: Дерево: NestedSets vs CTreeView - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Дерево: NestedSets vs CTreeView посоветуйте, что выбрать Rate Topic: -----

Poll: NestedSets vs CTreeView (11 member(s) have cast votes)

NestedSets or CTreeView?

  1. Nested Sets (7 votes [63.64%] - View)

    Percentage of vote: 63.64%

  2. CTreeView (4 votes [36.36%] - View)

    Percentage of vote: 36.36%

Vote Guests cannot vote

#1 User is offline   starkeen 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 11-April 11

Posted 19 May 2011 - 08:02 AM

Коллеги!
Стою перед выбором. Что лучше использовать из сабжа. Имеющийся классификатор пока представлен в виде совершенно произвольном, все равно придется городить идеологию с нуля.
То ли строить таблицу в стиле id-parent_id-name, то ли id-left-right-name.
Какие особенности в реализации? Какие подводные камни? Как быстрее и проще?
0

#2 User is offline   andy_s 

  • Random Member Title
  • Yii
  • Group: Moderators
  • Posts: 1,526
  • Joined: 22-June 09
  • Location:Russia, Kostroma

Posted 19 May 2011 - 08:33 AM

Не люблю это говорить, но.. почему бы не спросить у гугла? :) Таких обсуждений сотни а то и больше (сравнения со схемами, диаграммами и т.д.). Если кратко - то всё зависит от задачи. Кстати, есть еще вариант:

id | path | name
1  | NULL | a
2  | 1    | b
3  | 1/2  | c

И у этого варианта тоже есть несколько вариантов :)
0

#3 User is offline   starkeen 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 11-April 11

Posted 19 May 2011 - 01:58 PM

View Postandy_s, on 19 May 2011 - 08:33 AM, said:

Не люблю это говорить, но.. почему бы не спросить у гугла? :) Таких обсуждений сотни а то и больше (сравнения со схемами, диаграммами и т.д.). Если кратко - то всё зависит от задачи. Кстати, есть еще вариант:

id | path | name
1  | NULL | a
2  | 1    | b
3  | 1/2  | c

И у этого варианта тоже есть несколько вариантов :)

Да спрашивал у гугла, но потянуло спросить именно здесь, именно в отношении yii: насколько удобно использовать ту или иную модель.
А вот вариант, предложенный вами, с путем, он тоже реализован в yii? Это уже факультативный интерес, достаточно нетривиальный подход всё-таки.
0

#4 User is offline   andy_s 

  • Random Member Title
  • Yii
  • Group: Moderators
  • Posts: 1,526
  • Joined: 22-June 09
  • Location:Russia, Kostroma

Posted 19 May 2011 - 02:11 PM

В расширениях есть компоненты, позволяющие работать с обоими типами хранения деревьев. Так что не вижу никаких проблем. Сам только что сделал обычное дерево (id, parent), вложенные узлы подгружаются ajax'ом по необходимости. Так как нет особой надобности выводить полное дерево (поддерево) и полные пути при каждом запросе, то этот способ оправдывает себя. В противном случае стоит задуматься о других вариантах.

То, что я описал с path, не является нетривиальным подходом. Здесь многие операции выглядят очень просто (особенно если добавить поле, содержащее непосредственного родителя). Ограничение, очевидно, на длину поля path.

Стоит помнить одно: идеального варианта хранения деревьев в реляционной базе данных быть не может :) Разве что взять какую-нибудь СУБД, где есть хорошая встроенная поддержка деревьев...
0

#5 User is offline   napeHeK 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 108
  • Joined: 04-March 10

Posted 19 May 2011 - 04:19 PM

Я всегда пользуюсь Nested Sets, т.к. в ней удобней к примеру менять порядок записей, проверять ветки на параллельность и элементарно выбрать всех родителей. В общем всё зависит от задачи.

Кстати Nested sets чаще использует 3 поля (leftKey, rightKey, level) + изредка добавляют поле parent_id.
0

#6 User is offline   starkeen 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 11-April 11

Posted 20 May 2011 - 12:28 AM

View PostnapeHeK, on 19 May 2011 - 04:19 PM, said:

В общем всё зависит от задачи.

Задача как раз такая, что изменять дерево придется нечасто, а больше читать. Я так понимаю, Nested Sets для этого случая - самое то.
0

#7 User is offline   Werewolf 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 31-May 09

Posted 22 May 2011 - 12:20 PM

View Poststarkeen, on 19 May 2011 - 08:02 AM, said:

То ли строить таблицу в стиле id-parent_id-name, то ли id-left-right-name.

Целиком зависит от задачи. Сам использую Nested Sets, т.к. с parent_id когда вложенность больше двух уровней сложную выборку не сделаешь по-человечески.
В репозитории расширений YiiExt есть behavior для работы с Nested Sets, рекомендую.
0

#8 User is offline   zvnman 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 30-August 10
  • Location:Lipetsk, Russia

Posted 12 June 2011 - 10:05 AM

Я использую ENestedSetBehavior.
Подскажите как подготовить TreeStructuru для отображения в cTreeView?
Должно получиться вот так:
$tree = array(
    array(
        'text'     => 'Node 1',
            'children' => array(
                 array(
                    'text'     => 'Node 1.1',
                        'children' => array(
                             array(
                                'text' => 'Node 1.1.1',
                             ),             
                        )
                 ),    
                 array(
                    'text'     => 'Node 1.2',
                        'children' => array(
                             array(
                                'text' => 'Node 1.2.1',
                             ),             
                        )
                 ),           
            )
    ),
);

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users