НОУ ІНТУІТ, Лекція, Створення та використання умовчань, обмежень та правил

Обмеження

Обмеження автоматично забезпечують цілісність даних. Обмеження задають правила, які визначають значення даних, припустимі будь-якої колонки. Вони дозволяють обмежувати значення даних, які вводяться в колонку, щоб у цій колонці не виявилися неправильні значення. Наприклад, за допомогою обмеження можна обмежити значення колонки цілого типу діапазоном від 1 до 100. В результаті будь-які значення поза цим діапазоном не можна буде ввести в дану колонку. (Для створення цього діапазону ви можете використовувати обмеження CHECK, як буде показано нижче.) Обмеження тільки по одній колонці називаєтьсяобмеженням колонки; воно обмежує значення цієї колонки. Обмеження, яке впливає на кілька колонок, називаєтьсяобмеженням таблиці,аботабличним обмеженням;у цьому випадку комбінація значень для колонок, зазначених у цьому обмеженні, має відповідати вимогам цього обмеження. Є п'ять типів обмежень: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY та CHECK.

Створення та модифікація обмежень за допомогою T-SQL

У цьому розділі ви дізнаєтеся про використання кожного типу обмежень та реалізації обмежень за допомогою T-SQL. У наступному розділі ви дізнаєтесь, як реалізовувати обмеження за допомогою Enterprise Manager.

Обмеження NOT NULL

Обмеження NOT NULL є досить простим, і ми вже бачили, як воно використовувалося у прикладах цієї лекції та попередніх лекцій. Обмеження NOT NULL задається в описі колонки, щоб перешкодити вставці null-значень в цю колонку (на противагу обмеженню NULL, яке дозволяє надавати null-значення). При використанні T-SQL ви можетевказати NOT NULL під час створення таблиці чи пізніше, коли модифікуватимете якусь колонку. (Для модифікації таблиць бази даних див. "Створення таблиць баз даних".) Вам слід використовувати NOT NULL замість NULL там, де це можливо, оскільки операції з null-значеннями, такі як порівняння, пов'язані з більшим додатковим навантаженням при обробці. Як уже говорилося вище в цій лекції, краще використовувати значення за замовчуванням там, де це можливо, ніж дозволяти вставку null значень.

Обмеження UNIQUE

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

Обмеження UNIQUE можна використовувати для будь-якої колонки, яка не є частиною обмеження PRIMARY KEY (описується в наступному розділі), що також забезпечує унікальність значень. Обмеження UNIQUE можна використовувати для колонок, в яких дозволені null-значення, тоді як обмеження PRIMARY KEY не можна використовувати для таких колонок. Null-значення не зачіпаються обмеженнями UNIQUE. На колонку з обмеженням UNIQUE може посилатися обмеження FOREIGN KEY (див. розділ "Обмеження FOREIGN KEY" далі). По одній таблиці можна задавати кілька обмежень UNIQUE, поки загальна кількість індексів для цієї таблиці не перевищує 249 некластеризованих та одного кластеризованого індексу.

Щоб створити обмеження UNIQUE за таблицею за допомогою T-SQL, використовуйте оператор CREATE TABLE або ALTER TABLE . Наприклад, наступний оператор створює таблицю customer (покупець) з обмеженням UNIQUE колонкою SSN у вигляді кластеризованого індексу :

Цей оператор CREATE використовує обмеження по колонці. У наступному прикладі знову створюється таблиця, але цього разу з додаванням табличного обмеження UNIQUE з ім'ям UQ_full_name колонками first_name, mid_init і last_name:

Табличне обмеження UNIQUE (обмеження за більш ніж однією колонкою) забезпечує унікальність комбінацій значень відповідних колонок. В даному випадку в базу даних не можна ввести двох покупців, які мають однакове поєднання імені (first_name), прізвища (last_name) та ініціала по-батькові (m >UNIQUE є некластеризованим індексом, оскільки у нас вже є унікальний кластеризований індекс по колонці SSN).

Щоб додати обмеження UNIQUE до таблиці, використовуйте оператор ALTER TABLE . Якщо ви намагаєтеся модифікувати існуючу колонку або колонки, додаючи обмеження UNIQUE, всі існуючі рядки даної таблиці повинні містити унікальні значення або null-значення в цій колонці або колонках, інакше ви отримаєте повідомлення про помилку і обмеження UNIQUE не буде додано. Припустимо, що ми створили таблицю customer без обмежень. Нижче наводяться два оператори для додавання обмежень по колонці та таблиці:

