Введення обмежень в базах даних

В базі даних існують такі види обмежень:

  1. Первинний ключ — PRIMARY KEY.
  2. Унікальний ключ — UNIQUE KEY.
  3. Зовнішній ключ — FOREIGN KEY — може включати автоматичні тригери ON UPDATE і ON DELETE; перевірки — CHECK.

Обмеження бази даних бувають двох типів — на основі одного поля і на основі декількох полів таблиці. Давайте розглянемо створення обмежень детальніше. Першим в описі загального синтаксису обмежень йде ключове слово[CONSTRAINT <Ім'я обмеження>]. Тут CONSTRAINT означає обмеження. Як бачите, все це взяте в квадратні дужки і, значить, необов’язкове. В базі даних не може бути два обмеження з однаковими іменами.

За допомогою ключового слова CONSTRAINT можна задавати ім’я створюваному обмеженню і у випадку використання синтаксису обмежень на основі одного поля, і у випадку обмежень на основі декількох полів.

Якщо не вказати ім’я для обмеження, СУБД автоматично згенерує його. Однак краще все ж явно назначити ім’я, щоб покращити читабельність схеми бази даних і мати можливість, в подальшому, видалити його.

Призначивши ім’я обмеженню, необхідно задати його тип. Розглянемо різні типи обмежень.

Первинні ключі є одним з основних видів обмежень в базі даних. Вони використовуються для однозначної ідентифікації записів у таблиці. Первинний ключ являє собою одне або декілька полів в таблиці, комбінація яких унікальна для кожного запису. Для однієї таблиці не повинно існувати повторюваних значеннь первинного ключа.

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

Синтаксис створення первинного і унікального ключа на основі єдиного поля такий:

[CONSTRAINT <Ім’я_обмеження>] {PRIMARY KEY|UNIQUE}

Приклад: створити таблицю Cars, яка в якості первинного ключа використовує поле типу INTEGER.

CREATE TABLE Cars
(kod INTEGER NOT NULL,
color VARCHAR(10),
year INTEGER,
price INTEGER,
displacement VARCHAR(10),
mileage VARCHAR(10),
CONSTRAINT PK_Kod PROMARY KEY(Kod));

Синтаксис створення первинного і унікального ключів на основі декількох полів:

[CONSTRAINT <Ім’я_обмеження>] {PRIMARY KEY|UNIQUE) (<стовпець1>[, <стовпець2>...] )

CREATE TABLE Cars
(kod INTEGER NOT NULL,
model VARCHAR(25) NOT NULL,
color VARCHAR(10),
year INTEGER,
price INTEGER,
displacement VARCHAR(10),
mileage VARCHAR(10),
CONSTRAINT PK_Kod PROMARY KEY(Kod, Model));

Зверніть увагу на те, що всі поля, які входять в склад первинного і унікального ключів, повинні декларуватися як NOT NULL, так як ці ключі не можуть містити порожніх значень.

Окрім створення обмежень первинних і унікальних ключів в момент створення таблиці існує можливість додавати обмеження в уже існуючу таблицю. Для цього використовується команда ALTER TABLE:

ALTER TABLE <Ім'я таблиці>
ADD [CONSTRAINT <Ім’я_обмеження>{PRIMARY KEY|UNIQUE)(<стовпець1> [, <стовпець2>...])

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

  1. Vendors - містить список людей, які являються продавцями автомобілів і складається з наступних полів: id (ключове поле), name.
  2. Cars — містить список автомобілів виставлених на продаж, яка складається з полів: Kod (ключове поле), v_id (зовнішній ключ для зв'язку з таблицею Vendors), color, year, price, displacement, mileage.

Отже скориставшись конструкцією CREATE TABLE створимо тадлицю Vendors, яка в якості первинного ключа використовує поле id типу INTEGER:

CREATE TABLE Vendors
(id INTEGER NOT NULL,
name VARCHAR(50),
CONSTRAINT PK_id PRIMARY KEY(id));

Таблицю Cars ми створили в попередньому прикладі, внесемо лише деякі зміни в її структурі (додамо поле v_id типу INTEGER, яке будемо використовувати в якості зовнішнього ключа.

ALTER TABLE Cars ADD v_id INTEGER NOT NULL;

ALTER TABLE Cars ADD CONSTRAINT FK_vid FOREIGN KEY(v_id) REFERENCES Vendors(id);

Останній SQL запит містить нове для на оголошення, а саме — оголошення зовнішнього ключа за допомогою оператора FOREIGN KEY. У дужках вказується поле таблиці, яке має бути пов'язане з іншою таблицею . Після цього йде ключове слово REFERENCES (посилання), ім'я таблиці, з якою повинен бути зв'язок (Vendors) і в дужках ім'я поля (id) .

І на кінець розглянемо одне з найбільш корисних обмежень в базі даних, а саме обмеження перевірки, яке має наступний синтаксис:

[CONSTRAINT <Ім’я_обмеження>] CHECK (<умова>)

Обмеження CHECK складається з ключового слова CHECK, після якого в дужках вказується умова, в якій використовується вказане поле. Будь-яка спроба модифікувати або вставити значення поля, яке призводить до не виконання даної умови, буде відхилена.

За допомогою обмеження CHECK і оператора LIKE можна легко домогтися введення даних у певному форматі. Наприклад, для поля mileage (пробіг) таблиці Cars дані потрібно представляти в наступному форматі «ХХХХХХ т. км», де Х — будь-які цифри. Даний формат можна представити таким чином:

ALTER TABLE Cars ADD CONSTRAINT c_mileage CHECK(mileage LIKE '______ т. км');

Також слід зазначити, що крім створення обмежень, доволі часто доводиться вилучати їх. Для цього оператор ALTER TABLE записують в наступному вигляді:

ALTER TABLE <Ім'я таблиці>
DROP CONSTRAINT <Ім’я_обмеження>

Зауваження:  вилучати обмеження може лише власник таблиці або системний адміністратор SYSDBA.

Матеріал був корисним, поділись в соціальних мережах:

Якщо тобі сподобалась дана тема, залиш свій коментар