Как установить связь один к одному, без создания записи в таблице?

Предположим что есть таблица с ролями в которой 5 записей, я хочу сделать так что бы у меня пользователи ссылались на какую-то из этих записей,но я не знаю как это реализовать, ниже примеры

вот к примеру запись многие ко многим, с промежуточной таблицей, и в этом случае запись в таблице roles не нужно будет создавать каждый раз, а лишь запись в user_roles - как это реализовать но со связью один к одному ? Что бы у юзера была роль введите сюда описание изображения

мои предположения но с промежуточной таблицей, но мне кажется это каким-то не верным вариантом не знаю почему, потому что я явно хочу что бы у юзера была лишь 1 роль введите сюда описание изображения

без промежуточной таблицы, и без создания записи в таблице ролей, но зато у роли есть юзер а не наоборот, как в этом случае выбрать при запросе на получения юзера, получить ещё и его роль ? если связь в другом направлении введите сюда описание изображения


Ответы (1 шт):

Автор решения: Faraday

При конфигурации связи один-к-одному вам не нужна дополнительная таблица, всё что вам нужно для установки данной связи - это просто добавить ссылку (references) к одной из таблиц. Связь много-ко-многим требует наличия дополнительной таблицы, но связь один-к-одному - нет. В одну из таблиц добавьте столбец, который будет Внешним ключом к другой таблице. Вот пример реализации такой связи:

CREATE TABLE Пользователи (
    id INT PRIMARY KEY AUTO_INCREMENT,
    имя VARCHAR(50),
    email VARCHAR(50) UNIQUE
);

CREATE TABLE Профили (
    id_профиля INT PRIMARY KEY AUTO_INCREMENT,
    id_пользователя INT UNIQUE REFERENCES Пользователи(id) not null,
    дата_рождения DATE,
    фото VARCHAR(100),
);

Тут стоит учесть, что связь один-к-одному осуществляется при помощи этой строчки кода:

id_пользователя INT UNIQUE

Если не указывать UNIQUE, это будет связь один-ко-многим. not null делает эту связь обязательной.

Ресурсы для изучения:

→ Ссылка