Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Структура хранение деревьев- задачки. (Дуб) 15/03/2006 - 14:08:54
      Re: Пояснения (Дуб) 15/03/2006 - 14:31:39
      Re: правильный рисунок (Дуб) 15/03/2006 - 14:34:48

> Original message text:
> From: Дуб - 15/03/2006 - 14:08:54
> Subject:Структура хранение деревьев- задачки.
> -----------------
> Доброго времени суток.
> Помогите решить несколько задач. В 2 таблицах хранятся деревья.
> В одной узлы,
> CREATE TABLE `points` (
> `id` int(11) unsigned NOT NULL auto_increment,
> PRIMARY KEY (`id`)
> ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
> во второй - связи
> CREATE TABLE `tree` (
> `id` int(11) unsigned NOT NULL auto_increment,
> `i_am` int(11) unsigned default NULL,
> `my_child` int(11) unsigned default NULL,
> `count` int(11) unsigned NOT NULL,
> PRIMARY KEY (`id`),
> KEY `i_am` (`i_am`),
> KEY `my_child` (`my_child`),
> CONSTRAINT `tree_fk1` FOREIGN KEY (`my_child`) REFERENCES `points` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
> CONSTRAINT `tree_fk` FOREIGN KEY (`i_am`) REFERENCES `points` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
> ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
> 1 запись таблицы хранит 1 связь между 2 вершинами и ее мощность.
> Нужно зная номер узла из первой таблицы, вытаскивать
> а) номера всех детей
> б) номера всех родителей
> в) распределение(упорядочивание) вершин по вложенностям .
> Как я прикинул на бумаге, структура сама по себе , позволяет хранить множество деревьев в с приличной экономией места.
> Ничего , кроме рекурсий в голову не лезет. А хотелось бы обойтись SQL. Очень нужное дело. Заранее спасибо.
>
>


From: Дуб - 15/03/2006 - 14:31:39
Subject:Пояснения
-----------------
Например, надо хранить дерево такого вида:
(7)
|->11
|------->(3)
|->10
|-> 9
|--------->(5)
|->1
|->2
Будет хранится в таблицах в таком виде:
`points`
1
2
3
5
7
9
10
11
а в таблице `tree` будет вот что
____________________________
id | i_am | my_child |count|
---+-------+----------+----+|
1 | 7 | 11 | 1 |
2 | 7 | 3 | 1 |
3 | 3 | 10 | 1 |
4 | 3 | 9 | 1 |
5 | 3 | 5 | 1 |
6 | 5 | 1 | 1 |
7 | 5 | 2 | 1 |
___|_______|__________|_____|

Этот вид хранилища выбран не случайно
Пробовал способ http://phpclub.ru/detail/article/db_tree.
Не годится по 2 причинам:
1) при хранении более 1 дерева начинается геморрой.
2) При изменении структуры нужно переписывать все записи в дереве,а здесь только меняешь то, что нужно и все в ажуре.
3) одно поддерево может входить в разные деревья


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
26957



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |