sql - 使用约束引用主键
问题描述
我的数据库中有 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
。
我怎样才能做到这一点?
解决方案
由于您的主键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 链接(使用那一列 - 而不是必须复制三列“真实”数据)
推荐阅读
- cmake - 如何卸载 cmake 3.2.3 或如何找到 cmake 的目录...谢谢
- laravel - 如何从laravel中的表单提交的Controller中获取多个复选框值?
- docker - 无法在主机中的 curl 和 docker alpine 中的 golang 服务器之间连接
- flutter - Flutter:如何修复 Flutter 中的 SelectableText 滚动错误
- c++ - 使用 CloseHandle() 关闭 FTDI Comm 端口需要很长时间
- c# - 错误 MSB4018 “GenerateClsidMap”任务意外失败
- google-cloud-platform - 有什么方法可以将参数或参数文件传递给数据融合中的管道
- python - 当我在 python 中复制列表时出现问题。两个列表不是独立的
- git - 将樱桃选择提交到其他分支的 Git 问题
- laravel - HarmonyLinkingError:在“vue”中找不到导出“onUnmounted”