プロが教える店舗&オフィスのセキュリティ対策術

伊藤と申します。
postgreSQL7.2.2を使用して、Webアプリケーションを制作しています。
テーブル設計で迷っているところがあります。

HTMLのフォームのデータを取り込み、データベースに格納する、
と言う事をしたいのですが、クライアントが自由に
フォームの内容を変えることができるようになっています。

そこで、変わったパターンが出てきてテーブル設計に困っています。

Radioボタンが3つあるとします。
1番目と2番目がチェックされるときは問題ないのですが、
3番目をチェックしたときにはさらに、
テキストボックスに入力を求められる事があるのです。

 下記のような場合が問題になります。
====================================
Q2 あなたのすきな食べ物は?

○りんご
○みかん
○その他 ↓下のボックスに入力してください
 ______________
|______________|

====================================

以下が現状です。

■環境
OS:Turbolinux 7 Server
DBサーバ:postgreSQL

■テーブル
・質問テーブル
・質問選択肢テーブル
・回答テーブル

■キー
質問テーブルの主キー(質問ID)に対して、
質問選択肢テーブルにある外部キーがリレーションします。
質問選択肢テーブルにはシーケンスもあり(選択肢No)、
質問IDと選択肢Noで主キーとしています。

■問題
・例外的な選択肢追加を(ある選択肢に対して並行に)
 可能にするには質問選択肢テーブルをどう設計すればいいのか。
・回答テーブルに通常なら選択された値をレコードに
 格納するだけだが、
 ひとつ項目が増える事もイレギュラー的に発生するので、
 回答テーブルどう設計するか。

以上2点です。

長くなって申し訳ありません。
ご教授よろしくお願い申し上げます。

A 回答 (2件)

きちんと正規化を考えるのであれば案2、案1も実際は十分ありえる設計


かと思います。

質問テーブル
フィールド名 /内容
--------------------------------------------------------------
質問ID /2
質問内容 /あなたのすきな食べ物は?

質問選択肢テーブル
質問ID /2
選択肢No /3
選択肢 /その他 ↓下のボックスに入力してください
BOX数 /1

◆案1
1選択肢に対し複数BOXあれば複数の「回答」フィールドを用意
回答テーブル
質問ID /2
選択肢No /3
回答1 /ボックス入力内容1(ボックス無の場合はNULL)
回答2 /ボックス入力内容2(ボックス無の場合はNULL)
回答3 /ボックス入力内容3(ボックス無の場合はNULL)
回答4 /ボックス入力内容4(ボックス無の場合はNULL)


◆案2
回答テーブル1
質問ID /2
選択肢No /3

回答テーブル2
ボックス有りの場合のみレコード作成
1選択肢に対し複数BOXあれば複数行作成
質問ID /2
選択肢No /3
回答ID /1
回答 /ボックス入力内容1
    • good
    • 0
この回答へのお礼

お答えいただきありがとうございます。
とても丁寧にわかりやすく、
例まで書いていただいてありがとうございます。

答えていただいたお二方とも、
同じ結論ならやはり◆案1、◆案2のどちらかから、
方法を選んだほうがよさそうですね。
この両案でもう少し検討したいと思います。

貴重な意見が聞けて助かりました。
ありがとうございました。

お礼日時:2002/09/27 13:40

(RecID, Question, Answer)の三つ組みで、親レコードに関連づけるのが、王道でしょうが、


max250列くらい余分に用意するという手も。
PostgreSQLの継承を使えば、表定義も多少手が抜けますし。
    • good
    • 0
この回答へのお礼

お答えいただきありがとうございます。

>(RecID, Question, Answer)の三つ組みで、
>親レコードに関連づけるのが、王道でしょうが、
>max250列くらい余分に用意するという手も。
やはりそうですか。
どちらも検討中です。
画期的な構成は難しそうですね。

貴重なお時間をいただき、ありがとうございます。

お礼日時:2002/09/27 13:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す