Аннотация:
Разработка иерархических справочников — достаточно часто встречающаяся задача в бизнес-приложениях. Существует достаточно много алгоритмов хранения дерева в реляционной модели. Но им свойственны те, или иные недостатки. Самый распространенный вариант, когда запись имеет ссылку на родительский ключ. Это один из наиболее неоптимальных алгоритмов, так как его сложно реализовать и он неоптимален по доступу. Единственный плюс, что некоторые БД поддерживают рекурсивные запросы, которые облегчают работу с такой схемой. Алгоритм Nested Set более оптимален, но обладает недостатком. Скорость вставки нелинейна, и затрагивает данные, которые не должны участвовать в транзакции. В то же время иерархические справочники можно сделать достаточно просто. Нужно просто воспользоваться классификатором.
Re: Иерархические справочники с линейным временем доступа
От:
Аноним
Дата:
15.06.06 18:29
Оценка:
Автору стоило больше изучать MSSQL.
Для начинающих статья не рекомендована.
Для профессионалов — произведение дилетанта.
Ни в коем случае не пользуйтесь приведенным кодом в pruduction systes.
Переписать нормально можно, но лучше почитать Сейко.
PS
Таблицы deleted могут содержать более одной записи. Получите хаос.
Michail Chernobrovov.
Network Laboratory.
PSS
Сорри за дубль
Re[2]: Иерархические справочники с линейным временем доступа
Здравствуйте, Аноним, Вы писали:
А>Автору стоило больше изучать MSSQL.
Спасибо А>Для начинающих статья не рекомендована.
Почему? А>Для профессионалов — произведение дилетанта.
Почему? А>Ни в коем случае не пользуйтесь приведенным кодом в pruduction systes.
Он для этого и не предназначался. Его задача — показать. А>Переписать нормально можно, но лучше почитать Сейко.
И что же вам лично понравилось у Cелко? Конекретней.
А>Таблицы deleted могут содержать более одной записи. Получите хаос.
Сейчас нет текста статьи, приду домой посмотрю. Возможно что-то сделал не так.
Re: Иерархические справочники с линейным временем доступа
Здравствуйте, 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]: Иерархические справочники с линейным временем доступа
Здравствуйте, 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]: Иерархические справочники с линейным временем доступа
Здравствуйте, Аноним, Вы писали:
А>Применял подобный подход — тогда пришел к выводу, что лучше заканчивать каждый номер точкой, чтобы избежать попадания в маску лишних элементов
А>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]: Иерархические справочники с линейным временем доступа
Здравствуйте, Аноним, Вы писали:
А>а Вы запостите эту статью на sql.ru в сиквельный форум, там популярно объяснят
Оч интересно, давай этих популяризаторов сюда, пусть объясняют. Да и сам-то чего, стесняешься? Не бойся, здесь все свои.
Мы уже победили, просто это еще не так заметно...
Re[5]: Иерархические справочники с линейным временем доступа
Здравствуйте, Аноним, Вы писали:
А>>>Но все равно, скорость на выборку меня тогда не удовлетворила. GZ>>По сравнению с чем?
А>а Вы запостите эту статью на sql.ru в сиквельный форум, там популярно объяснят
Бу-га-га!!!
Вот такие вот аргументы. Спасибо, улыбнуло. А какая скорость на выборку тебя обычно приводит к полному удовлетворению?