sql >> Database >  >> RDS >> Sqlserver

Samengestelde primaire sleutel sql-relatie

Als u een composiet . heeft primaire sleutel, dan alle externe sleutelbeperkingen die ernaar verwijzen, moeten alle kolommen gebruiken van de samengestelde primaire sleutel.

Dus in jouw geval - TableTwo moeten referentie TableOne(ReportID, Date)

De enige manier om dit te omzeilen is door een UNIQUE INDEX te maken op TableOne (ReportID) - dan kunt u alleen een verwijzing naar een externe sleutel maken voor die unieke beperking.

Maar dat roept dan de vraag op:waarom is ReportID . niet alleen de primaire sleutel, als deze al uniek is (omdat je een UNIQUE INDEX kunt plaatsen erop) en NIET NULL (omdat het deel uitmaakt van de samengestelde PK) ?

Stap 1:maak de UNIQUE INDEX :

CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

Stap 2:maak de externe sleutel van TableTwo :

ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)



  1. Selecteren op basis van pad in mysql

  2. Hoe dump je vanuit PostgreSQL in de database?

  3. Hoe maak je alle SQL-SQLite-query's per case-statement?

  4. JSON Zoeken in laravel welsprekend