伊藤と申します。
postgreSQL7.2.2を使用して、Webアプリケーションを制作しています。
テーブル設計で迷っているところがあります。
HTMLのフォームのデータを取り込み、データベースに格納する、
と言う事をしたいのですが、クライアントが自由に
フォームの内容を変えることができるようになっています。
そこで、変わったパターンが出てきてテーブル設計に困っています。
Radioボタンが3つあるとします。
1番目と2番目がチェックされるときは問題ないのですが、
3番目をチェックしたときにはさらに、
テキストボックスに入力を求められる事があるのです。
下記のような場合が問題になります。
====================================
Q2 あなたのすきな食べ物は?
○りんご
○みかん
○その他 ↓下のボックスに入力してください
______________
|______________|
====================================
以下が現状です。
■環境
OS:Turbolinux 7 Server
DBサーバ:postgreSQL
■テーブル
・質問テーブル
・質問選択肢テーブル
・回答テーブル
■キー
質問テーブルの主キー(質問ID)に対して、
質問選択肢テーブルにある外部キーがリレーションします。
質問選択肢テーブルにはシーケンスもあり(選択肢No)、
質問IDと選択肢Noで主キーとしています。
■問題
・例外的な選択肢追加を(ある選択肢に対して並行に)
可能にするには質問選択肢テーブルをどう設計すればいいのか。
・回答テーブルに通常なら選択された値をレコードに
格納するだけだが、
ひとつ項目が増える事もイレギュラー的に発生するので、
回答テーブルどう設計するか。
以上2点です。
長くなって申し訳ありません。
ご教授よろしくお願い申し上げます。
No.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
お答えいただきありがとうございます。
とても丁寧にわかりやすく、
例まで書いていただいてありがとうございます。
答えていただいたお二方とも、
同じ結論ならやはり◆案1、◆案2のどちらかから、
方法を選んだほうがよさそうですね。
この両案でもう少し検討したいと思います。
貴重な意見が聞けて助かりました。
ありがとうございました。
No.1
- 回答日時:
(RecID, Question, Answer)の三つ組みで、親レコードに関連づけるのが、王道でしょうが、
max250列くらい余分に用意するという手も。
PostgreSQLの継承を使えば、表定義も多少手が抜けますし。
お答えいただきありがとうございます。
>(RecID, Question, Answer)の三つ組みで、
>親レコードに関連づけるのが、王道でしょうが、
>max250列くらい余分に用意するという手も。
やはりそうですか。
どちらも検討中です。
画期的な構成は難しそうですね。
貴重なお時間をいただき、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(Microsoft Office) Microsoft Formsについて質問です 作成をしているのですが、 選択肢を用意してその中に詳 2 2023/04/20 15:15
- 教えて!goo もう少しきめ細かい「設定」を希望しますか 5 2023/02/25 10:13
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- PHP Q&Aサイトを作成していてURLの生成方法について迷っているのでアドバイスお願い致します 1 2023/08/10 16:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
まるいテーブル 円い 丸い 漢字...
-
テーブルリンク リンク元を知...
-
テーブルの白く剥がれてるところに
-
会社の飲み会の幹事になり、座...
-
複数テーブルにわたるCOUNT
-
このテーブルで
-
「テーブルに座って……」という...
-
ACCESSで3ファイルを結合して、...
-
置き配された食べ物を袋からど...
-
【PHP】SQL文のSUM関数で出力し...
-
UTF8のテーブルをODBCドライバ...
-
アクセスのリンクテーブル一覧...
-
L2SWはARPテーブルを持っている?
-
2つのテーブルのカウント結果...
-
飲み会で、座敷orテーブルどち...
-
1対1のリレーション(主キー同...
-
DBのテーブルの設計ができず困...
-
ADOのSQLで別テーブルの特定フ...
-
コンボボックスにレコードセッ...
-
オーダーの覚え方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルリンク リンク元を知...
-
L2SWはARPテーブルを持っている?
-
1つのテーブルに同じデータを参...
-
まるいテーブル 円い 丸い 漢字...
-
外部キーだけのテーブル(主キ...
-
【PHP】SQL文のSUM関数で出力し...
-
複数テーブルにわたるCOUNT
-
飲み会で、座敷orテーブルどち...
-
「テーブルに座って……」という...
-
アクセスのリンクテーブル一覧...
-
論理名とコメント構文(?)について
-
会社の飲み会の幹事になり、座...
-
一致するデータのみ削除したい
-
MySQLで複数テーブルを作成する
-
面接のときテーブルが正面に。...
-
オーダーの覚え方について
-
1対1のリレーション(主キー同...
-
お金持ちのテーブル
-
【エクセル】データテーブルの...
-
ACCESS での LEFT JOIN 時の WH...
おすすめ情報