Этот вопрос проверяет понимание реляционного моделирования и механики foreign key в SQL.
Связь «один к одному» реализуется через внешний ключ с уникальным ограничением (UNIQUE). Это означает, что каждая строка в первой таблице может быть связана максимум с одной строкой во второй. Такая связь используется, когда нужно логически разделить сущность на два набора данных или вынести часть редких/чувствительных полей в отдельную таблицу.
Связь One-to-One в реляционных базах данных означает, что каждой записи в таблице А соответствует не более одной записи в таблице B.
sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE user_profiles (
id SERIAL PRIMARY KEY,
user_id INT UNIQUE REFERENCES users(id),
bio TEXT
);
Здесь user_id UNIQUE гарантирует, что одна запись user_profiles привязана ровно к одному user.
Разделение редко используемых или тяжёлых полей:
фото профиля
настройки пользователя
конфиденциальная информация
Основной объект загружается быстрее → дополнительные данные подгружаются по необходимости.
Например, User и Profile — сущности с разной логикой.
python
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Связь 1–1 создаётся через foreign key + UNIQUE. Применяется, когда нужно отделить расширенные или чувствительные данные от основной сущности.