[pgsql-jp: 29404] 効率的なWebアプリケーションの為にDB設計について(長文)

みのむし minoran @ lily.freemail.ne.jp
2003年 3月 14日 (金) 00:57:20 JST


いつもお勉強をさせて頂いております。
みのむしと申します。

たいそうなサブジェクトですが質問内容は初歩的な
事とは思いますが教えてください。

現在、LinuxにApacheとPHP4.2.4を使い、Webアプリケーションを
開発しています。PostgreSQLのバージョンは7.1.3です。

現在以下のようなテーブルがあります。

memberテーブル
member_id | member_name
----------+------------
A0001     |田中さん
A0002     |山田さん
B0001     |鈴木さん
B0002     |高橋さん
B0003     |佐藤さん
C0001     |斉藤さん

placeテーブル
p_id | p_name
-----+-------
1    |京都
2    |鎌倉
3    |浅草

t_groupテーブル
g_id | member_id1 | member_id2
-----+------------+-----------
g1   | A0001      | C0001
g2   | B0002      | C0001
g3   | A0002      | B0003

keiyakuテーブル
keiyaku_id | p_id | g_id
-----------+------+------
20030313001| 1    | g2
20030313002| 3    | g3

という4つのテーブルがあります。
ここでアプリケーション側にkeiyakuテーブルを基本とした一覧を出力させたい
のですがどのようなSQLを実行するのが一番スマートかというので悩んでいます。

期待する結果としては
keiyaku_id  | p_name | member_name1 | member_name2
------------+--------+--------------+-----------
20030313001 | 京都   | 鈴木さん     | 斉藤さん
20030313002 | 浅草   | 山田さん     | 佐藤さん
という感じです。

select
        keiyaku.keiyaku_id,
        place.p_name,
        member.member_name AS member_name1,
        t_group.member_id2
from
        member,
        keiyaku,
        place,
        t_group
where
        t_group.member_id1 = member.member_id and
        t_group.g_id = keiyaku.g_id and
        place.p_id = keiyaku.p_id
;

として
 keiyaku_id  | p_name | member_name1 | member_id2
-------------+--------+--------------+------------
 20030313001 | 京都   | 高橋さん     | C0001
 20030313002 | 浅草   | 山田さん     | B0003
までたどり着く事が出来ましたがmember_id2を名前表示にしたいのです。

いろいろ考えてみてmemberテーブルにg_idカラムを付けようかと思ったのですが
これは既存のDBの部分なので手が入れられません。
何かいい方法があれば教えてください。

またPHPなどのWeb開発では上記のようなケースで一覧表示をさせる
事が多々あるかと思います。
一覧表示をさせたい結果が一回のSQLで得られるのであればその結果を
元にviewを作りviewテーブルをPHP側から見にいかせる方法か、
それとも参照するその都度、その都度で同じような長いSQL文を
実行させる方がよいのか迷っています。

viewテーブルというのは参照元テーブルが更新された場合は
テーブルの再構築をそのたびに行うので処理的にはかなり
負担がかかるものなのでしょうか。

もし負荷がかかりやすいという事であれば一回一回
SQLを走査させる方法しかないように思います。

みなさんはどのようにしておられるのでしょうか。

長くなりましたがよろしくお願いいたします。

-----------------------
みのむし



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