Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Есть древовидная структура. У каждого элемента есть свой номер и номер предка. У корневых элементов номер предка - 0. Однако связь родитель-потомок получается между одной и той-же сущьностью. Как это нарисовать? Не является ли эта связь рекурсивной? Как это победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 00:17 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
SarinКак это победить?Стандартная схемаПолеIDParentIDс foreign key. Остальное зависит от сервера. На некоторых есть рекурсивные запросы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 01:58 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Сервер предполагается любой:) Тоесть проект должен с минимальными проблемами переносится на любую практически СУБД. Это будет сайт. PHP + PEAR. Именно PEAR, а не конкретная СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 14:02 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
1. Правильно. У каждого элемента свой идентификатор и идентификатор предка. У корневых элементов идентификатор предка - nil (или -1, или 0, или ... - в зависимости от твоих предпочтений и метода реализации) 2. Да, связь сама с собой. ("Свиное ухо" называется). 3. Да, это рекурсивная с вязь. Побеждать это не нужно, побеждать нужно циклические связи. С помощью триггеров, например, которые при изменении структуры дерева всех родителей. Вот такой процедуркой, к примеру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Если нарвались на "свой" идентификатор - то операция отменяется, т.к. цикл. 4. А рисовать это вот так, к примеру: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 19:29 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Извини, не прочитал: SarinСервер предполагается любой:) Тоесть проект должен с минимальными проблемами переносится на любую практически СУБД. Беру все свои слоав обратно. Я ничего не советовал и не объяснял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 19:30 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Сержант ЗолотаревИзвини, не прочитал: SarinСервер предполагается любой:) Тоесть проект должен с минимальными проблемами переносится на любую практически СУБД. Беру все свои слоав обратно. Я ничего не советовал и не объяснял. Почему же. Очень полезные вещи сказал, товарищь сержант. Дело вот какое: можно реализовать много чего средствами PHP. Например, выбрать максимальное значение для начала. Затем в цикле с 0 до максимального значения делаем выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 19:37 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
SarinДело вот какое: можно реализовать много чего средствами PHP. Машина Тьюринга рулит. (Что бы не говорил один мой знакомый старшина - начальник автослужбы.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 20:34 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
2Sarin максимальное значетие чего ? есть Celko алгоритм может поможет, а вообще в нормальных субд (db2, oracle может будет в mssql) для этого есть рекурсивные запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 21:55 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Desperado2Sarin максимальное значетие чего ? есть Celko алгоритм может поможет, а вообще в нормальных субд (db2, oracle может будет в mssql) для этого есть рекурсивные запросы. К сожалению у большинства хостеров в наличии имеется далеко не нормальная СУБД mysql. А в процессе разработки я собираюсь использовать Постгрис. Но, повторюсь, я хочу чтоб это работало на практически любой популярной СУБД. максимальное значение поля "родитель". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 23:21 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Sarin К сожалению у большинства хостеров в наличии имеется далеко не нормальная СУБД mysql. А в процессе разработки я собираюсь использовать Постгрис. Но, повторюсь, я хочу чтоб это работало на практически любой популярной СУБД. максимальное значение поля "родитель". в постгресе тоже были но в каком-то левом патче. что такое поле "родитель" я не понял, попробуй почитать сначало это: http://66.249.93.104/search?q=cache:pB0OkjmPh9UJ:downloads.ebuki.apvs.ru/Morgan.Kaufmann/Morgan.Kaufmann.Joe.Celkos.Trees.and.Hierarchies.in.SQL.for.Smarties.May.2004.eBook-DDU.pdf+Morgan.Kaufmann.Joe.Celkos.Trees.and.Hierarchies.in.SQL.for.Smarties.May.2004.eBook-DDU.pdf&hl=en&client=firefox-a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 23:59 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
У меня сделано так: Таблица иерархии Id int ParentId int Таблица денормализации иерархии ParentId ChildId Level Пояснение: в эту таблицу, при добавлении записи в верхнюю, добавляются все отношения родитель-потомок с указанием уровня. Это позволяет найти всех детей и внуков и правнуков и ... элемента, достаточно указать ParentId. Можно также найти всех предков или другими словами путь до элемента, достаточно указать ChildId. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 13:57 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Old NickУ меня сделано так: Таблица иерархии Id int ParentId int Таблица денормализации иерархии ParentId ChildId Level Пояснение: в эту таблицу, при добавлении записи в верхнюю, добавляются все отношения родитель-потомок с указанием уровня. Это позволяет найти всех детей и внуков и правнуков и ... элемента, достаточно указать ParentId. Можно также найти всех предков или другими словами путь до элемента, достаточно указать ChildId. Т.е. вторая таблица - это по сути транзитивное замыкание [графа иерархии]? А каковы расходы на его поддержание при перемещении/удалении/вставке ветвей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 14:07 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
2 Old Nick И еще вопрос - объемы (количество записей) во второй таблице по сравнению с первой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 14:09 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Old NickУ меня сделано так: Таблица иерархии Id int ParentId int Таблица денормализации иерархии ParentId ChildId Level Немножко не въехал, чем отличаются таблицы, кроме дополнительного поля Level, и, если дело только в нем, то что это дает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 15:48 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Представим дерево (в лесу которое) в виде иерархии таблица Tree Id Name ParentId --------------- 1 Корень null 2 Ствол Корень 3 Ветка Ствол 4 Листок Ветка таблица TreePath ChildId ParentId Level ---------------------- 1 1 0 - Корень: нулевой уровень сам себе родитель 2 2 0 - Ствол: тоже самое 2 1 1 - Ствол принадлежит Корню напрямую 3 3 0 - Ветка сама себе принадлежит 3 2 1 - Ветка принадлежит стволу (напрямую) 3 1 2 - Ветка принадлежит Корню (через ствол) 4 4 0 - Листок сам себе 4 3 1 - Листок ветке 4 2 2 - Листок стволу 4 1 3 - Листок корню Накладных расходов при добавлении записей не заметил, хотя они наверняка есть. Зато удобство и скорость выборки не сравнятся с рекурсивными запросами. Например, найти все дочерние элементы данного ствола (со стволом впридачу) select * from TreePath where ParentId = 2 Найти все листочки (элементы второго уровня) select * from TreePath where ParentId = 2 and Level = 2 Найти путь до корня select * from TreePath where ChildId = 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 16:05 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Old NickПредставим дерево (в лесу которое) в виде иерархии таблица Tree Id Name ParentId --------------- 1 Корень null 2 Ствол Корень 3 Ветка Ствол 4 Листок Ветка таблица TreePath ChildId ParentId Level ---------------------- 1 1 0 - Корень: нулевой уровень сам себе родитель 2 2 0 - Ствол: тоже самое 2 1 1 - Ствол принадлежит Корню напрямую 3 3 0 - Ветка сама себе принадлежит 3 2 1 - Ветка принадлежит стволу (напрямую) 3 1 2 - Ветка принадлежит Корню (через ствол) 4 4 0 - Листок сам себе 4 3 1 - Листок ветке 4 2 2 - Листок стволу 4 1 3 - Листок корню Вот и сравните - объем исходной таблицы Tree (о дереве) и объем таблицы TreePath (транзитивное замыкание). Кстати, NestedSets (Joe Celko) - дает более компактное хранение. Old Nick Накладных расходов при добавлении записей не заметил, хотя они наверняка есть. Зато удобство и скорость выборки не сравнятся с рекурсивными запросами. Если основные запросы - получить путь к узлу, получить всех потомков узла, то, естественно подобные структуры значительно уменьшают время выполнения. Если чаще используются запросы - добавить узел, переместить ветвь( т.е. изменение структуры), получить родителя, получить потомков /соседей, то поддержка структур типа TreePath становится невыгодна. В общем, это классический пример "размена пространства на время" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 16:47 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
2Old Nick Спасибо. Понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 17:55 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Естесственно, это выгодно для случая, когда чаще делаем выборки чем изменение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 17:58 |
|
||
|
Древовидная структура в РБД. Как нарисовать на концептуальной схемме?
|
|||
|---|---|---|---|
|
#18+
Таким образом у меня построена иерархия классов в базе, иерархия папок, по большому счету все объекты в базе хранятся в папках. Делать выборки для отчетов и тд. очень удобно. С помощью папок удобно делать разные классификации. Допустим есть географическая классификация: Страна, Регион, Город, Улица. Задача найти компании находящиеся в городе Н. Делается простым запросом. -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 18:02 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=147&tid=1545625]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 304ms |

| 0 / 0 |
