[pgsql-jp: 33058] 複数のシステムをまたがるデータを管理する手法

kenbooit @ excite.co.jp kenbooit @ excite.co.jp
2004年 5月 31日 (月) 22:32:47 JST


こんにちは。島田と申します。

PostgreSQLというよりはシステムに関する質問になってしまうのですが、
よろしくお願い致します。

要約すると現在下のようなマスターテーブルを使った、
社員の電話番号管理システムがあるとします。

--- tel ---
shain_id int [PK]
name   text
number  int

更に勤怠用のシステムに利用する認証テーブルが、
別ホストであります。

--- timecard ---
shain_id int [PK]
name   text
password text

更にWindowsの情報を管理するシステムがあったりもします。

--- windows_domain ---
shain_id     int [PK]
username     text
windows_password text

今、考えているのは、3つのホストと疎通性のある別ホストに
社員の全ての情報を管理者が閲覧、更新することができる
インターフェイス(PHP)を作ろうというものです。

以下のような案で、容易に実現できてしまうので、それはそれでいいのですが、
よりよい方法があるのではないかと何となく思っています。

--- 仮案 ---

tel テーブルを社員情報を管理するマスターテーブルとする。
--- tel ---
shain_id int
name   text
number  int
password    text --- timecard ---
username     text --- windows domain ---
windows_password text --- windows domain ---
  ・
  ・
  ・
※上記3つの他、新たに社員情報を必要とするようなシステムがでてきた場合には、
ひたすら「ALTER TABLE ADD COLUMN」していく。

インターフェイスとなるホストはPHPインターフェイスを使って、
tel テーブルに対して pg_fetch_result して情報を表示。
何か変更した場合には、PHPスクリプト内で各ホストのDBにUPDATEする記述があるので、
tel のデータが変更されると共に、各テーブルも変更される。

例)windows_domain のパスワードを変更したい。
・インターフェイスホストからtelテーブルを叩いて、情報を表示。
・windows_domainのパスワードを変更
 ・telテーブル更新
 ・windows_domainテーブル更新
 ・timecardテーブル更新
  (何も更新してなくてもUPDATEのクエリーは走る)



長々と申し訳ございません。
tel テーブルは本来は電話番号を管理するテーブルですから、

1. 例えば、あえてこんな風にしてしまうのは不細工とはいえ、ありなのか?

telが入っているデータベース内にテーブルをばらばらにして設ける。
pg_fetch_resultするときは結合して表示。

--- tel ---
shain_id int [PK]
name   text
number  int
--- timecard ---
shain_id int [PK]&FK tel(shain_id)
name   text
password text
--- windows_domain ---
shain_id     int [PK]&FK tel(shain_id)
username     text
windows_password text

2. 継承?

3. そもそもPostgreSQLじゃなくて、他の方法を使うべきでは?例えばXMLとか?


システム開発者としては駆け出しな者で、XMLにしても
XML=異なるシステム間の連携なんかには使ったりすると聞いたことがある、
程度のスキルなので、自分がやろうとしている案で問題がないかどうかの判断がつきません。

私だったら、例えばこうする!など
よろしければご指導頂ければと思います。
よろしくお願い致します。



pgsql-jp メーリングリストの案内