【问题标题】:Foreign Key Reference外键引用
【发布时间】:2021-03-11 03:38:02
【问题描述】:

我在课堂上提到 FlightData 表中的 2 个外键是 Depart_CodeAriv_Code 在关系模式中没有任何表可以引用它们作为主键给定的。

在课堂上,有人告诉我他们在Airport 表中引用了Airport_Code。我想知道我会这样做吗?我觉得我错过了一些明显的东西。感谢您提供的任何帮助。总的来说,我还是数据库新手,目前使用的是 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)
);

FlightData 表:

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 代码,所以它们应该通过 FK 链接到 Airport 表,所以这两列缺少 FK to Airport(Airport_Code)

标签: sql database-design oracle11g foreign-keys rdbms


【解决方案1】:

要确保Depart_CodeAriv_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)
);

【讨论】:

  • 知道了!这是否包括将 Airport_Code 也设为 NOT NULL 或仅将出发和到达代码设为 NOT NULL?
  • @user14658431 Airport_Code 是 Airport 表的主键。根据定义,主键始终为 NOT NULL。
  • 我对 FlightData 进行了编辑,但我得到:ORA-02291: 违反完整性约束 (IT2309.FK2) - 未找到父键 我的代码调整为 -- 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) ); @The Impaler
  • @user14658431 您的数据不一致。删除所有数据,创建外键,然后再次插入数据。
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 2013-02-23
  • 2018-02-21
相关资源
最近更新 更多