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。
答案 0 :(得分:0)
评论时间有点长。
我认为您可能需要三个表:Hospitals
,Wards
和HospitalWards
。
您呼叫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)
);
床位数量将在联络表中。例如,许多医院可能有产科病房,但每个医院都有不同数量的病床。
请注意,我倾向于以复数形式命名表而不是单数形式。