[pgsql-jp: 37279] 主キーによる高速化について

井口廣踏 iguchi @ auntrust.jp
2006年 6月 23日 (金) 04:38:02 JST


はじめまして。井口といいます。

本日が初投稿になります。
よろしくお願いします。

皆さんの主キー値の選定方法を教えていただきたくメールいたしました。

早速、質問させていただきたいと思います。

化粧品会社のWEBサイトを制作するとします。(※機密保持のため内容は架空のものです)
制作内容は、実店舗で取り扱っている化粧品をカテゴリ別にサイト上で公開するといったものです。
要望として以下があります。
 ・商品は複数のカテゴリに所属可能にしてほしい
 ・商品数が10万点に達しても問題なく稼動させたい
 ・既存ページが1日に10万アクセスあります。

僕の場合、以下のようなテーブル設計をしました

------------------------------
[カテゴリマスタ]
1) カテゴリID(PK)
2) カテゴリ名

[商品マスタ]
1) 商品ID(PK)
2) 商品名
3) カテゴリID

[カテゴリ商品引当データ]
1) カテゴリID(PK)
2) 商品ID(PK)
-----------------------------

しかし、知り合いのSEから以下のような指摘を受けました。

商品をカテゴリ単位で検索することが多いい場合、商品マスタの主キーを「商品ID」「カテゴリID」に変更した
ほうが検索が処理が高速になるそうです。
※カテゴリIDが主キーになるので、主キー設定されていないときに比べ、検索等の処理が高速になるようです。

変更後のテーブルは以下のようになります。
------------------------------
[カテゴリマスタ]
1) カテゴリID(PK)
2) カテゴリ名

[商品マスタ]
1) 商品ID(PK)
2) 商品名
3) カテゴリID(PK) ←主キーに設定

[カテゴリ商品引当データ]
1) カテゴリID(PK)
2) 商品ID(PK)
-----------------------------

ただ、個人的な意見としては、カテゴリIDを主キーとすることに違和感を感じています。
皆さんは、上記のような場合、どのように主キーを設定しているのでしょうか?
今後のデータベース設計の参考にさせていただきたく思います。

以上、お忙しいところ申し訳ございませんが、ご教授ください。




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