Вопрос 15: Обеспечение целостности данных. Виды целостности. Первичные ключи. Внешние ключи. Ограничения целостности CHECK.
Обеспечение целостности данных являетсякритически важным направлением поддержания качества данных на высоком уровне.
Виды целостности данных
- Доменная целостность (столбец) - предусматривает определение набора значений данных, который является допустимым для этого столбца, а также возможность использовать пустые значения;
- Объектная целостность (таблица) - для её обеспечения требуется, чтобы все строки таблицы имели уникальный код, называемый значением первичного ключа;
- Ссылочная целостность - гарантирует сохранение связей между ключевыми полями (таблица, на которую указывают ссылки) и внешними ключами (в таблицах, которые содержат ссылки).
Первичный ключ (PRIMARY KEY, PK) - определяет один или несколько столбцов таблицы, которые образуют ключевое поле. Ключевое поле уникальным образом определяет строку таблицы и обеспечивает объектную целостность таблицы.
При внедрении PK необходимо учитывать:
- Для таблицы может быть установлено только одно ограничение PK;
- Столбцы, включенные в ограничение PK не могут содержать значение NULL; Каждое из значений в столбцах, выбранных для PK, должно быть уникальным.
Ограничение PK создает уникальный индекс с указанными столбцами в качестве ключевого поля. Можно указать кластерный или некластерный индекс. Не допускается удаление индекса, который поддерживает ограничение PK.
Ограничение PK можно использовать в следующих случаях:
- Один или несколько столбцов таблицы должны уникальным образом идентифицировать каждую строку (сущность) в таблице;
- Один из столбцов в таблице являетсястолбцом идентификаторов.
Ограничение PK создается с использованием предложения уровня таблицы CONSTRAINT в инструкциях CREATE TABLE и ALTER TABLE
Пример
CREATE TABLE Production.TransactionHistoryArchive1
(
TransactionID int IDENTITY (1,1) NOT NULL,
CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
);
Внешний ключ (FOREIGN KEY, FK) представляет собой столбец или сочетание столбцов, которое используется для обеспечения связи между данными двух таблиц и обеспечивает ссылочную целостность. FK определяет ссылку на столбец с ограничением PK или UNIQUE в той же или в другой таблице.
При внедрении FK наобходимо учитывать:
- Ограничение FK обеспечивает ссылочную целостность для одного или несколько столбцов. Число столбцов и типы данных, указанные в инструкции FK должны соответствовать числу слобцов и типам данных в предложении REFERENCES;
- FK не создают индексы автоматически;
- Ограничение FK, в котором используется только предложение REFERENCES без предложения FOREIGN KEY, ссылается на столбец в той же таблице.
Ограничение FK можно использовать в следующих случаях:
- Данные в одном или нескольких стобцах могут содержать только значения, хранящиеся в определенных столбцах той же или другой таблицы;
- Строки таблицы не должны удаляться, если у них есть зависимые строки в другой таблице.
Ограничение FK создается с использованием предложения уровня столбца или таблицы CONSTRAINT в инструкциях CREATE TABLE и ALTER TABLE.
Пример
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
Ограничение CHECK определяет диапазон значений, который пользователь может ввести в отдельном столбце с помощью инструкций INSERT и UPDATE.
При внедрении ограничения CHECK необходимо учитывать:
- Ограничение CHECK провряет данные каждый раз при выполнении инструкции INSERT или UPDATE;
- Ограничение CHECK может представлять собой любое логическое выражение, которое возвращает значение true или false;
- Ограничение CHECK не может содержать вложенные запросы;
- В отношении одного столбца может действовать несколько ограничений CHECK;
- Ограничение CHECK не может быть установлено для стобцов с типом данных rowversion;
- Инструкция CHECK CONSTRAINT? предназначенная для проверки согласованности БД, возвращает все строки, данные в которых противоречат ограничению CHECK.
Ограничение CHECK можно использовать в следующих случаях:
- В соответствии с бизнес-логикой данные, хранящиеся в столбце, должны быть включены в конкретных набор или диапазон значений;
- Данные, хранящиеся в столбце, имеют проедельные значения;
- Между столбцами таблицы существуют связи, которые ограничивают набор допустимых значений для столбца.
Ограничения CHECK создаются с использованием предложения уровня столбца или таблицы CONSTRAINT в инструкциях CREATE TABLE и ALTER TABLE.
Пример
ALTER TABLE dbo.DocExc
ADD ColumnD int NULL
CONSTRAINT CHK_ColumnD_DocExc
CHECK (ColumnD > 10 AND ColumnD < 50);