4

私は私たちの場所の検査を生成するアプリケーションを書いています。基本的には、健康診断書と考えてください。各「検査」には、一連の質問と回答があります。答えは、数値(1,2,3,4,5-ポイント値を表す)、またはポイントにマップされる複数の選択肢('Yes'、'No')(1はyes、0は0)のいずれかです。いいえ)ポイントにマップされないが、平均化のためにアプリケーション層で使用できる可能性があるフラットテキストの回答。たとえば、ポイントを持たない「ソース温度」のフィールドを作成できますが、今後のレポートに使用できます。

質問は複数の検査フォームで再利用できますが、ポイント値が異なる場合があります。だから答えることができます。

このためのスキーマを理解するのに問題があります。私の本能では、EAVは良い方法だと言っていますが、考えれば考えるほど、データウェアハウスモデルの方が良いと思います。

特に、min_points、max_points、no_pointsを各質問/回答にマッピングするための最良の方法を見つけるのに問題があります。ここで、EAVを使用する必要があると考えています。私は実際にそれに固執しているようなものです。アンケートなどでポイントがない場合や、回答ごとにポイント値が同じ場合は、かなり簡単です。質問表、回答表、入力タイプの定型文表など。ただし、各質問にはポイント値がある場合があり、そのポイント値は、その質問を使用している場所によって変わる可能性があるため、どのように進めるかがわかりません。

したがって、質問の例は次のとおりです。

  • 食べ物は暑かった[はい、いいえ]可能なポイント= 5(はいの場合は5、いいえの場合は0)
  • 食べ物は美味しかった[1,2,3,4,5]可能なポイント=5(1は1、2は2など)
  • マネージャーは当番でした[はい、いいえ]可能なポイント= 5(はいの場合は5、いいえの場合は0)
  • 建物はきれいでしたか[1,2,3,4,5]可能なポイント=10(1の場合は2、2の場合は4、3の場合は6など)
  • スタッフはプロでした[はい、いいえ]可能なポイント= 5(はいの場合は5、いいえの場合は0)
  • 冷凍庫温度[数値テキスト入力]
  • 勤務中のマネージャー[テキスト入力]

すべての回答は異なるデータ型とポイント値を持つ可能性があるため、それらのデータベースを構築する方法がわかりません。

私は考えています(簡潔にするために、他の表、名前、その他のインプの詳細は省略または変更されています)

CREATE TABLE IF NOT EXISTS inspection(
id mediumint(8) unsigned not null auto_increment PRIMARY KEY,
store_id mediumint(8) unsigned not null,
inspection_id mediumint(8) unsigned not null,
date_created datetime,
date_modified timestamp,
INDEX IDX_STORE(store_id),
INDEX IDX_inspection(inspection_id),
FOREIGN KEY (store_id) REFERENCES store (store_id)ON DELETE CASCADE,
FOREIGN KEY (inspection_id) REFERENCES inspection (inspection_id)ON DELETE CASCADE)

CREATE TABLE IF NOT EXISTS input_type(
input_type_id tinyint(4) unsigned not null auto_increment PRIMARY KEY,
input_type_name varchar(255),
date_created datetime,
date_modified timestamp)

CREATE TABLE IF NOT EXISTS inspection_question(
question_id mediumint(8) unsigned not null auto_increment PRIMARY KEY,
question text,
input_type_id mediumint(8),
date_created datetime,
date_modified timestamp)
CREATE TABLE IF NOT EXISTS inspection_option(
option_id,
value)

しかし、ここで私はちょっと立ち往生しています。ポイント、ポイントなし、さまざまなデータ型を考慮して質問回答テーブルを作成する方法がわかりません。

また、店舗から検査などへのマッピングテーブルが必要になることはわかっていますが、質問にとって重要ではないため、ここではすべてを省略しました。

したがって、すべての可能な回答(オプションテーブルから作成されるか、テキストとして入力される)がそのテーブルに格納されている回答のテーブルを作成し、次に「回答」を「質問」にマップするためのマッピングテーブルを作成する必要があります(特定の場合)検査)そしてそこにポイントを保存しますか?

私は正しく考えていません。私はいくつかの助けを使うことができました。

4

1 に答える 1

0

ここに正しい答えも間違った答えもありません。いくつかのアイデアと議論のポイントを投げかけているだけです。

基本的な「単位」は質問ではなく、質問と回答の種類(例: 1-5、テキストなど) のペアであると提案します。Was the food hot / range 1 to 5Was the food hot / text descriptionは非常に異なっているように思えますが、質問を 2 つ (またはそれ以上) の回答タイプに関連付けようとすると気が狂ってしまいます (これらの回答の回答キーは言うまでもなく、今のところ無視してください。後で取り上げます) 。ペアを QnA アイテムと呼びます。あなたは似たようなペアをたくさん作ることになるかもしれませんが、それはあなたが取り組まなければならないものです.

これで、QnA アイテムの "プール" ができました。それらはどのように選択されて使用されますか? 特定のフォーム (またはアンケート) は、プール内のアイテムから作成されますか? それとも、アンケートに記入するたびにランダムに選択されますか? フォームは特定の場所に関連していますか、またはフォームは任意の場所で使用される可能性がありますか? フォームやアンケートを作成する際に、彼らはどのくらいうるさいですか? QnA アイテムがどのように収集/相互に関連付けられ、最終的な結果が得られるかは非常に重要であり、コードを書き直すのが本当に好きでない限り、コードを書き始める前にすべてを解決する必要があります。

QnA 項目が定義されている場合は、その項目の "回答キー" も必要です。これは、特定の回答 (項目の回答の種類に基づく) を測定する手段 (ゼロ、値、値 * 2 など) です。これは明らかに使用方法によって異なります (質問票ごとに異なりますか?質問票が提示される場所によって異なりますか?そうであれば、どのように、またはなぜですか?)標準化された回答キーアルゴリズムはありますか?など)またはこれらも非常に自由な形式ですか?それらがどのように使用されているか、QnA アイテムとどのように関連付けられているかを判断することは、適切なモデリングに不可欠です。

于 2012-07-03T20:00:53.133 に答える