Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab2_6_-БД_ПИ.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

1.3.1.1. Синтаксис объявления первичного ключа

Можно использовать несколько вариантов синтаксиса для назначения ограничения primary key столбцу или группе столбцов. Все столбцы, являющиеся элементами первичного ключа, должны быть предварительно определены с атрибутом not null. Так как нельзя добавить ограничение not null в столбец после его создания, необходимо позаботиться об этом ограничении до использования других ограничении.

Ограничение primary key может применяться в любой из следующих фаз создания

в определении столбца в операторах CREATE TABLE или alter table как часть определения столбца;

в определении таблицы в операторах CREATE TABLE или alter table как отдельно определенное ограничение таблицы.

Ниже приведен пример объявления первичного ключа в определения столбца таблицы для примера, приведенного на рисунке 1.2.1.

CREATE TABLE OWNER (

ID D_INDEXTYPE PRIMARY KEY,

FIO D_NAME,

ADRES D_ADRES)

Рассмотрим определение первичного ключа как именованного ограничения. В этом случае ограничения не зависят от существования столбцов и поэтому они добавляются в конце определения столбцов.

CREATE TABLE TENANT (

ID D_INDEXTYPE,

FIO D_NAME,

ADRES D_ADRES,

CONSTRAINT PK_TENANT PRIMARY KEY(ID))

В приведенном примере PK_TENANT – это имя ограничения.

1.3.1.2. Ссылочная целостность данных

Термин ссылочная целостность относится к возможности базы данных защищать себя от получения входных данных, результатом которых может стать нарушение отношений. Ссылочная целостность базы данных существует в соответствии с ее способностью осуществлять и защищать отношение между двумя таблицами.

Реализация формальных ограничений целостности добавляет некоторую дополнительную работу разработчикам баз данных.

В системе управления реляционными базами данных (реляционные СУБД) отношение между двумя таблицами создается посредством ограничения внешнего ключа. Ограничение внешнего ключа реализует правила существования строк, защищая таблицу от попыток добавлять строки, несовместимые с моделью данных. Однако такое ограничение не работает в одиночестве. Другие ограничения целостности могут работать в комбинации со ссылочными ограничениями для поддержания непротиворечивости отношений.

Внешний ключ — это столбец или набор столбцов в одной таблице, которые в точности соответствуют столбцу или набору столбцов, определенных как ограничение primary key или UNIQUE в другой таблице. В своей простейшей форме внешний ключ реализует необязательное отношение один-ко-многим.

Стандартная модель объект-отношение описывает простое отношение многим, между двумя сущностями, как показано на рисунке 1.3.1.

Рисунок 1.3.1. Модель объект-отношение описывает между двумя сущностями

Если мы реализуем такую модель между двумя таблицами parent и child, to строки в таблице child зависят от существования связанной строки из parent. Ограничение FOREIGN key в СУБД Firebird осуществляет это отношение следующими способами:

  1. требуется, чтобы значение столбца внешнего ключ в таблице child (child.pareht_id) могло быть связано с соответствующим значением уникального ключа (в нашем случае, первичного ключа) в таблице parent (parent.id);

  2. по умолчанию запрещено удаление строки parent или изменение значения уникального ключа, если существуют зависимые строки в child;

  3. должно быть реализовано отношение, которое предполагалось во время создания ссылки или когда оно в последний раз изменялось;

  4. по умолчанию допускается пустое значение столбца внешнего ключа. Поскольку невозможно связать пустое значение, с чем бы го ни было, такие строки являются зависшими — они не имеют родителя.

При реализации ссылочного ограничения должны быть учтены некоторые предварительные условия. В этом разделе мы рассмотрим очень простой пример.

Необходимо начать с родительской таблицы и создать управляющий уникальный ключ, на который будет ссылаться зависимая таблица. Обычно это первичный ключ родительской таблицы, хотя это не обязательно. Внешний ключ может ссылаться на столбец или группу столбцов, объединенных ограничение unique. Для целей иллюстрации мы будем использовать первичный ключ:

CREATE TABLE PARENT (

ID BIGINT NOT NULL,

DATA VARCHAR(20),

CONSTRAINT PK__PARENT PRIMARY KEY(ID) ) ;

COMMIT;

В дочернюю структуру нам нужно включить столбец parent_id, который в точности соответствует первичному ключу родительской таблицы по типу и размеру (а также по порядку столбцов, если связь выполняется п нескольким столбцам):

CREATE TABLE CHILD (

ID BIGINT NOT NULL,

CHILD_DATA . VARCHAR(20),

PARENT_ID BIGINT,

CONSTRAINT PK_CHILD PRIMARY KEY(ID));

COMMIT;

Следующее, что нам нужно сделать, это определить отношение между дочерней и родительской таблицами — создать ограничение внешнего ключа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]