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