Вопрос 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);

results matching ""

    No results matching ""