2008年8月23日土曜日

データベースのセッティング(1) -併用禁忌データベース-

PostgreSQLにデータベースを作成し、各マスターデータを流し込んでいきます。

まずは、postgreSQLにtmiuraアカウントを作成しtmiuraアカウントで"kinki"データベースを作成します。
tmiura:/opt/local/lib/postgresql83/bin tmiura$ su postgres
Password:
tmiura:/opt/local/lib/postgresql83/bin postgres$ ./createuser tmiura
Shall the new role be a superuser? (y/n) y
tmiura:/opt/local/lib/postgresql83/bin postgres$ exit
exit
tmiura:/opt/local/lib/postgresql83/bin tmiura$ ./createdb kinki

つぎに、kinkiデータベースに流し込むデータのためのテーブルを作成していきます。
日本医師会が公開しているマスタデータは、2つのファイルからなっています。「症状措置機序マスタ」と「相互作用テーブル」です。それぞれのファイル本体とその構造は、こちらのサイトから入手できます。ちなみに今回使用したファイルは、
  • symptom20060224.tab
  • interaction20060224.tab
です。最新版の様ですが、日付が2年以上前なのが気になりますが、あまり深い事は考えず、すすんでいきたいと思います。
ただし、同ページには詳しいテーブルの情報が載っていません。例えば、「症状措置機序マスタ」の「症状・措置」および「作用機序」フィールドにどの程度varcharで割り当てれば良いか分かりません。で、いろいろ調べてみたところ、じつはこれらの情報はORCAのマスタに含まれているようでして、ORCAのデータベース構造は、こちらのサイトで公開されています。ここにある、「日医標準レセプトデータベース仕様書第15版(速報版)」のpp.172-174を参考(というかそのまま)にテーブルを作成する事にしました。
ORCAをインストールされている方は、そのデータベースを利用すれば、この辺りの作業は必要ない事になります。てか、ORCAに併用禁忌薬検索の機能は実装されてるのかな?

という事で、以下の内容のファイル"kinki_db.sql"を作成します。
CREATE TABLE TBL_INTERACT (
TBL_INTERACT_ID SERIAL PRIMARY KEY,
DRUGCD CHAR(9),
DRUGCD2 CHAR(9),
SYOJYOUCD CHAR(7)
);

CREATE TABLE TBL_SSKIJYO (
TBL_SSKIJYO_ID SERIAL PRIMARY KEY,
SYOJYOUCD CHAR(7),
SYOJYOU VARCHAR(2048),
SAYOKIJYO VARCHAR(2048)
);
そして、psqlを実行しCOPY句を用いてデータを流し込みます。
tmiura:‾/kinki tmiura$ psql83 -d kinki -f kinki_db.sql
psql83:kinki_db.sql:6: 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:6: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tbl_interact_pkey" for table "tbl_interact"
CREATE TABLE
psql83:kinki_db.sql:13: NOTICE: CREATE TABLE will create implicit sequence "tbl_sskijyo_tbl_sskijyo_id_seq" for serial column "tbl_sskijyo.tbl_sskijyo_id"
psql83:kinki_db.sql:13: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tbl_sskijyo_pkey" for table "tbl_sskijyo"
CREATE TABLE
ということで、無事テーブルができたようです。
次にデータを流し込んでいきます。
まず、psqlを起動し、COPYコマンドでTABファイルからデータを読み込みます。
tmiura:‾/kinki tmiura$ psql83 kinki
Welcome to psql83 8.3.3, the PostgreSQL interactive terminal.

Type: ¥copyright for distribution terms
¥h for help with SQL commands
¥? for help with psql commands
¥g or terminate with semicolon to execute query
¥q to quit

kinki=# ¥d
List of relations
Schema | Name | Type | Owner
--------+----------------------------------+----------+--------
public | tbl_interact | table | tmiura
public | tbl_interact_tbl_interact_id_seq | sequence | tmiura
public | tbl_sskijyo | table | tmiura
public | tbl_sskijyo_tbl_sskijyo_id_seq | sequence | tmiura
(4 rows)

kinki=# COPY tbl_interact(DRUGCD, DRUGCD2, SYOJYOUCD) FROM '/Users/tmiura/kinki/interaction20060224.TAB';
COPY 56040
kinki=# SELECT * FROM tbl_interact limit 10;
tbl_interact_id | drugcd | drugcd2 | syojyoucd
-----------------+-----------+-----------+-----------
1 | 611140322 | 610432038 | S000723
2 | 611140322 | 610421337 | S000723
3 | 611140323 | 610432038 | S000723
4 | 611140323 | 610421337 | S000723
5 | 611140764 | 610432038 | S000723
6 | 611140764 | 610421337 | S000723
7 | 611140838 | 610432038 | S000723
8 | 611140838 | 610421337 | S000723
9 | 611140762 | 610432038 | S000077
10 | 611140762 | 610421337 | S000077
(10 rows)

kinki=# COPY tbl_sskijyo(SYOJYOUCD, SYOJYOU, SAYOKIJYO) FROM '/Users/tmiura/kinki/symptom20060224.TAB';
COPY 992

日本医師会から提供されているファイルはShift_JISらしいのですが、この辺あまり考えずに流し込んでしまいました。一応psql上でSELECTしてみましたが、ターミナル上では日本語も文字化けしていないようですので、このまますすんでみます。以前にMacOSXのターミナル文字コードをShift_JISに変更していたためだと思いますが、問題が出た時点でここまで戻れば良いでしょう。

0 件のコメント: