- ベストアンサー
データベースのフィールドそのものを自由に定義できるテーブル設計とは
はじめまして。 この度、ユーザからの入力をデータベースに保存する複数アンケートフォームを作成しようとしています。 その際、各アンケートフォームごとに入力項目名、入力タイプ好きな数だけ管理側から設定できる仕様です。 このような通常フィールド(列)となる部分の名称やデータタイプを自由に設定できるデータベース設計がうまくいきません。現場ではどのようにしてやられてるのでしょうか? 私が思いつく限りでは ---------------------- アンケートフォームテーブル ・アンケートフォーム番号(PK) ・アンケート名称 ---------------------- 項目雛型テーブル ・項目番号(PK) ・データタイプ ---------------------- 項目実体 ・アンケートフォーム番号(PK) ・項目番号(PK) ・項目名称 ・表示状態 ---------------------- 上記のような構造にした場合、ユーザ毎のアンケートデータを保存するテーブル構造が思いつきません。 作成できる項目数の限度を30に決めて、予め30フィールド、テキスト型のようなものを用意しておくのも狭い利用範囲になる気がしますが・・・ アドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
項目名などの情報の定義情報もDBに保存するということですね。 定義情報を保存するテーブルと、その定義に従って保存されるデータを保存するテーブルを作るのが常套手段です。 今回の場合は、アンケートフォームと項目の2階層あるため、私なら ---------------------- アンケートフォーム定義テーブル ・アンケートフォーム定義番号(PK) ・アンケートフォーム名称 ---------------------- 項目定義テーブル ・アンケートフォーム定義番号(PK) ・項目定義番号(PK) ・項目名称 ・データタイプ ・表示状態 ---------------------- アンケートフォームデータテーブル ・ユーザ番号(PK) ・アンケートフォーム定義番号(PK) ・登録日時 ---------------------- 項目データテーブル ・ユーザ番号(PK) ・アンケートフォーム定義番号(PK) ・項目定義番号(PK) ・入力値 という感じです。 ここで問題になるの入力値のデータ型ですが、 2通り考えられます。 1、文字列型で定義しておき、数値型や日付型の場合は文字列型に変換して登録する。 2、文字列型、数値型、日付型の3つの列を用意し、定義によって適宜登録する列を変更する。 読み出し(SELECT)の場合は上記の逆となります。どちらかというと1の方が楽だと思います。
その他の回答 (1)
- はなおか じった(@Jitta)
- ベストアンサー率42% (69/161)
XMLデータベース(参照URL) SQL Server2000やOracle8i以上(9iからかな?)なら、XMLデータ形式
お礼
ありがとうございます。 RDMSのみで考えようとしなければ様々な方法があるものですね。 多次元データベースを含めいろいろ試していきたいと思います。 ためになりました。 またの機会にアドバイアスお願いします。
補足
パーフェクトに回答いただきましてありがとうございます。納得しました。 2点補足で教えてください。 ●このようなテーブル構造の際に、DBから抽出したユーザのアンケート(いくつかの項目をピックアップし)を一行一ユーザとしてテーブルの表で表示したい場合、SQL文としてはどのようなものが最適でしょうか?最終的にはプログラム側では一ユーザのアンケートを一配列に納めた形で取り出したいのですが。。。 ●このような構造にした場合、レコード数が アンケート数 X 項目数 となり例えば10万件の回答がありそのアンケートフォームが30項目ある場合は、300万レコードとなりますが、期間限定ではない仕様の場合に運用上、オラクルのようなしっかりしたDBではないと耐えうるものにはならないのでしょうか?(フリーのMYSQL等では無理がありますでしょうか?) 宜しくお願いします