0
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。

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

PS 我是 SQL 新手。

PS2。我需要这种方式的原因是因为老师给我们的一个作业,他的描述提到表 WARD 应该有一个复合 PK(HOSP_CODE,WARD_CODE)和两个用于 HOSP_CODE 和 WARD_CODE 的 FK。

4

1 回答 1

0

这是一个有点长的评论。

我想您可能需要三个表: HospitalsWardsHospitalWards

你打电话WardHospitalWards. 您需要第二个表,每行一行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)
);

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

请注意,我倾向于用复数而不是单数来命名表。

于 2015-05-25T16:53:56.117 回答