无法添加外键约束,复合PK和FK

时间:2015-05-25 15:29:48

标签: sql sqlfiddle

CREATE TABLE HOSPITAL (
  HOSP_CODE  INT(3) NOT NULL, 
  HOSP_NAME VARCHAR(15), 
  HOSP_ADDRESS VARCHAR(15), 
  HOSP_PHONE VARCHAR(8), 
  HOSP_SUMBED INT(5), 
  PRIMARY KEY (HOSP_CODE)
);

CREATE TABLE WARD (
  HOSP_CODE INT(3) NOT NULL,
  WARD_CODE INT(3) NOT NULL,
  WARD_NAME VARCHAR(20),
  WARD_SUMBED INT(3),
  PRIMARY KEY (HOSP_CODE, WARD_CODE),
  FOREIGN KEY (HOSP_CODE) REFERENCES HOSPITAL(HOSP_CODE),
  FOREIGN KEY (WARD_CODE) REFERENCES WARD(WARD_CODE)
);

我正在尝试在表WARD中应用其中包含2列(HOSP_CODE和WARD_CODE)的主键约束以及由上述两个PK组成的外键约束。

编写此代码会给出标题中声明的错误。 我已经搜索了很多关于这个错误,但找不到任何东西。 我知道如果有复合PK,那么引用相同键的FK需要是复合的。 我不明白(可能是我有错误的原因)是如何指定引用WARD_CODE的FK。

如果我对我的问题不清楚,请提前感谢您的帮助,请原谅。

P.S。我是SQL的新手。

P.S2。我之所以需要这种方式,是因为教师给我们的作业,其描述提到表格WARD应该有一个复合PK(HOSP_CODE,WARD_CODE)和两个FK用于HOSP_CODE和WARD_CODE。

1 个答案:

答案 0 :(得分:0)

评论时间有点长。

我认为您可能需要三个表:HospitalsWardsHospitalWards

您呼叫Ward的内容为HospitalWards。您需要第二个表,每WardCode行一行。我可能认为表格看起来像这样:

CREATE TABLE WARDS (
  WARD_CODE INT(3) NOT NULL,
  WARD_NAME VARCHAR(20),
);

CREATE TABLE HospitalWards (
  HOSP_CODE INT(3) NOT NULL,
  WARD_CODE INT(3) NOT NULL,
  WARD_NUMBED INT(3),
  PRIMARY KEY (HOSP_CODE, WARD_CODE),
  FOREIGN KEY (HOSP_CODE) REFERENCES HOSPITALS(HOSP_CODE),
  FOREIGN KEY (WARD_CODE) REFERENCES WARDS(WARD_CODE)
);

床位数量将在联络表中。例如,许多医院可能有产科病房,但每个医院都有不同数量的病床。

请注意,我倾向于以复数形式命名表而不是单数形式。