2017-02-14 50 views
3

こんにちは、私のDerby組み込みテーブルに外部キー制約があります。私は部屋、パッケージ、予約の3つのテーブルを持っています。Derby外部キー制約の問題

ルームテーブル--- RoomId |ルーム名|レンタル|説明

パッケージ表--- pkgId |名前|レート|詳細

予約表--- Id |ゲストID | pkgId |ルームID | ChkIn | ChkOut |日付|

予約テーブルの3つの外部キーは、GuestID、pkgId、roomIdです。

私が望んだのは、それぞれのテーブルにないいくつかの値を受け入れるための外部キーです。たとえば、ゲストがパッケージを取っていない場合、予約テーブルのpkgIdを0にしたいとします。しかし、私が何らかの理由で「テーブル 'RESERVATION'の更新が外部キー制約の違反を引き起こしました。キー(0)」のエラーです。それは0がPackagesテーブルの値ではないからですか?奇妙なことに、私の以前のアプリケーションでは問題ではありませんでした。ダービーは新しいjarファイルで何かを変えましたか?またはこの問題をどうやって解決できますか?私はRoomIdとpkgIdの両方が外部キーの制約を保ちながらある時点で予約テーブルに0を受け入れるようにしたい。誰でも助けてくれますか?前もって感謝します!

+1

としてnullを使用しているパッケージの表=> 'パッケージに挿入(pkgidは、名)の値(に新しいレコードを挿入する必要があります0、 'ゲストはパッケージを取っていません') 'または外部キーを削除するか、NULL値を使用します。外部キーは、 "外部キー値**は常に**参照テーブルに存在しなければなりません"という制約です。 – krokodilko

+0

私は新しい行を挿入し、その行をエンドユーザーから隠すことになると思います。しかし、以前のダービー版でどのように動作していたのか分かりません。どうもありがとうございました。 – Thomson

答えて

2

SQLでは、0は他の値と同様に有効な値です。そのため、FK列として0を設定すると、関連する表の0を持つ行が検索されます。

あなたは何の関連行が他のテーブルの上には存在しないことを示すためにしたい場合、あなたはどちらのID

+0

残念ながら、null値を挿入することはできません。しかし、以前のダービー版では0の値が働いたので混乱しました。とにかく、事実を確認してくれてありがとう。 – Thomson