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

Обмеження unique

Обмеження UNIQUEдозволяє заборонити уведення повторюваних значень у деякі стовпці, що не беруть участь у формуванні первинного ключа. Незважаючи на те, що унікальність забезпечують обидва обмеження - іUNIQUE, іPRIMARY KEY, у деяких ситуаціях замість обмеженняPRIMARY KEYварто використовувати обмеженняUNIQUE. Так поводяться, якщо:

  • стовпець (або комбінація стовпців) не є первинним ключем. Для таблиці можна визначити кілька обмежень UNIQUEі лише одне обмеженняPRIMARY KEY;

  • стовпець допускає порожні значення. Обмеження UNIQUEдозволяється визначати для стовпців, які допускають порожні значення, у той час як обмеженняPRIMARY KEYможна визначити тільки для стовпців, які не допускають порожніх значень. ОбмеженняFOREIGN KEYтакож може посилатися на обмеженняUNIQUE.

Створення обмежень unique

Обмеження UNIQUEстворюється так само, якPRIMARY KEY:

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

  • шляхом додавання до існуючої таблиці за умовою, що стовпці, що становлять обмеження UNIQUE, містять тільки порожні й унікальні значення. У таблиці може бути кілька обмеженьUNIQUE.

Для створення обмеження UNIQUEпризначені ті ж оператори Transact-SQL, що і для створення обмеженняPRIMARYKEY. Просто замініть словаPRIMARYKEYсловомUNIQUE. Як і у випадку зPRIMARYKEY, визначення обмеженняUNIQUEдозволяється модифікувати або видаляти. Коли обмеженняUNIQUEдодається до існуючого стовпця (або стовпців), у якому є повторювані або порожні значення, SQL Server 2000 перевіряє (за замовчуванням) наявні в стовпцях дані, щоб гарантувати унікальність всіх значень, крім порожніх. Якщо обмеженняUNIQUEдодається до стовпця, у якому є повторювані значення, SQL Server повертає помилку і не додає обмеження. SQL Server автоматично створює індексUNIQUE, щоб забезпечити відповідність вимозі унікальності, що висуває обмеженняUNIQUE. Тому при спробі вставити повторюваний рядок SQL Server повертає повідомлення про помилку, у якому говориться, що порушено обмеженняUNIQUE, і не додає рядок у таблицю.

Обмеження foreign key

Зовнішній ключ - це стовпець або комбінація стовпців, що використовуються для встановлення і забезпечення зв'язку між даними двох таблиць. Зв'язок між двома таблицями встановлюється шляхом додавання до однієї з таблиць стовпця (стовпців) і визначення для нього обмеження FOREIGN KEY. Цей стовпець містить значення первинного ключа із іншої таблиці. У таблиці може бути кілька обмеженьFOREIGN KEY. Наприклад, у таблиціTitlesз бази данихPubsє зв'язок з таблицеюPublishers, оскільки існує логічний зв'язок між книгами й видавництвами. Стовпецьpub_idу таблиціTitlesвідповідає стовпцю з первинним ключем таблиціPublishers. Стовпецьpub_idу таблиціTitles- це зовнішній ключ для таблиціPublishers.

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

Обмеження FOREIGN KEYможе посилатися на стовпці інших таблиць цієї бази даних або на інші стовпці цієї ж таблиці (таблиці, що посилаються самі на себе).

Хоча основне призначення обмеження FOREIGN KEY— контроль даних, які можуть бути збережені в таблиці із зовнішнім ключем, воно також виявляє зміну даних у таблиці з первинним ключем. Наприклад, якщо з таблиціPublishersвидалити рядок з відомостями про видавництво, у той час як ідентифікатор цього видавництва використовується для книг у таблиціTitles, посилальна цілісність між цими двома таблицями порушиться. Книги, які випущені вилученим видавництвом, “зависнуть” у таблиціTitlesбез посилання на дані таблиціPublishers. ОбмеженняFOREIGN KEYне допускає подібної ситуації. Це обмеження забезпечує посилальну цілісність, гарантуючи, що в таблицю з первинним ключем неможливо внести такі зміни, які зроблять недійсними посилання на дані таблиці із зовнішнім ключем. Спроба видалення рядка з таблиці з первинним ключем або зміни значення первинного ключа закінчиться невдачею, якщо значення первинного ключа, яке видаляється або змінюються відповідає значенню обмеженняFOREIGN KEYіншої таблиці. Щоб успішно змінити або видалити рядок, спочатку необхідно видалити або змінити дані зовнішнього ключа з таблиці із зовнішнім ключем, у результаті чого зовнішній ключ буде пов'язаний з іншими даними первинного ключа.