Sobes.tech
Middle

Kaip įgyvendinti vienas su vienu ryšį duomenų bazėje?

sobes.tech AI

Atsakymas iš AI

„Vieno priešo“ ryšys reliacinėje duomenų bazėje įgyvendinamas naudojant unikalų apribojimą ir išorinį raktą. Dažniausiai naudojami būdai:

  1. Bendro pirminio rakto naudojimas: Dvi lentelės naudoja tą patį lauką kaip pirminį raktą, kuris taip pat yra išorinis raktas, nuorodžiantis į kitos lentelės pirminį raktą.

  2. Unikalus išorinis raktas: Vienoje iš lentelių sukuriamas laukas, kuris yra išorinis raktas, nuorodžiantis į kitos lentelės pirminį raktą, ir šiam laukui taikomas unikalumo apribojimas.

Pavyzdys su bendru pirminiu raktu (SQL Server):

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

CREATE TABLE UserDetails (
    UserId INT PRIMARY KEY, // Tai ir pirminis raktas, ir išorinis raktas
    Address NVARCHAR(100),
    Phone NVARCHAR(20),
    CONSTRAINT FK_UserDetails_UserProfiles FOREIGN KEY (UserId) REFERENCES UserProfiles(UserId)
);

Pavyzdys su unikaliu išoriniu raktu (SQL Server):

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

CREATE TABLE UserInfo (
    UserInfoId INT PRIMARY KEY, // Pirminis raktas UserInfo
    UserId INT UNIQUE,         // Unikalus išorinis raktas, nuorodžiantis į Users
    Email NVARCHAR(100),
    CONSTRAINT FK_UserInfo_Users FOREIGN KEY (UserId) REFERENCES Users(UserId)
);

Pasirinkimas tarp šių metodų priklauso nuo duomenų semantikos ir prieigos patogumo. Naudojimas bendro pirminio rakto dažniausiai taikomas, kai antrosios lentelės duomenys yra neprivalomas pirmosios išplėtimas. Unikalus išorinis raktas yra lankstesnis, jei pradžioje lentelių pirminiai raktai nesutampa.