Назад к вопросам
МТС
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.