Ссылающиеся на себя отношения
Ссылающиеся на себя отношения
Если ваша модель имеет сущность, у которой первичный ключ ссылается на внешний ключ, находящийся в той же сущности, то вы имеете ссылающееся на себя отношение, как показано на рис. 17.4.
Рис. 17.4. Ссылающееся на себя отношение
Это классическая древовидная иерархия, где любой элемент (строка) может быть и родителем, и потомком - т. е. строка может иметь зависящие от нее "дочерние" строки и в то же время она может зависеть от другого элемента (строки). Здесь требуется ограничение CHECK или триггеры BEFORE INSERT (до добавления) и BEFORE UPDATE (до изменения) для проверки того, чтобы PARENT_ID никогда бы не указывал сам на себя.
Если ваши бизнес-правила требуют, чтобы родитель существовал до того, как будет добавляться потомок, вам понадобится использование значения (например, -I) в качестве корневого узла в этой древовидной структуре. Тогда PARENT ID должен быть создан с NOT NULL и значением по умолчанию, равным выбранному вами значению корневого узла. Альтернативой является разрешение для PARENT ID пустого значения, как в следующем примере, и использование NULL в качестве значения корня.
Вообще пользовательские триггеры BEFORE INSERT (до добавления) и BEFORE UPDATE (до изменения) потребуются для деревьев, имеющих более двух уровней вложенности. Для согласованности деревьев с корневым узлом NULL важно обеспечить такие действия ограничений, которые бы не создавали случайно зависшие дочерние строки.
CREATE TABLE PARENT_CHILD (
ID INTEGER NOT NULL,
PARENT_ID INTEGER
CHECK (PARENT_ID <> ID));
COMMIT;
ALTER TABLE PARENT_CHILD
ADD CONSTRAINT PK_PARENT
PRIMARY KEY(ID);
COMMIT;
ALTER TABLE PARENT_CHILD
ADD CONSTRAINT FK_CHILD_PARENT
FOREIGN KEY(PARENT_ID)
REFERENCES PARENT_CHILD(ID);
О древовидных структурах
Можно было бы сказать гораздо больше о проектировании древовидных структур. Это перспективная тема в создании реляционных баз данных, которая расширяет
границы стандарта SQL. К сожалению, она выходит за рамки данной книги. Некоторые интересные решения см. в "SQL for Smarties", 2nd Edition by Joe Celko (Morgan Kaufmann, 1999).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Операторы отношения
Операторы отношения Операторы отношения используются для сравнения значений нескольких переменных. Эти операторы, описанные в табл. П1.7, могут возвращать только логические значения true или false.Таблица П1.7. Операторы отношения Оператор Условие, при котором возвращается
8.4.1. Поздравь себя
8.4.1. Поздравь себя Начнем с того, как найти открытку. На главной странице проекта приведены в виде "тучи" (как и в поиске по блогам) названия наиболее популярных разделов. Если здесь есть то, что вас интересует, — щелкайте на названии и переходите к следующему этапу, этапу
R.5.9 Операции отношения
R.5.9 Операции отношения Операции отношения выполняются слева направо, но этот факт мало что дает, ибо выражение a‹b‹c означает (a‹b)‹c, а вовсе не (a‹b)&&(b‹c).выражение-отношения: сдвиговое-выражение выражение-отношения ‹ сдвиговое-выражение выражение-отношения ›
Отношения
Отношения Отношение — это способ формального определения того, как две таблицы связаны друг с другом. При определении отношения необходимо сообщить процессору баз данных, через какие два поля связываются две таблицы, участвующие в создании отношения. РИС. 1.12. Схема
3.2. Отношения между объектами
3.2. Отношения между объектами Типы отношений Сами по себе объекты не представляют никакого интереса: только в процессе взаимодействия объектов реализуется система. По выражению Ингалса: "Вместо процессора, беззастенчиво перемалывающего структуры данных, мы получаем
Приоритеты операций отношения
Приоритеты операций отношения Приоритет операций отношения считается меньшим, чем у операций + и -, и больше, чем у операции присваивания. Например, значение выражения: х > y + 2то же, что и выражения х > (у + 2)Это означает также, что выражение ch = getchar( ) != EOF эквивалентно ch
III. Операции отношения
III. Операции отношения Каждая из этих операций сравнивает значение слева со значением справа. Оператор отношения, состоящий из операции и двух ее операндов, имеет значение 1, если выражение истинно, и значение 0, если выражение ложно. < меньше <= меньше или
Операции отношения
Операции отношения Операции отношения сравнивают первый операнд со вторым и вырабатывают значение 1 (ИСТИНА) или 0 (ЛОЖЬ). Результат имеет тип int. Имеются следующие операции отношения: Операция Проверяемое отношение < Первый операнд меньше, чем второй операнд > Первый
Обязательные отношения
Обязательные отношения Обязательное отношение - это отношение, которое требует существования как минимум одной дочерней строки для каждой родительской строки. Например, структура накладной (заголовок с информацией о покупателе и адресом поставки) будет нелогичной,
5.2.3 Ссылки на Себя
5.2.3 Ссылки на Себя В функции члене на члены объекта, для которого она была вызвана, можно ссылаться непосредственно. Например:class x (* int m; public: int readm() (* return m; *) *);x aa; x bb;void f() (* int a = aa.readm(); int b = bb.readm(); // ... *)В первом вызове члена member() m относится к aa.m, а во втором – к bb.m.Указатель на
7.6 Операции Отношения
7.6 Операции Отношения Операции отношения (сравнения) группируют слева направо, но этот факт не очень-то полезен: a « b « c не означает то, чем кажется.выражение_отношения: выражение « выражение выражение » выражение выражение «= выражение выражение »= выражениеОперации «
ОПЫТЫ: Штурвал на себя
ОПЫТЫ: Штурвал на себя Автор: Юрий Смирнов smir@kvidex ruАвтор, в совершенстве освоивший джипы и танки, попробовал подняться в небо, но выяснил, что для успешных полетов рожденным ползать нужно пройти дополнительную подготовку.Когда я попробовал на даче поднять в воздух
Сними себя сам
Сними себя сам Как правило, фотолюбители имеют очень мало снимков, на которых изображены сами. Они заняты поиском удобной точки съемки или настраивают аппаратуру для будущих шедевров, и им просто не приходит в голову, что можно легко сделать автопортрет. Чтобы
Ссылка на себя
Ссылка на себя Ничто не препятствует объекту O1 в определенный момент выполнения системы содержать ссылку, присоединенную к самому O1. Такая ссылка на себя может быть косвенной. В ситуации на рис.8.7 объект, имеющий значением поля name: "Almaviva", сам является своим лендлордом