SQL:外键未正确引用

时间:2017-11-26 23:24:31

标签: sql reference foreign-keys

我有以下两个表:

CREATE TABLE IF NOT EXISTS Doctor 
(
    ssn CHAR(11) PRIMARY KEY,
    name CHAR(30),
    specialty CHAR(30),
    yearsOfExperience INTEGER
);

CREATE TABLE IF NOT EXISTS Pri_Phy_Patient  
(
    ssn CHAR(11) PRIMARY KEY,
    name CHAR(20),
    age INTEGER,
    address CHAR(200),
    phy_ssn CHAR(11),
    FOREIGN KEY (phy_ssn) REFERENCES Doctor(ssn)
);

select * from doctor返回以下内容:

ssn     name        specialty   yearsOfExperience
-------------------------------------------------
156188  Dr. Doctor  Doctorism   12
338738  Dr. Jim     Eyes        2
4354354 Dr. Man     Legs        1
453543  Dr. Woman   Arms        5

select * from pri_phy_patient会返回此信息:

ssn     name    age address                           phy_ssn
-------------------------------------------------------------
1234134 Patrick 32  331 Patrickson Lane, Patton, CO   NULL
1234597 Patty   23  331 Patterson Dr, Pattington, IL  NULL
654643  Pamela  46  331 Pammerson Rd, Pammington, OR  NULL

为什么phy_ssn列的NULL列为Pri_Phy_Patient?我用phy_ssn引用了Doctor(ssn)phy_ssn列是否不具备所有医生SSN?

1 个答案:

答案 0 :(得分:0)

我认为术语"外键"对你来说并不是很清楚。

让我尝试解释一下。外键是引用另一个表中主键的字段。

让我们检查一下这个例子:

  • 表1:书籍(Id,Title,AuthorId)
  • 表2:作者(AuthorId,姓名,性别)

在此方案中,表AuthorId中的列Book引用表AuthorId中的列Authors

现在让我们回到你的案子。表phy_ssn中的列pri_phy_patient是引用表格医生中的列ssn,但它可以为空,因此它可以为空。它不应该包含所有的医生。

希望这有帮助!