Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Посібник Мова SQL кредитно-модульний.doc
Скачиваний:
35
Добавлен:
01.05.2015
Размер:
1.25 Mб
Скачать

Загальні відомості про обмеження, що забезпечують цілісність

Обмеження дозволяють визначати способи, за допомогою яких SQL Server 2005 буде автоматично забезпечувати цілісність бази даних. Обмеження визначають правила, що мають відношення до припустимих значень полів, і є стандартним механізмом, що забезпечує цілісність.

Краще застосовувати обмеження, ніж тригери, правила або умовчання. Оптимізатор запитів також використовує визначення обмежень, щоб створювати високопродуктивні плани виконання запитів. Обмеження можливі як для стовпців, так і для таблиць:

  • обмеження для стовпця задається як правила визначення стовпця і застосовується тільки до цього стовпця;

  • обмеження для таблиці оголошується незалежно від визначення стовпців і застосовується до декількох стовпців таблиці.

Обмеження для таблиць варто використовувати в тих випадках, коли обмеження діє для декількох стовпців. Наприклад, якщо первинний ключ таблиці складається із двох і більше стовпців, варто використовувати обмеження для таблиці, у яке входять всі стовпці первинного ключа.

Визначення можливості зберігання порожніх значень (null)

Можливість зберігання в стовпці порожніх значень визначає, чи можуть відповідні поля таблиці зберігати порожні значення. Порожнє значення (NULL) показує, що в осередок не були уведені дані. Звичайно порожнє значення свідчить про те, що значення невідомо або не визначене. Наприклад, порожнє значення в стовпці Price таблиці Titles з бази даних Pubs означає не відсутність ціни на книгу, а те, що ціна невідома або поки не встановлена.

У цілому, варто уникати можливості зберігання порожніх значень, оскільки вони ускладнюють обробку запитів і відображень, крім того, їх не можна використати в стовпчиках с деякими параметрами, наприклад з обмеженням PRIMARY KEY. Операція порівняння двох порожніх значень, а також порожнього значення з будь-яким іншим значенням повертає невідоме значення, оскільки значення будь-якого NULL невідомо. Порожні значення не можна застосовувати як ідентифікатори, що дозволяють відрізнити один рядок таблиці від іншого. Крім того, варто виключати порожні значення при обчисленнях, оскільки деякі обчислення (наприклад, розрахунок середнього) можуть бути неточні, якщо в них використовується стовпець, що містить NULL. Коли потрібно створити стовпець, значення якого невідомі, найчастіше можна визначити для нього значення за замовчуванням. Наприклад, стовпець Phone таблиці Authors з бази даних Pubs не допускає порожніх значень. У цьому стовпці визначене значення за замовчуванням UNKNOWN. Якщо в рядку з відомостями про автора номер телефону не зазначений, значення в стовпці Phone дорівнює UNKNOWN.

Наступний програмний код створює за допомогою оператора CREATE TABLE таблицю Employee. Стовпці Emp_ID і LastName не допускають порожніх значень, а стовпець FirstName - допускає:

CREATE TABLE Employees (

Emp_ID char(4) NOT NULL,

FirstName varchar(30) NULL,

LastNarne varchar(30) NOT NULL

)

====================

Визначення значень за замовчуванням (default)

Всі поля запису повинні бути заповнені (навіть із використанням порожніх значень). Іноді потрібно завантажити в таблицю рядок, але значення якого-небудь поля не відомо (або не існує). Якщо поле допускає порожні значення, можна завантажити рядок з порожнім значенням. Оскільки поля, що допускають порожні значення, небажані, краще визначити для поля значення за замовчуванням (визначити обмеження DEFAULT). Наприклад, як значення за замовчуванням, що використовується, якщо значення не зазначене, для числових полів звичайно задають нуль, а для символьних – ‘N/A’

Примітка. Визначення DEFAULT в операторі CREATE TABLE розглядається як обмеження, хоча насправді воно не накладає ніяких обмежень. Визначення DEFAULT обговорюється тут, що дозволить продемонструвати альтернативу полям, що допускають порожні значення.

При завантаженні в таблицю рядка з невідомим значенням поля, для якого визначене значення за замовчуванням, ви неявно даєте SQL Server вказівку завантажити в це поле значення за замовчуванням. Якщо поле не допускає порожніх значень і для нього не визначене значення за замовчуванням, необхідно явно задати його значення. У противному випадку SQL Server поверне помилку з повідомленням, що це поле не допускає порожніх значень.

Є два способи визначення значення за замовчуванням:

  • визначити його під час створення самої таблиці (як частина визначення таблиці);

  • додати це визначення до існуючої таблиці (у будь-якого стовпця таблиці воно може бути тільки одне).

У наступному прикладі за допомогою оператора CREATE TABLE створюється таблиця Employees. Жоден із трьох її стовпців не допускає порожніх значень. Однак насправді стовпець FirstName дозволяє ввести невідоме ім'я, оскільки в його визначенні втримується визначення значення за замовчуванням. Для його визначення в операторі CREATE TABLE використається ключове слово DEFAULT.

CREATE TABLE Employees

(

Emp_ID char(4) NOT NULL,

FirstName varchar(30) NOT NULL DEFAULT 'unknown'

LastName varchar(SO) NOT NULL

)

Існуюче визначення значення за замовчуванням можна модифікувати або видалити. При модифікації визначення значення за замовчуванням за допомогою Transact SQL необхідно спочатку видалити існуюче визначення DEFAULT а потім створити нове визначення з нуля. Неможливо створити визначення DEFAULT у наступних стовпцях:

  • с типом даних timestamp;

  • із властивостями IDENTITY або ROWGUIDCOL;

  • з існуючим визначенням або об'єктом за замовчуванням.