Автор Тема: dbTree  (Прочитано 4432 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн golden-den

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 118
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kosmos13.narod.ru
dbTree
« : 22 Февраля 2006, 21:24:23 »
Решил попробовать работать с классом dbtree

Автор этого класса пишет:

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

CREATE TABLE categories (
cat_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
cat_left INT UNSIGNED NOT NULL,
cat_right INT UNSIGNED NOT NULL,
cat_level INT UNSIGNED NOT NULL,
PRIMARY KEY(cat_id)
KEY (cat_left, cat_right, cat_level)
);


Что значит структуру хранить отдельно?
Что отдельная таблица со ВСЕМИ свойствами ВСЕХ объектов, а связь при этом по полю cat_id?

Оффлайн for_i_0

  • $15 per hour
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 555
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.php.net/manual/en
dbTree
« Ответ #1 : 22 Февраля 2006, 21:43:32 »
golden-den
ИМХО в прямом смысле, отдельно в отдельной таблице со связуешими полями с данной таблицей.
« Последнее редактирование: 22 Февраля 2006, 23:11:01 от for_i_0 »
[off]Безработный[/off]

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
dbTree
« Ответ #2 : 23 Февраля 2006, 11:26:16 »
Цитировать
golden-den:
Что отдельная таблица со ВСЕМИ свойствами ВСЕХ объектов, а связь при этом по полю cat_id?

не совсем ясно что имеется ввиду под "всеми объектами".
Допустим у тебя есть древовидная структура категорий. У категории есть имя и еще какие-то поля, не имеющие прямого отношения к дереву.
Тогда создаешь одну таблицу как в этом примере и вторую:
CREATE TABLE category_names (
   cat_id int unsigned not null primary key,
   name varchar(128),
   .... // другие поля
);
Сначалов вставляешь данные в categories, получаешь идентификатор вставленной записи и потом вставляешь данные о категории :
INSERT INTO category_names (cat_id, name) VALUES($cat_id, $name);

Если у тебя на сайте есть еще какое-то дерево (например дерево комментариев) то для него свои 2 таблицы.

Это всего лишь рекомендация. Я например раньше деревья хранил в одной таблице - мне так было проще (особенно когда mysql был без поддержки транзакций).
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн golden-den

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 118
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kosmos13.narod.ru
dbTree
« Ответ #3 : 23 Февраля 2006, 12:02:59 »
Макс
я это и имел ввиду.
спасибо

Оффлайн golden-den

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 118
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kosmos13.narod.ru
dbTree
« Ответ #4 : 23 Февраля 2006, 12:04:56 »
вопрос как раз по коду dbTree
в методе getNodeInfo($ID) (да и в других)
есть выражение

return array((int)$Data[$this->left], (int)$Data[$this->right], (int)$Data[$this->level]);


что означает (int)$data?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
dbTree
« Ответ #5 : 23 Февраля 2006, 18:20:10 »
приведение значения $Data[$this->left] к int-у
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28