Skip to main content

Розкажіть про зв'язок 1:1 (один до одного)

Зв'язок «один до одного» (1:1) - це тип відношення між таблицями, за якого кожному запису в одній таблиці відповідає не більше одного запису в іншій.

Такий зв'язок створюють рідко, але він буває корисний, коли треба розділити дані однієї сутності на два логічні блоки.

Приклад

Припустимо, у нас є таблиця users і таблиця passports:

sql
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE passports ( id INT PRIMARY KEY, user_id INT UNIQUE, passport_number VARCHAR(20), FOREIGN KEY (user_id) REFERENCES users(id) );

Тут:

  • users.id - первинний ключ у таблиці користувачів,
  • passports.user_id - зовнішній ключ, що посилається на users.id і має обмеження UNIQUE.

Завдяки UNIQUE, в одного користувача може бути лише один паспорт, а в одного паспорта - лише один власник.

Як це працює

Таблиця usersТаблиця passports
id = 1, name = 'Анна'user_id = 1, passport_number = 'AB123456'
id = 2, name = 'Іван'user_id = 2, passport_number = 'CD987654'

Кожен рядок users може бути пов'язаний лише з одним рядком passports.

Коли застосовують 1:1

  1. Для розділення приватних даних. Наприклад, персональні дані (паспорт, ІПН) виносять в окрему таблицю з обмеженим доступом.
  2. Для оптимізації. Щоб не зберігати забагато полів в одній таблиці - розділяють за змістом (наприклад, users і user_profiles).
  3. Для рідкісних розширень. Коли додаткова інформація потрібна не всім записам. Наприклад, лише в частини співробітників є службова машина - таблиця cars буде пов'язана з employees за 1:1.

Приклад запиту

sql
SELECT users.name, passports.passport_number FROM users JOIN passports ON users.id = passports.user_id;

Отримуємо ім'я користувача та його паспорт - один до одного.

Підсумок: Зв'язок 1:1 - це строга пара «один запис <-> один запис». Він забезпечує унікальність зв'язку між таблицями, застосовується для розмежування, безпеки й структурування даних.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.