Разработка иерархических справочников – достаточно часто встречающаяся задача в бизнес-приложениях. Существует достаточно много алгоритмов хранения дерева в реляционных СУБД. В данной статье будет рассказано об одной из таких моделей. Ее достоинства – простота реализации, быстрота выборки и добавления нового элемента, а среди недостатков можно выделить относительную сложность вставки и перемещения данных, а также конечную глубину иерархии. Но те или иные недостатки имеются в любой схеме хранения иерархических данных в РСУБД.
Насколько хорош алгоритм
Для иерархических справочников мы определим несколько наиболее часто встречающихся задач, которые затрагивают иерархию.
получение всех потомков узла;
получение непосредственных потомков узла;
добавление потомка;
Возможно вы искали - Реферат: MIDAS. Практическое применение
удаление узла с потомками;
перенос узла.
Иерархия Дьюи (Dewey)
Иерархический справочник может быть основан на алгоритме записи, используемом в системе десятичной классификации Дьюи (Dewey Decimal Classification). Нас в данный момент интересует не сам классификатор, а используемый в нем принцип. Попробую его описать.
Каждый узел содержит некоторый идентификатор, уникальный среди потомков его родителя. Каждый узел содержит путь от корневого элемента к данному. Путь реализуется с помощью идентификаторов, разделенных символом точки.
Например:
Похожий материал - Реферат: Перенос приложений MIDAS с одной СУБД на другую
1 Организация «Рога и копыта».
1.1 Департамент «Рога».
1.1.1 Отдел продажи рогов.
1.1.2 Отдел покупки рогов.
1.1.2.1 Группа оценки качества рогов.
Очень интересно - Реферат: Обратные вызовы в MIDAS через TSocketConnection
1.1.3 Отдел проката рогов.
1.2. Департамент «Копыта»
1.2.1 Отдел покупки копыт.
1.2.2 Отдел продажи копыт.
Как можно сразу заметить, при работе с подобным классификатором удобно использовать оператор LIKE. Если указывается путь, в котором начальные символы не являются маской, база данных может использовать индекс с операцией index scan с диапазонным поиском.
Вам будет интересно - Реферат: Блокировки в MS SQL Server 2000
Создадим тестовый пример.
|
CREATE TABLE DEPARTMENT ( ID INT PRIMARY KEY IDENTITY(1,1), Path VARCHAR(180) UNIQUE, Похожий материал - Реферат: Как сделать чтобы запущеный exe сам себя удалил Position INT NOT NULL, NAME VARCHAR(128) ) GO |