Sobes.tech
Назад к вопросам
Senior
5

Как реализовать связь один-к-одному в БД?

Компании, где спрашивали
МТСМТС

Ответ от нейросети

sobes.tech AI

Связь один-к-одному в базе данных реализуется с помощью внешнего ключа с уникальным ограничением.

Пример:

Есть две таблицы: User и UserProfile. Каждому пользователю соответствует ровно один профиль.

CREATE TABLE User (
  id SERIAL PRIMARY KEY,
  username VARCHAR(50) NOT NULL
);

CREATE TABLE UserProfile (
  id SERIAL PRIMARY KEY,
  user_id INT UNIQUE REFERENCES User(id),
  bio TEXT
);

Здесь user_id в UserProfile — внешний ключ на User.id с ограничением UNIQUE, что гарантирует, что одному пользователю соответствует не более одного профиля.

В Java с использованием JPA/Hibernate это можно описать так:

@Entity
public class User {
    @Id
    private Long id;

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
    private UserProfile profile;
}

@Entity
public class UserProfile {
    @Id
    private Long id;

    @OneToOne
    @JoinColumn(name = "user_id", unique = true)
    private User user;
}

Таким образом, связь один-к-одному обеспечивается на уровне базы и ORM.