前回までで公開されているデータをローカルのPostgreSQLに流し込むところまではできました。では、いよいよNetBeans上での作業に移ろうかというところで、外部キーの設定を忘れていた事を思い出しました。というか、外部キーを適切に設定していないと、NetBeans上でデータベースを取り扱うのが煩雑になるようです。
まずは、どのようなインターフェースにするかですが、

だいたい上のようなイメージで考えています。
ということで、外部キーの設定は、
ってことで、おそらく他にもたくさんこういったコードが紛れ込んでいる可能性があり、外部キーをつかうならばこの辺を解決しなければならないようです。
解決編は次回へ。
まずは、どのようなインターフェースにするかですが、

だいたい上のようなイメージで考えています。
- テキストボックスに商品名の一部を入力して、「検索」ボタンを押す。
- 下のリストボックスに候補薬品一覧が表示される。
- リストボックスにある候補薬品一覧の一つをクリックすると、併用禁忌になっている薬剤の一覧がしたの表に出力される。
ということで、外部キーの設定は、
- TBL_INTERACT.DRUGCD2 → TBL_YAKUJYO.YAKUHINCD
- TBL_INTERACT.SYOJYOUCD → TBL_SSKIJYO.SYOJYOUCD
- 外部キーで参照されるカラムは、プライマリキーである必要があるため、TBL_YAKUJYOテーブルおよびTBL_SSKIJYOテーブルのプライマリキーをYAKUHINCD、SYOJYOUCDにそれぞれ変更。TBL_YAKUJYO_ID、TBL_SSKIJYO_IDを廃止。
- TBL_INTERACTテーブルを以下のように変更。
CREATE TABLE TBL_INTERACT (
TBL_INTERACT_ID SERIAL PRIMARY KEY,
DRUGCD CHAR(9),
DRUGCD2 CHAR(9) REFERENCES TBL_YAKUJYO,
SYOJYOUCD CHAR(7) REFERENCES TBL_SSKIJYO
);
tmiura:~/kinki tmiura$ psql83 -d kinki -f kinki_db.sqlなにやらエラーが出ました。ん〜。どうやら、外部キー制約が破られているらしい。tbl_interact.drugcd2の615101101というレコードがtbl_yakujyo.yakuhincdにないのが原因の様です。実際に両方のテーブルを検索してみて確認したところ間違いなさそうです。ちなみにググって見ると、どうやらいわゆる中止された薬剤のコードにあたるようですね。
psql83:kinki_db.sql:36: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tbl_yakujyo_pkey" for table "tbl_yakujyo"
CREATE TABLE
psql83:kinki_db.sql:42: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tbl_sskijyo_pkey" for table "tbl_sskijyo"
CREATE TABLE
psql83:kinki_db.sql:49: NOTICE: CREATE TABLE will create implicit sequence "tbl_interact_tbl_interact_id_seq" for serial column "tbl_interact.tbl_interact_id"
psql83:kinki_db.sql:49: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tbl_interact_pkey" for table "tbl_interact"
CREATE TABLE
COPY 19747
COPY 992
psql83:kinki_db.sql:53: ERROR: insert or update on table "tbl_interact" violates foreign key constraint "tbl_interact_drugcd2_fkey"
DETAIL: Key (drugcd2)=(615101101) is not present in table "tbl_yakujyo".
ってことで、おそらく他にもたくさんこういったコードが紛れ込んでいる可能性があり、外部キーをつかうならばこの辺を解決しなければならないようです。
解決編は次回へ。
0 件のコメント:
コメントを投稿