Назад к вопросам
Middle
145
questionbank

Как реализовать связь один к одному в базе данных?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

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

  1. Использование общего первичного ключа: Две таблицы используют одно и то же поле в качестве первичного ключа, которое также является внешним ключом, ссылающимся на первичный ключ другой таблицы.

  2. Использование уникального внешнего ключа: В одной из таблиц создается поле, которое является внешним ключом, ссылающимся на первичный ключ другой таблицы, и на это поле накладывается ограничение уникальности.

Пример с общим первичным ключом (в SQL Server):

CREATE TABLE UserProfiles (
    UserId INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50)
);

CREATE TABLE UserDetails (
    UserId INT PRIMARY KEY, // Это и первичный ключ, и внешний ключ
    Address NVARCHAR(100),
    Phone NVARCHAR(20),
    CONSTRAINT FK_UserDetails_UserProfiles FOREIGN KEY (UserId) REFERENCES UserProfiles(UserId)
);

Пример с уникальным внешним ключом (в SQL Server):

CREATE TABLE Users (
    UserId INT PRIMARY KEY,
    Username NVARCHAR(50) UNIQUE
);

CREATE TABLE UserInfo (
    UserInfoId INT PRIMARY KEY, // Первичный ключ UserInfo
    UserId INT UNIQUE,         // Уникальный внешний ключ, ссылающийся на Users
    Email NVARCHAR(100),
    CONSTRAINT FK_UserInfo_Users FOREIGN KEY (UserId) REFERENCES Users(UserId)
);

Выбор между подходами зависит от семантики данных и удобства доступа. Подключение по общему первичному ключу часто используется, когда данные второй таблицы являются необязательным расширением первой. Уникальный внешний ключ более гибок, если первичные ключи таблиц не совпадают изначально.