|
|
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
Добрый день! Я помнится на этом форуме видел топик с обсуждением способов хранения иерархических структур в базе данных. Но сейчас что-то поиском найти не смог, напишу новый топик. Я оттуда для себя подчерпнул и использовал в своих проектах такой способ: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. где relLevel это уровень вложенности элемента childID в элементе masterID. Соответственно для дерева хранятся записи с вложенностью всех элементов. С ростом числа элементов и их вложенностью таблица objectRel очень быстро растёт. Скажите пожалуйста насколько это эффективный способ хранения древовидной структуры в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2015, 23:06 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
kormotС ростом числа элементов и их вложенностью таблица objectRel очень быстро растёт. Не очень быстро. Всего лишь M*N. kormotнасколько это эффективный способ хранения древовидной структуры в БД. Для хранения - совсем не эффективный. Для работы с этим деревом - очень эффективный. Выбирай. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2015, 23:32 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДля работы с этим деревом - очень эффективный.Точнее, эффективный для чтения. Для модификации чудовищно неэффективный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2015, 01:07 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
miksoftДля модификации чудовищно неэффективный. Ну так модификация деревьев это обычно весьма редкая операция. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2015, 01:31 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovkormotС ростом числа элементов и их вложенностью таблица objectRel очень быстро растёт. Не очень быстро. Всего лишь M*N. Почему это м*н? Похоже на просто м (число объектов, включая дочки) плюс число связей родители с дочками. Так что вполне эффективно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2015, 01:53 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
ChaildID - совершенно абсолютно лишнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 15:53 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
GormChaildID - совершенно абсолютно лишнее Таблица objectRel без поля childID - это будет оригинально, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 18:31 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
kormot, Дерево делается одной таблицей. Код: sql 1. 2. 3. 4. 5. Уровень можно вычислить запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 13:50 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
olzhasУровень можно вычислить запросом. А не будет ли это в плане вычислительных затрат накладней, чем реализация дерева через таблицу с уже разложенными по полочкам связям всех узлов? Я может не особо sql знаю, но если использовать одну таблицу, то для вычисления потомков n-го уровня вложенности надо использовать рекурсию. Или это не так? Можете мне пожалуйста для общего развития дать пример запроса выдающего из вашего примера всех потомков данного узла с указанием их уровня вложенности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 08:54 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
olzhaskormot, Дерево делается одной таблицей. Код: sql 1. 2. 3. 4. 5. Уровень можно вычислить запросом. Тут проблема в том, что вставка/удаление будет быстрой, а вот поиск при большой глубине вложенности медленный. Можно и по другому... Через Nested set Здесь с точностью до наоборот. Поиск "быстрый", а вот вставка/удаление медленными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 11:23 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
http://habrahabr.ru/post/193166/ Хранение деревьев в базе данных. Часть первая, теоретическая Итак. Существует несколько шаблонов проектирования баз данных для хранения и обработки иерархических структур: Adjacency List («список смежности») Materialized Path («материализованный путь») Nested Sets («вложенные множества») Closure Table («таблица связей») . . . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 13:43 |
|
||
|
Как лучше реализовать в БД иерархическую структуру?
|
|||
|---|---|---|---|
|
#18+
kormot, Как выше написали есть несколько моделей все зависит от задачи. Вычисление уровней пойдет через рекурсию (sql запросы разные в зависимости от базы данных), да это ударит по производительности. но только если эти уровни вам нужны. Если это критично можете добавить дополнительное поле, но вам самому надо будет его обслуживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 13:59 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=32&tid=1540419]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 502ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...