2016-06-24 21 views
1

健康管理DBを作成しようとしていますが、このエラーが発生します。何が問題ですか?エラーコード:1215外部キー制約を追加できません

-- table glocation 

CREATE TABLE `MOH`.`glocation` (
`street` VARCHAR(20) NOT NULL, 
`city` VARCHAR(20) NOT NULL, 
`state` VARCHAR(20) NOT NULL, 
`geolocation` INT(8), 
PRIMARY KEY (`street`, `city`, `state`)); 

-- table patient 

CREATE TABLE `MOH`.`patient` (
`PID` INT(6) zerofill UNSIGNED NOT NULL AUTO_INCREMENT, 
`first_name` VARCHAR(45) NOT NULL, 
`last_name` VARCHAR(45) NOT NULL, 
`sex` VARCHAR(10), 
`b_insurance` VARCHAR(45), 
`s_insurance` VARCHAR(45), 
`education` VARCHAR(20), 
`job` VARCHAR(20), 
`street` VARCHAR(20), 
`city` VARCHAR(20), 
`state` VARCHAR(20), 
`date_of_birth` date, 
`license` boolean, 
PRIMARY KEY (`PID`), 
CONSTRAINT `street` 
    FOREIGN KEY (`street`) 
    REFERENCES `MOH`.`glocation` (`street`), 
CONSTRAINT `city` 
    FOREIGN KEY (`city`) 
    REFERENCES `MOH`.`glocation` (`city`), 
CONSTRAINT `state` 
    FOREIGN KEY (`state`) 
    REFERENCES `MOH`.`glocation` (`state`)); 

エラーは次のとおりです。

TABLE MOHを作成します。 patient(...)エラーコード:1215は 外部キー制約に

+0

は、なぜあなたはMOH.glocationで複数列の主キーを作成する代わりにしている(あなたが定義しようとした三つの独立した制約がある限り、各値は独立glocationに存在していたよう。'El Camino Real', 'New York City', 'Florida'のようなナンセンスの組み合わせを許可しています)ジオロケーションフィールドを使用するだけですか?なぜ地理位置情報を使用する代わりにMOH.patientのMOH.glocationからフィールド(ストリート、シティ、州)を複製していますか? – Rick

答えて

1

を追加することはできません私はあなたが、patient.streetpatient.citypatient.state外部キー個別をしようとしてが、彼らはありませんしているからだと考えなければなりませんプライマリキーはglocationです。

てみてください、私はとにかくあなたのプロジェクトのコンテキストで、より理にかなっていると思います

CONSTRAINT location 
    FOREIGN KEY (street, city, state) 
    REFERENCES glocation (street, city, state) 

のように、列の組み合わせ単一の外部キーを作ります。

関連する問題