І знову повторимо, що ви можете додати обмеження до таблиці лише у тому випадку, якщо наявні дані вже відповідають вимогам обмежень.

Щоб змінити існуюче обмеження UNIQUE по будь-якій колонці або таблиці за допомогою T-SQL, ви повинні спочатку видалити відповідне обмеженняа потім знову створити його. Як і для замовчування, вам слід використовувати для ваших обмежень описові імена, щоб ви могли легко знаходити та видаляти їх без необхідності з'ясування імен, присвоєних ним системою SQL Server. При зміні обмеження за допомогою Enterprise Manager система SQL Server автоматично видаляє старе обмеження та знову створює його, коли ви зберігаєте виконані зміни (див. розділ "Створення та модифікація обмежень за допомогою Enterprise Manager" далі).

Обмеження PRIMARY KEY

Обмеження PRIMARY KEY використовується, щоб задати первинний ключ таблиці, що представляється колонкою або набором колонок, що унікально ідентифікують рядок таблиці. Оскільки первинний ключ ідентифікує рядок, відповідний стовпчик ніколи не містить значення NULL . У цьому полягає відмінність обмеження PRIMARY KEY від обмеження UNIQUE, яке допускає null-значення. Якщо ви визначаєте обмеження PRIMARY KEY по набору колонок, це обмеження вказує на те, що комбінація значень цих колонок повинна бути унікальною для кожного рядка, що аналогічно обмеженню UNIQUE по набору колонок. І, подібно до обмеження UNIQUE, обмеження PRIMARY KEY не допускає дубльованих значень. Якщо обмеження PRIMARY KEY надається колонці або набору колонок, то по цій колонці або колонкам первинного ключа автоматично створюється унікальний індекс . Ви також можете задати для первинного ключа кластеризований або некластеризований індекс; якщо нічого не задано, за замовчуванням створюється кластеризований індекс, якщо таблиця ще не має кластеризованого індексу.

Таблиця може мати лише одне обмеження PRIMARY KEY. Колонка з атрибутом IDENTITY добре підходить для первинного ключа, як будь-яка інша колонка або набір колонок,є унікальними для кожного рядка. Наприклад, у прикладі нашої таблиці customer ми могли б створити колонку SSN як первинний ключ замість створення для неї обмеження UNIQUE. Обмеження PRIMARY KEY не допускало б null-значень і забезпечувало б унікальність значень у колонці SSN, а по цій колонці первинного ключа було б автоматично створено кластеризований індекс. Наступний оператор T-SQL представляє один із способів завдання колонки SSN як первинного ключа, коли ви визначаєте таблицю. При цьому способі ім'я обмеження PRIMARY KEY надає SQL Server, тому він не є кращим методом, так як надалі вам може знадобитися видалення цього ключа на ім'я.

Використовуючи альтернативний спосіб, можна присвоїти ім'я цьому обмеженню, додавши ключове слово CONSTRAINT . Щоб надати ім'я PK_SSN вашому обмеженню PRIMARY KEY , використовуйте наступний оператор:

Ви можете також встановити обмеження PRIMARY KEY після того, як визначено всі колонки таблиці. При використанні цього синтаксису ім'я колонки має бути поміщене у круглі дужки та вказано після пропозиції CONSTRAINT , як показано в наступному операторі:

Щоб додати обмеження PRIMARY KEY до таблиці, яка не має обмеження PRIMARY KEY , скористайтеся оператором ALTER TABLE . Наступний оператор додає обмеження PRIMARY KEY до таблиці customer:

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

Щоб видалити обмеження PRIMARY KEY, використовуйте оператор ALTER TABLE із пропозицією DROP CONSTRAINT. Нижче ми видаляємо обмеження по колонці SSN:

Зазначимо, що для пропозиції DROP CONSTRAINTпотрібне лише ім'я цього обмеження. Щоб змінити існуюче обмеження PRIMARY KEY по таблиці за допомогою операторів T-SQL, ви повинні спочатку видалити існуюче обмеження, а потім виконати зміну таблиці , додавши нове обмеження. Це виконується за допомогою операторів ALTER TABLE. DROP CONSTRAINT та ALTER TABLE . ADD CONSTRAINT.