JavaRush /Курси /SQL SELF /Додавання обмежень при створенні таблиць: NOT NULL, UNIQU...

Додавання обмежень при створенні таблиць: NOT NULL, UNIQUE

SQL SELF
Рівень 17 , Лекція 1
Відкрита

Даних може бути купа, але не всі вони корисні. Щоб твоя таблиця не перетворилась на смітник, PostgreSQL дозволяє задавати обмеження. Це як прості правила, щоб ніхто не записав у поле "ім'я" цифри або не залишив його порожнім.

Що таке constraints?

Обмеження (constraints) у PostgreSQL — це як правила поведінки в армії. Якщо їх немає, то кожен може робити що завгодно: вказати вік користувача як -999, додати порожній рядок замість імені або двічі записати одного й того ж студента під різними id. Щоб цього не сталося, PostgreSQL пропонує механізми контролю, які називаються обмеженнями.

Обмеження дозволяють тобі:

  1. Дати твоїм даним залишатися валідними та узгодженими.
  2. Переконатися, що дані відповідають певним правилам (наприклад, вік людини не може бути від’ємним).
  3. Швидше знаходити помилки, якщо дані не відповідають твоїм очікуванням.

Сьогодні ми розглянемо два найпопулярніших обмеження: NOT NULL і UNIQUE.

Обмеження NOT NULL

Обмеження NOT NULL каже PostgreSQL: "Гей, це поле завжди має містити значення. Ніякої невизначеності тут не буде!". Якщо ти спробуєш додати в таблицю рядок, де є NULL, PostgreSQL видасть помилку. Це особливо корисно для тих полів, які обов’язкові, наприклад, ім’я або дата народження студента.

Приклад використання NOT NULL

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,          -- Унікальний ідентифікатор
    name VARCHAR(100) NOT NULL,     -- Ім'я викладача (обов'язково)
    subject VARCHAR(50) NOT NULL    -- Предмет, який він веде (обов'язково)
);

У цьому прикладі стовпці name і subject не можуть бути порожніми. Якщо ти спробуєш вставити рядок без значень для цих стовпців, отримаєш помилку.

INSERT INTO teachers (name, subject)
VALUES (NULL, 'Mathematics');

Результат: помилка! Ти не вказав ім'я викладача, а name вимагає значення.

Обмеження UNIQUE: потрібна унікальність

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

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

Приклад використання UNIQUE

CREATE TABLE departments (
    id SERIAL PRIMARY KEY,      -- Унікальний ідентифікатор
    name VARCHAR(100) UNIQUE    -- Назва департаменту має бути унікальною
);

Тепер ти не зможеш додати два департаменти з однаковою назвою.

INSERT INTO departments (name) VALUES ('Mathematics');
INSERT INTO departments (name) VALUES ('Mathematics');

Результат: помилка! Спроба вставити рядок з дубльованим значенням у стовпці name.

Комбіноване обмеження UNIQUE

Ти також можеш задати унікальність для комбінації двох (або більше) стовпців. Наприклад:

CREATE TABLE enrollments (
    id SERIAL PRIMARY KEY,          -- Унікальний ідентифікатор для запису
    student_id INTEGER NOT NULL,    -- Ідентифікатор студента
    course_id INTEGER NOT NULL,     -- Ідентифікатор курсу
    UNIQUE (student_id, course_id)  -- Один студент не може записатися на один курс двічі
);

Тепер кожна пара student_id і course_id має бути унікальною. Якщо хтось спробує двічі записати одного й того ж студента на той самий курс, PostgreSQL цього не дозволить.

Комбінування обмежень: NOT NULL і UNIQUE

Ти можеш комбінувати NOT NULL і UNIQUE для одного стовпця. Наприклад:

CREATE TABLE users (
    username VARCHAR(50) NOT NULL UNIQUE, -- Унікальний логін, обов'язковий для заповнення
    email VARCHAR(100) NOT NULL UNIQUE -- Унікальна електронна пошта, обов'язкова для заповнення
);

Тут логін і адреса електронної пошти мають бути унікальними і не можуть бути порожніми.

Типові помилки при використанні обмежень

Якщо ти застосовуєш UNIQUE до стовпця, але не додаєш обмеження NOT NULL, то можна ввести кілька рядків з порожніми значеннями NULL, бо PostgreSQL вважає, що NULL не дорівнює іншому NULL. Якщо хочеш заборонити порожні значення — додавай NOT NULL.

Спроба додати дубльоване значення у стовпець з обмеженням UNIQUE викличе помилку. Завжди перевіряй вхідні дані перед INSERT.

Занадто багато обмежень може знизити продуктивність операцій вставки.

Навіщо все це потрібно?

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

На наступній лекції ми розберемо обмеження DEFAULT, яке дозволяє задавати значення за замовчуванням для стовпців, якщо користувач нічого не вказав. До зустрічі!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