Иерархические справочники с линейным временем доступа
От: Глеб Земсков Россия  
Дата: 23.05.06 15:00
Оценка: 250 (6) -4
Статья:
Иерархические справочники с линейным временем доступа
Автор(ы): Глеб Земсков
Дата: 23.05.2006
Разработка иерархических справочников – достаточно часто встречающаяся задача в бизнес-приложениях. Существует достаточно много алгоритмов хранения дерева в реляционной модели. Но им свойственны те, или иные недостатки. Самый распространенный вариант, когда запись имеет ссылку на родительский ключ. Это один из наиболее неоптимальных алгоритмов, так как его сложно реализовать и он неоптимален по доступу. Единственный плюс, что некоторые БД поддерживают рекурсивные запросы, которые облегчают работу с такой схемой. Алгоритм Nested Set более оптимален, но обладает недостатком. Скорость вставки нелинейна, и затрагивает данные, которые не должны участвовать в транзакции. В то же время иерархические справочники можно сделать достаточно просто. Нужно просто воспользоваться классификатором.


Авторы:
Глеб Земсков

Аннотация:
Разработка иерархических справочников — достаточно часто встречающаяся задача в бизнес-приложениях. Существует достаточно много алгоритмов хранения дерева в реляционной модели. Но им свойственны те, или иные недостатки. Самый распространенный вариант, когда запись имеет ссылку на родительский ключ. Это один из наиболее неоптимальных алгоритмов, так как его сложно реализовать и он неоптимален по доступу. Единственный плюс, что некоторые БД поддерживают рекурсивные запросы, которые облегчают работу с такой схемой. Алгоритм Nested Set более оптимален, но обладает недостатком. Скорость вставки нелинейна, и затрагивает данные, которые не должны участвовать в транзакции. В то же время иерархические справочники можно сделать достаточно просто. Нужно просто воспользоваться классификатором.
Re: Иерархические справочники с линейным временем доступа
От: Аноним  
Дата: 15.06.06 18:29
Оценка:
Автору стоило больше изучать MSSQL.
Для начинающих статья не рекомендована.
Для профессионалов — произведение дилетанта.
Ни в коем случае не пользуйтесь приведенным кодом в pruduction systes.
Переписать нормально можно, но лучше почитать Сейко.

PS

Таблицы deleted могут содержать более одной записи. Получите хаос.

Michail Chernobrovov.
Network Laboratory.

PSS

Сорри за дубль
Re[2]: Иерархические справочники с линейным временем доступа
От: GlebZ Россия  
Дата: 16.06.06 10:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Автору стоило больше изучать MSSQL.

Спасибо
А>Для начинающих статья не рекомендована.
Почему?
А>Для профессионалов — произведение дилетанта.
Почему?
А>Ни в коем случае не пользуйтесь приведенным кодом в pruduction systes.
Он для этого и не предназначался. Его задача — показать.
А>Переписать нормально можно, но лучше почитать Сейко.
И что же вам лично понравилось у Cелко? Конекретней.


А>Таблицы deleted могут содержать более одной записи. Получите хаос.

Сейчас нет текста статьи, приду домой посмотрю. Возможно что-то сделал не так.
Re: Иерархические справочники с линейным временем доступа
От: tarkil Россия http://5209.copi.ru/
Дата: 29.06.06 07:46
Оценка: 27 (1)
"Удаление узла с потомками"

DELETE FROM DEPARTMENT
WHERE Path LIKE '1.1%'

Этот код удалит не только узел 1.1, но и 1.11, 1.12, 1.178... Лучше уж удалять конкретно:

DELETE FROM DEPARTMENT
WHERE Path LIKE '1.1'

А дочек — триггером.
--
wbr, Peter Taran
Re[2]: Иерархические справочники с линейным временем доступа
От: Mika Soukhov Stock#
Дата: 29.06.06 08:20
Оценка: 16 (1)
Здравствуйте, tarkil, Вы писали:

T>"Удаление узла с потомками"


T>DELETE FROM DEPARTMENT

T>WHERE Path LIKE '1.1%'

T>Этот код удалит не только узел 1.1, но и 1.11, 1.12, 1.178... Лучше уж удалять конкретно:


T>DELETE FROM DEPARTMENT

T>WHERE Path LIKE '1.1'

T>А дочек — триггером.


А если так

DELETE FROM DEPARTMENT
WHERE Path = '1.1' OR PATH LIKE '1.1.%'
Re[3]: Иерархические справочники с линейным временем доступа
От: tarkil Россия http://5209.copi.ru/
Дата: 29.06.06 08:26
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>DELETE FROM DEPARTMENT

MS>WHERE Path = '1.1' OR PATH LIKE '1.1.%'

Ага, можно и так. Я просто предпочитаю триггеры юзать — ради сохранения целостности.
--
wbr, Peter Taran
Re[2]: Иерархические справочники с линейным временем доступа
От: Аноним  
Дата: 30.06.06 13:38
Оценка:
Здравствуйте, tarkil, Вы писали:

T>"Удаление узла с потомками"


T>DELETE FROM DEPARTMENT

T>WHERE Path LIKE '1.1%'

T>Этот код удалит не только узел 1.1, но и 1.11, 1.12, 1.178... Лучше уж удалять конкретно:


T>DELETE FROM DEPARTMENT

T>WHERE Path LIKE '1.1'

T>А дочек — триггером.


Применял подобный подход — тогда пришел к выводу, что лучше заканчивать каждый номер точкой, чтобы избежать попадания в маску лишних элементов

1.1.
1.1.2.
1.11.
1.11.7.

Но все равно, скорость на выборку меня тогда не удовлетворила.
Re[3]: Иерархические справочники с линейным временем доступа
От: GlebZ Россия  
Дата: 02.07.06 06:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Применял подобный подход — тогда пришел к выводу, что лучше заканчивать каждый номер точкой, чтобы избежать попадания в маску лишних элементов


А>1.1.

А>1.1.2.
А>1.11.
А>1.11.7.

В этом случае сложнее получать потомков без корневого элемента. select .... where due like '1.1.%' также вернет корневой элемент.

А>Но все равно, скорость на выборку меня тогда не удовлетворила.

По сравнению с чем?
Re[4]: Иерархические справочники с линейным временем доступа
От: Аноним  
Дата: 03.07.06 10:59
Оценка:
Здравствуйте, GlebZ, Вы писали:

А>>Но все равно, скорость на выборку меня тогда не удовлетворила.

GZ>По сравнению с чем?

а Вы запостите эту статью на sql.ru в сиквельный форум, там популярно объяснят
Re[5]: Иерархические справочники с линейным временем доступа
От: IB Австрия http://rsdn.ru
Дата: 03.07.06 11:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а Вы запостите эту статью на sql.ru в сиквельный форум, там популярно объяснят

Оч интересно, давай этих популяризаторов сюда, пусть объясняют. Да и сам-то чего, стесняешься? Не бойся, здесь все свои.
Мы уже победили, просто это еще не так заметно...
Re[5]: Иерархические справочники с линейным временем доступа
От: _d_m_  
Дата: 03.07.06 11:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>Но все равно, скорость на выборку меня тогда не удовлетворила.

GZ>>По сравнению с чем?

А>а Вы запостите эту статью на sql.ru в сиквельный форум, там популярно объяснят


Бу-га-га!!!

Вот такие вот аргументы. Спасибо, улыбнуло. А какая скорость на выборку тебя обычно приводит к полному удовлетворению?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.