Коли використовується зв'язок один до одного
Основи проектування БД: як створити зв'язок один до одного (1:1) і коли потрібен цей тип зв'язку, простими словами на прикладі
Коли один запис з таблиці А може належати лише одного конкретного запису з таблиці Б, і в цей момент один запис з таблиці Б може належати тільки одному конкретному запису з таблиці А.
Розглянемо реальний приклад такої ситуації: припустимо нам потрібно зберігати користувачів та їх паспортні дані у нашій базі даних. Введення паспортних даних буде опціональним (необов'язковим), тому ми не зберігатимемо їх у тій же таблиці, що і користувачів. В однієї людини може бути лише один паспорт. Те саме можна сказати і про якийсь конкретний паспорт: у нього може бути лише одна людина.
Як створити зв'язок один до одного (1:1)?
Необхідно додати до таблиці А (у нашому випадку це таблиця користувачів) поле, в якому ми зберігатимемо id (унікальний ідентифікатор) запису таблиці Б (у нашому випадку це таблиця паспортів). І в таблицю паспортів додати поле в якому ми зберігатимемо id записи з таблиці користувачів. Таким чином, ми створимо зв'язок один до одного, тому що ми можемо в одному записі в стовпці зв'язку зберігати лише один ID запису іншої таблиці.
id - унікальний (не повторюваний) номер, який є у кожного запису в будь-якій таблиці (виняток - таблиці зв'язку багато хто до багатьох, але про це пізніше). Усередині однієї таблиці не може бути два однакових id, що дозволяє нам зі 100% точністю отримати потрібний запис за її унікальним номером
Ось як виглядає зв'язок один до одного (1:1):
Варто зазначити, що хоч так і виглядає справжній зв'язок один до одного з погляду архітектури, в реальних умовах дуже рідко подібний зв'язок встановлюється у двосторонньому форматі, тому що нам достатньо в таблиці Б (паспорта) вказати поле в якому ми зберігатимемо id записи таблиці А (користувачі).
Однак фактично створюючи таким чином зв'язок один до багатьох, ми повинні пам'ятати, що ми маємо на увазі зв'язок один до одного, і не створювати різні записи в таблиці паспортів, що посилаються на одного користувача. Якщо в думці це поки що тримати складно – створюйте двосторонній зв'язок, як показано на прикладі вище.
Ось як ми можемо спростити зв'язок 1 до 1, фактично створюючи зв'язок 1 до М (при тому, що ми будемо використовувати його тільки як 1 до 1!):
Як працювати зі зв'язком "один до одного" (1:1)?
Розберемо на нашому прикладі. Ось як ми можемо отримати деякі дані користувача з таблиці користувачів разом із деякими паспортними даними:
SELECT u.id, u.email, u.role, p.firstname, p.date_of_birth, p.registration_address FROM user u, passport p WHERE p.user = u.id AND c.user = ?; Де замість N нам потрібно буде встановити унікальний номер користувача. А якщо ми хочемо отримати всіх користувачів з їхніми паспортними даними, ми можемо поставити крапку з комою після "p.user=u.id" та видалити все, що нижче.
У сусідніх статтях ви можете знайти інформацію про інші типи реляційних зв'язків даних: багато до багатьох, і один до багатьох. Якщо було корисно, можете підтримати лайком/коментарем/підпискою на мій освітній канал YouTube.
А де можна спроектувати базу даних?
Спробуйте використати новий візуальний конструктор під назвою Database Design.Простий і зручний інтерфейс дозволить спроектувати реляційну базу даних у формі побудови наочного уявлення графічної моделі, в якій можна пов'язати поля різних таблиць, вказавши, як вони відносяться один до одного. Розглянемо як це виглядає:
Схему з програми Database Design надалі можна вивантажити як SQL-дампа, завантаживши його за посиланням. Файл дампа може використовуватися для відтворення точної структури реляційної БД будь-якої нормальної SQL-подібної системи управління базами даних (СУБД), наприклад MySQL. І навіть код SQL-запитів не прийде для цього писати!
Працювати у додатку Database Design
одне задоволення!
Підійде як професіоналам
так і студентам для організації зберігання та аналізу, а також наочного представлення моделей бд своїх проектів.