для нее не существует.
Обойти такое ограничение можно, добавляя
внешний ключ после вставки
корневой записи. – прим.ред.)
Вернемся к отмеченным выше недостаткам данной
структуры (сложность формирования полного пути и вычисления уровня элемента).
Эти недостатки вытекают из того простого факта, что в данной структуре
информация о полном пути и уровне нигде не хранится. Решить проблему быстрого
получения уровня вложенности можно введением в структуру таблицы
дополнительного поля Level. Описание таблицы тогда будет выглядеть так:
CREATE TABLE "CATALOG" (
"ID" INTEGER NOT NULL
PRIMARY KEY,
"NAME" VARCHAR(200)
CHARACTER SET WIN1251 NOT NULL,
"PARENT_ID" INTEGER
CHECK(
"PARENT_ID" =
ANY(SELECT "ID" FROM "CATALOG") or "PARENT_ID"
is NULL
),
"LEVEL" INTEGER
DEFAULT 1 NOT NULL
);
Структура для хранения иерархии с неограниченным
числом уровней вложенности и потомков готова.
Следующей по степени универсальности является иерархия
с неограниченным числом уровней вложенности и конечным числом потомков элемента
иерархии. Ограничение количества потомков позволяет хранить данные в следующем
виде.
Ссылка на предка
Информация о первом элементе уровня иерархии
Информация о втором элементе уровня иерархии
…
Информация о n-ном элементе уровня иерархии, где n –
количество максимальное количество потомков
Ссылка на предка содержит в себе ссылку на запись, хранящую информацию о предыдущем уровне иерархии и смещение (номер столбца) с
описанием родителя.
В нашем примере мы ограничим количество предков числом
5, тогда SQL-описание таблицы будет выглядеть следующим образом:
CREATE TABLE "CATALOG2" (
"LEVEL" INTEGER NOT
NULL,
"OFFSET" SMALLINT NOT
NULL CHECK("OFFSET" > 0 and "OFFSET" < 6),
"NAME_1" VARCHAR(200)
CHARACTER SET WIN1251,
Рекомендуем скачать другие рефераты по теме: сочинение евгений онегин, реферат на тему пушкин.