[PHP-users 10031] Re: 複数選択項目の効率の良い管理方法について

Mashiki php-users@php.gr.jp
Thu, 12 Sep 2002 09:59:26 +0900


 Mashikiです。

>アンケートなどでよくある複数選択項目を
>DB で効率良く管理する方法について、
>アドバイスをいただければと思います。
>
>例えば、
>
>あなたのお持ちの周辺機器について教えて下さい。
>
>	□ デジタルカメラ
>	□ イメージスキャナ
>	□ プリンタ
>
>ような項目があったとして、どのように保持すれば、
>例えば、悩みに、たるみかむくみを選んだ人、というような検索が、
>高速に可能になるのでしょうか。

他のRDBでも使いたいということであれば

ユーザー表
 ユーザーID(主キー)
 ユーザー名
  :
  :

アイテム表
 アイテムID(主キー)
 アイテム名
  :
  :

以外にユーザーとアイテムの所有関係を
記述する3番目の表を

持ち物表
 ユーザーID(主キー)
 アイテムID(主キー)

なるクロス表を作成し、持ち物表に
アイテムID−ユーザーID順のインデックスを
はるというのが素直なRDBのアプローチかと思います。
持ち物表に追加すればアンケート項目など自由に
増やすことが可能です。
(検索の目的でしか使わないのであれば、
 所有者表というアイテムID−ユーザーID
 の主キーのフィールドをもつ表を作れば
 主キーが検索時のインデックスになります)

Select ユーザーID, ユーザー名,・・・
  from ユーザー表
  join 持ち物表 using(ユーザーID)
  where アイテムID = xxx

と検索できます。