首页 > 解决方案 > 使用约束引用主键

问题描述

我的数据库中有 2 个表:

CREATE TABLE Apartment
(
    StreetName char(50) not null,
    Number Integer not null,
    Door Integer not null,
    Type char(30) not null,
    SizeSquareMeter Integer not null,
    NID Integer not null FOREIGN KEY REFERENCES Neighborhood(NID)
    CONSTRAINT Address PRIMARY KEY (StreetName, Number, Door)
);

CREATE TABLE Resident
(
    RID Integer not null PRIMARY KEY,
    FirstName varchar(30) not null,
    LastName varchar(30) not null,
    BirthDate date not null,
    Address
);

现在,公寓中的主键是Address并且基于约束。我想AddressResident表中创建一个引用表中主键Address的外键Apartment

我怎样才能做到这一点?

标签: sqlprimary-key

解决方案


由于您的主键Apartment由三列组成,因此任何想要引用的表Apartment需要拥有所有三列才能建立外键链接。

因此,您需要将Resident表更改为:

CREATE TABLE Resident
(
    RID Integer not null PRIMARY KEY,
    FirstName varchar(30) not null,
    LastName varchar(30) not null,
    BirthDate date not null,
    StreetName char(50) not null,
    Number Integer not null,
    Door Integer not null,
);

然后你可以添加外键约束:

ALTER TABLE Resident
    ADD CONSTRAINT FK_Resident_Apartment
    FOREIGN KEY (StreetName, Number, Door) REFERENCES Apartment (StreetName, Number, Door);

另一种选择是将代理列(人工的附加列)添加到Apartment- 作为主键,或者(对于 SQL Server)至少具有唯一约束- 以便您可以建立到该代理列的 FK 链接(使用那一列 - 而不是必须复制三列“真实”数据)


推荐阅读