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) を持つ主キーの制約と、上記の 2 つの PK で構成される外部キー制約を適用しようとしています。

このコードを書くと、タイトルに記載されているエラーが表示されます。このエラーについてかなり検索しましたが、何も見つかりませんでした。複合 PK がある場合、同じキーを参照する FK は複合である必要があることを理解しています。私が理解していないこと (そしておそらくエラーが発生した理由) は、WARD_CODE を参照する FK をどのように割り当てることができるかということです。

ご協力いただきありがとうございます。質問が不明な場合はご容赦ください。

PS私はSQLが初めてです。

PS2。このようにする必要があるのは、教師が私たちに与えた課題のためです。その説明には、テーブル WARD には複合 PK(HOSP_CODE,WARD_CODE) と、HOSP_CODE および WARD_CODE の 2 つの FK が必要であると記載されています。

4

1 に答える 1

0

これはコメントとしては少し長いです。

HospitalsWards、 の3 つのテーブルが必要になると思います HospitalWards

あなたが呼んでいるのWardHospitalWards. ごとに 1 行の 2 つ目のテーブルが必要です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 に答える