2016-04-02 5 views
0

に挿入されていない私は、データベース に私は「購入」と呼ばれるに値を挿入しようとしているテーブルをモックデータを挿入する問題を抱えていますこのようpatient_id、pharmacy_id、drug_idなど、いくつかの外部キー値を持ってい 。SQL JDBC:親キー見つかりましたが、親の値がすでにデータベース

他の3つのテーブル「患者」、「薬局」、「薬」は既にデータベースに正常に追加されました。

患者テーブルはdoctor_idある外部キーを持っています。 「doctor」テーブルもデータベースに追加されています。

私は「購入」テーブルの外部キーpatient_idは別の外部キーdoctod_idに依存していることを知っているので、私はこの

外部キー(patient_id、receipt_no)のようなものをやった参照するので患者(patient_id、doctor_id ) ON DELETE CASCADE

ここで私が見逃していることはわかりませんが、sqlplusが親キーが見つからないと不平を言うのはなぜですか?私はまだ学んでいるので、ちょうどデータベースクラスプロジェクトのために働いています。

ここ.SQLコードファイル https://gist.github.com/mopkaloppt/de8fbf64c4d5711c90e2b389a72911ba

は、ヘルプの任意の種類がはるかに高く評価されるのです..私はしばらくの間、これで苦労してきたように私は今、少し怖がらだし、それはすぐに原因だ:(

答えて

1

あなたのFK制約のこの部分は混乱になります。

foreign key (patient_id, receipt_no) references patient(patient_id,doctor_id) ON DELETE CASCADE 
         ^^^^^^^^^^        ^^^^^^^^^ 

一致してあなたのpurchasedデータにはreceipt_noありませんので、あなたがエラーを取得しています。データが無関係であるため、これはおそらく驚くべきことではありません。

patientテーブルのデータを見ても、データベース設計が正しく行われていないようです。この表には重複があります。患者が複数の病気を抱えている場合や複数の医師がいる場合は、他のすべての列について繰り返し値があります。これはあなたのFK制約の中にも入っています。purchasedの行を患者にリンクしようとしていますが、患者によっては複数の行があるので、どの行にリンクしますか?

患者と病気(複数の病気があり、複数の患者が病気になる可能性がある)と患者と医師の間に多対多の関係があるようです(複数の医師が患者を見ることができます、医者は複数の患者を見ることができる)。だから、私は患者と病気の関係のための新しいテーブルを導入をお勧めしますし、患者と医師の間でしょう。たとえば、患者と医師の関係に使用できる表は次のとおりです。患者と医師の各組み合わせについて、このテーブル内の行を挿入します。このような

create table patient_doctor (
    patient_id char(4) not null, 
    doctor_id char (4) not null, 
    primary key (patient_id, doctor_id), 
    foreign key (patient_id) references patient(patient_id) on delete cascade, 
    foreign key (doctor_id) references doctor(doctor_id) on delete cascade); 

連結テーブルは、リレーショナル・データベース内の多対多の接続を表現する標準的な方法です。

あなたはまだ病気のためのテーブルを持っていないので、私はそれらのためのテーブル、患者と医者のためのリンクテーブル(おそらくpatient_illness)、および両方のテーブルのデータを作成しておきます。あなたはそれをやった後は

は、patientからdoctor_idillness列を削除重複行を削除し、patient PKだけpatientに依存します。 purchasedからpatientまでのFK制約は、patient_idのみを参照できます。

うまくいけば、あなたはFK制約違反のエラーが消えるのを見るべきです。

+0

詳細な回答をいただきありがとうございます。 これは今動作します:) – mopkaloppt

関連する問題