sql - 外键引用
问题描述
我在课堂上提到FlightData
表中的 2 个外键是Depart_Code
,并且Ariv_Code
在我们给出的关系模式中,没有任何表可以引用它们作为主键。
在课堂上我被告知他们Airport_Code
在Airport
表格中引用。我想知道我会这样做吗?我觉得我错过了一些明显的东西。我很感激提供的任何帮助我对数据库还是新手,我目前在 Oracle 11g 上。
机场表
CREATE TABLE Airport
(
Airport_Code VARCHAR2(7) CONSTRAINT pk_Airport Primary Key,
City_Code VARCHAR2(3),
CONSTRAINT fk_Airport_City_Code
FOREIGN KEY(City_Code) REFERENCES City,
Airport_Name VARCHAR2(30)
);
飞行数据表:
CREATE TABLE FlightData
(
Flt_Nbr VARCHAR2(3) CONSTRAINT pk_FlightData Primary Key,
Depart_Code VARCHAR2(30),
Ariv_Code VARCHAR2(30)
);
解决方案
为确保Depart_Code
并Ariv_Code
始终参考Airport
表中的机场,您需要:
- 制作这些列
NOT NULL
。 - 确保它们与 中的键具有相同的数据类型
Airport
。使它们的长度为7
. - 添加两个外键约束,每一个都基于每一列。
例如,第二个表可能如下所示:
CREATE TABLE FlightData (
Flt_Nbr VARCHAR2(3) CONSTRAINT pk_FlightData Primary Key,
Depart_Code VARCHAR2(7) not null,
constraint fk1 foreign key (Depart_Code) references Airport (Airport_Code),
Ariv_Code VARCHAR2(7) not null,
constraint fk2 foreign key (Ariv_Code) references Airport (Airport_Code)
);
推荐阅读
- java - Processing 3 作为图像处理的库
- python - pd.to_datetime to unix timestamp to date in python给出incoreect输出
- postgresql - 在跟踪数据上创建行程编号
- java - 航空公司预订
- docker - 对于任何容器,Docker 在 Ubuntu 14.04 上崩溃
- java - Groovy 脚本编译为一个类
- php - 无法查看laravel中的数据集合
- c - 为什么在这个 C 函数中出现“fread: EFAULT, bad address”?
- java - 无法在带有空格的批处理文件中启动命令
- c# - 为模型类创建迁移