Jak zaimplementować relację jeden do jednego w bazie danych?
sobes.tech AI
Odpowiedź od AI
Związek "jeden do jednego" w relacyjnej bazie danych realizuje się za pomocą ograniczenia unikalności i klucza obcego. Najczęstsze sposoby:
-
Użycie wspólnego klucza głównego: Dwie tabele używają tego samego pola jako klucza głównego, które jest również kluczem obcym odwołującym się do klucza głównego innej tabeli.
-
Użycie unikalnego klucza obcego: W jednej z tabel tworzy się pole będące kluczem obcym odwołującym się do klucza głównego innej tabeli, na które nakłada się ograniczenie unikalności.
Przykład z wspólnym kluczem głównym (w SQL Server):
CREATE TABLE UserProfiles (
UserId INT PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
);
CREATE TABLE UserDetails (
UserId INT PRIMARY KEY, // To jest też klucz główny i klucz obcy
Address NVARCHAR(100),
Phone NVARCHAR(20),
CONSTRAINT FK_UserDetails_UserProfiles FOREIGN KEY (UserId) REFERENCES UserProfiles(UserId)
);
Przykład z unikalnym kluczem obcym (w SQL Server):
CREATE TABLE Users (
UserId INT PRIMARY KEY,
Username NVARCHAR(50) UNIQUE
);
CREATE TABLE UserInfo (
UserInfoId INT PRIMARY KEY, // Klucz główny UserInfo
UserId INT UNIQUE, // Unikalny klucz obcy odwołujący się do Users
Email NVARCHAR(100),
CONSTRAINT FK_UserInfo_Users FOREIGN KEY (UserId) REFERENCES Users(UserId)
);
Wybór między tymi podejściami zależy od semantyki danych i wygody dostępu. Połączenie przez wspólny klucz główny jest często używane, gdy dane drugiej tabeli są opcjonalnym rozszerzeniem pierwszej. Unikalny klucz obcy jest bardziej elastyczny, jeśli klucze główne tabel nie pokrywają się początkowo.