Xpoint
   [напомнить пароль]

Nested Sets: Несколько корневых элементов

Метки: [без меток]
2008-06-27 19:52:19 [обр] GraseLogic[досье]
сообщение промодерировано

Здравствуйте.
Господа, из-за достаточно накладных расходов при вставке, удалении, перемещении и прочее элементов в дерево, используя эту технологию, я решил попробовать произвести некую оптимизацию своего дерева

  1. вместо дерева использую лес
  2. разрешил появлению нескольких корневых элементов внутри одного дерева.
  3. добавил поле с ИД непосредственного предка

то есть, было:

CREATE TABLE  my_tree (
  id int unsigned NOT NULL,                              -- ID ноды
  level int unsigned NOT NULL,                           -- уровень
  left_key int unsigned NOT NULL,                      -- левый ключ
  right_key int unsigned NOT NULL);                   -- правый

стало:

CREATE TABLE  my_tree (
  treeID int unsigned primary key,                      -- ID дерева "в лесе" (С)
  id int unsigned NOT NULL,                              -- ID ноды
  parentID int unsigned default NULL,                 -- ID первого (непосредственного) предка ноды
  level int unsigned NOT NULL,
  left_Key int unsigned NOT NULL,
  right_key int unsigned NOT NULL);

впринципе, регулируя факт создания нового дерева бизнес-логикой приложения, можно добиться того, что максимальная вложенность (согласно предметной области задачи разумеется) элементов, не будет превышать 100 элементов (level < 100 то есть), и не более 1000 в одной ветки (max(node-id) < 1000) что вполне устраивает.

Однако, теперь появляется возможность иметь относительно одного дерева несколько корневых нод, то есть :

________________________________________________
treeID  | id   | parentID|   level   | left_key   | right_key|
-------------------------------------------------------
1           1          0            1          1              10                -- первая "корневая нода"
1           2          0            1          1              10                -- ворая "корневая нода"

чисто технически это тоже работает, однако [b]насколько подобная структура будет идеологически верной, с точки зрения теории Nested Sets[/b] ?

Следует ли убрать такую возможность (в одном дереве [b]несколько[/b] корневых нод), либо же правильнее будет оставить только [b]одну[/b] корневую ноду, а все остальные будут являться её потомками.

Спасибо

Powered by POEM™ Engine Copyright © 2002-2005