Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Розкажіть про зв'язок 1:1 (один до одного)». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Зв'язок **«один до одного» (1:1)** - тип відношення між таблицями, за якого **кожному запису в одній таблиці відповідає не більше одного запису в іншій**; реалізується через зовнішній ключ з обмеженням `UNIQUE`, наприклад `passports.user_id UNIQUE REFERENCES users(id)`. **Ключове:** такий зв'язок застосовують для розділення приватних даних (наприклад, паспортні дані в окрему таблицю), оптимізації (щоб не тримати забагато полів в одній таблиці) і рідкісних розширень, які стосуються не всіх записів.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняЗв'язок **«один до одного» (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** - це строга пара «один запис <-> один запис». Він забезпечує унікальність зв'язку між таблицями, застосовується для розмежування, безпеки й структурування даних.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.