引用具有约束的主键

时间:2018-11-24 20:58:52

标签: sql primary-key

我的数据库中有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并基于约束。我想在Address表中创建外键Resident,引用 Address表中的主键Apartment

我该怎么做?

1 个答案:

答案 0 :(得分:0)

由于您在Apartment中的主键由三列组成,因此任何要引用Apartment的表都将 也需要具有所有三列 strong>建立外键链接。

因此,您需要将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)至少使用< strong>唯一约束-这样您就可以建立到该代理列的FK链接(使用单个列,而不必复制三列“真实”数据)