0

オンライン調査用のリレーショナル DB を設計しています。

ただし、多次元マトリックスの質問を格納するための最良のリレーショナル データベース設計は何かはわかりません。

たとえば、次の質問があります (申し訳ありませんが、HTML テーブルを挿入することはできません)。

どんな体験をした...

----------| Not friendly| (2) |Very friendly|Length of stay|Visited in the last year?|
Sydney    |radio button |  rb |        rb   |   drop down  |  check box              |   
--------------------------------------------------------------------------------------
New York  |     rb      |  rb |        rb   |   drop down  |  check box              | 
--------------------------------------------------------------------------------------
London    |     rb      |  rb |        rb   |   drop down  |  check box              |
--------------------------------------------------------------------------------------

次の行に沿って何かをする必要があると思いますか、それとももっと良い方法がありますか?

すべての質問を保留するには:

質問
questionID
質問

QuestionMatrix2d
マトリックス2dID
質問ID
サブ質問 ID
サブ質問

QuestionMatrix
questionID
matrix2dID
question_parentID

そして、すべての応答を保持するには:

QuestionResponse
質問ID
response_code

QuestionMatrix2dResponse
questionID
subquestionID
response_code

ご協力ありがとうございました。

4

2 に答える 2

2

ryan1234 には同意しません。これは完全にリレーショナルの問題であり、データベースに入れない理由はほとんどありません。

ただし、ここで達成しようとしていることについて、少し推測する必要があります。あなたはオンラインアンケートを持っているので、複数の人が利用すると思います。データベースは、sessionまたはuserテーブルを使用して対応する必要があります。後者の方が読みやすいので、後者を使用します。

次に、locations(シドニー、ニューヨーク、ロンドン) のリストがあります。このリストは、時間の経過とともに、またはアンケートごとに変更される可能性があると思います.

次に、のセットがありquestionsます。これらが可変または固定であると明示的に述べていません。そのための一連のテーブルを設計したので、それは可変であるはずだと思います。質問はマトリックスではなく、リストであることに注意してください。それらが階層的であっても、マトリックスを構成しません。

最後になりましたが、これらの質問に対する答えが得られました。

usersテーブルを作成しましょう:

user_id  user_name  
1        me
2        somebody else

2 番目の表は単純です。locations

location_id    location_name
1              Sidney
2              New York
3              London

3 番目の表はもう少し複雑です。正直に言うと、見苦しいだけです。しかし、これはデータベース内にデータベースを設計した場合に得られるものであり、代替手段 (DDL を使用するか、その情報を XML/JSON に、またはデータベースの外部に格納する) もきれいではありません。階層的な質問がある場合 (例には表示されていません)、「parent_question_id」列を追加できます。

question_id    question_text      question_type    question_type_info
1              How do you rate    RADIO            0 to 5
2              Length of stay     COMBOBOX         1 day, 2 days, whatever
3              Visited last year  CHECKBOX         

最後に、すべての回答を格納するための 4 番目のテーブルが必要です

user_id    location_id     question_id     value
1          1               1               2          <-- value here means "rating of 2"
1          1               2               5          <-- value here means "5 days"
1          1               3               1          <-- value here means "yes, visited last year"

うん。醜い。質問の固定リストがあれば、きれいなデータベースを提供できます:)

編集:コメントへの回答: 質問を調査にリンクするにはsurveys、どの場所に対してどの質問をするかを定義するテーブルがいくつか必要になります。次のデータベース レイアウトでは、場所のリスト、質問のリスト、および調査名を指定できます。

surveys:

survey_id survey_name
1         Spring 2013 London Travel Survey
2         Spring 2013 Northern Hemisphere Short Survey

survey_questions:

survey_id question_id
1         1
1         2
1         3
2         1

survey_locations:

survey_id location_id
1         1
2         1
2         2

ここに入力した内容は、2 つの調査を提供します。調査 1 では、「ロンドン」という 1 つの場所で 3 つの質問すべてを行います。調査 2 では、ロンドンとニューヨークの両方について 1 つの質問をするだけです。さまざまな場所でさまざまな質問をしたい場合、テーブルのレイアウトはそれに対応する必要がありますが、そのようなシステムは元のテーブルのようなレイアウトには適合しません。

于 2013-02-25T02:20:30.060 に答える
0

これと同様のことを行ったので、これをリレーショナルの問題にしないことを検討することをお勧めします。オブジェクトがあり、それらを JSON のようなものにシリアル化して保存するとどうなるでしょうか?

これをリレーショナルに行うと、テーブルを作成し、アプリケーションで複雑な描画コードを結び付けて、質問/回答が正しい順序で描画されるようにするなど、かなりの時間を費やすことになります.

それ以外の場合は、アプローチを機能させることができると思います。RDBMS で調査を設計するための特効薬はありません。

于 2013-02-25T00:17:00.003 に答える