logo

Database Design

by Rikky

Все категории нашего блога:

Основы баз данных

Проектирование БД простыми словами

Примеры баз данных

Разбираем архитектуру БД на популярных примерах

Восстановление БД

Исправление частых ошибок без потери данных

Новости проекта

Обновления, новые функции, и прочие события

Основы проектирования БД: как создать связь «один к одному» (1:1) и когда нужен этот тип связи, простыми словами на примере

Когда нам нужна связь «один к одному» (1:1)?

Когда одна запись из таблицы А может принадлежать только одной конкретной записи из таблицы Б, и в этот же момент одна запись из таблицы Б может принадлежать только одной конкретной записи из таблицы А.

Рассмотрим реальный пример такой ситуации: предположим нам нужно хранить пользователей и их паспортные данные в нашей базе данных. Ввод паспортных данных будет опциональным (необязательным), поэтому мы не будем хранить их в той же таблице, что и пользователей. 2023-11-28_01-18-14.png У одного человека может быть только один паспорт. То же можно сказать и про какой-либо конкретный паспорт: у него может быть только один человек.

Как создать связь «один к одному» (1:1)?

Необходимо добавить в таблицу А (в нашем случае это таблица пользователей) поле в которой мы будем хранить id (уникальный идентификатор) записи таблицы Б (в нашем случае это таблица паспортов). И в таблицу паспортов добавить поле в которой мы будем хранить id записи из таблицы пользователей. Таким образом мы создадим связь один к одному, так как мы можем в одной записи в столбце связи хранить только один ID записи другой таблицы.

id - уникальный (не повторяющийся) номер, который есть у каждой записи в любой таблице (исключение - таблицы связи многие ко многим, но об этом позже). Внутри одной таблицы не может быть два одинаковых id, что позволяет нам с 100% точностью получить нужную запись по её уникальному номеру

Вот как выглядит связь «один к одному» (1:1):

2023-11-28_01-19-29.png

Стоит отметить, что хоть так и выглядит настоящая связь один к одному с точки зрения архитектуры, в реальных условиях очень редко подобная связь устанавливается в двухстороннем формате, потому что нам достаточно в таблице Б (паспорта) указать поле в котором мы будем хранить id записи в таблице А (пользователи).

Однако фактически создавая таким образом связь один ко многим, мы должны держать в голове, что мы имеем в виду связь один к одному, и не создавать разные записи в таблице паспортов, ссылающиеся на одного и того же пользователя. Если в уме это пока что держать сложно - создавайте двустороннюю связь, как показано на примере выше.

Вот как мы можем упростить связь 1 к 1, фактически создавая связь 1 к М (при том, что мы будем использовать её только как 1 к 1!): 2023-11-28_01-43-32.png

Как работать со связью «один к одному» (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!

Схему из приложения Database Design в дальнейшем можно выгрузить в качестве SQL-дампа скачав его по ссылке. Файл дампа может использоваться для воссоздания точной структуры реляционной БД в любой нормальной SQL-подобной системы управления базами данных (СУБД), например MySQL. И даже код SQL-запросов не придётся для этого писать!

Работать в приложении Database Design
одно удовольствие!

Подойдёт как профессионалам
так и студентам для организации хранения и анализа а также наглядного представления моделей бд своих проектов.

Перейти к конструктору Database Design