2011-02-11 12 views
2

this質問を参照すると、私のケースでは、質問はおそらく静的であることを除いてほぼ同じシナリオに直面しています(時々変更されることがありますが、それぞれの質問に対して列を追加するのは良い考えではないと思いますしかし、答えを指定/検索する方法を追加することにしましたが、答えは異なるタイプです。たとえば、答えははい/いいえ、リスト項目、フリーテキスト、リスト項目、またはフリーテキストです。 (その他、具体的にご記入ください)、複数選択可能リストなど動的アンケートを効率的に保存する方法は?

これを実装する効率的な方法はありますか?

答えて

3

Shimmy、私はこの問題に対処する4部構成の記事を書いています。Creating a Dynamic, Data-Drive User Interfaceを参照してください。この記事では、クライアントに保存するデータをユーザーが定義できるようにする方法を説明します。そのため、質問の正確な検査ではありませんが、かなり近いです。つまり、私の記事では、エンドユーザーが格納するデータの種類を定義する方法を示しています。これは、必要な行に沿っています。

次ER図はデータモデルの要点を与える:

ここ

Data model

DynamicAttributesForClientsは、ユーザーが作成したが、ユーザーは自分のクライアントのために追跡したい属性の内容を示す表です。つまり、各属性の値はDataTypeIdで、ブール値属性、テキスト属性、数値属性などのいずれかを示します。あなたの場合、この表は調査の質問を保存します。

DynamicValuesForClientsテーブルには、特定の属性の特定のクライアントに格納されている値が格納されます。あなたの場合、この表は調査の質問に対する回答を保存します。実際の値はsql_variantタイプのDynamicValueカラムに格納され、数値、ビット、ストリングなどのあらゆるタイプのデータをそこに格納することができます。

私の記事では、オプションのプリセットリストから1つのオプションを選択できますが、これを可能にするためにデータモデルを強化するという多肢選択式の質問の処理方法は扱いません。 - 主キー

  • DynamicAttributeId - これらの質問は
  • OptionTextに関連付けられている属性の内容を指定 - オプションのテキスト
    • DynamicListOptionId:あなたは、次の列にDynamicListOptionsという名前の新しいテーブルを作成します

      したがって、複数選択肢のオプションの属性がある場合は、ユーザーインターフェイスのドロップダウンリストに、クエリから返されたオプションを設定します。

      SELECT OptionText 
      FROM DynamicListOptions 
      WHERE DynamicAttributeId = ... 
      

      最後に、あなたは彼らが選択した(または、彼らは項目を選択しなかった場合NULLを使用)listオプションを記録するためにDynamicValuesForClients.DynamicValue列で選択DynamicListOptionId値を格納します。

      記事を読んでください。完全なデータベースとそのモデルを含む完全なデモをダウンロードできます。また、このシリーズを構成する4つの記事では、データモデルを詳細に調査し、ユーザーに動的属性を定義させるためのWebベースの(ASP.NET)ユーザーインターフェイスの構築方法、データ入力用の表示方法などを示します。 。

      ハッピープログラミング!

    +0

    また、私はリスト項目を含めるでしょうか(つまり、答えはプリセットリストから来なければならないという属性+ "その他" - 私の質問をお読みください) – Shimmy

    +0

    @Shimmy:多肢選択式の質問。ありがとう –

    2

    ​​

    これはまさにあなたに合うが、ここで私は私のパートタイムの仕事で持っているものだしない場合があります。

    質問表、回答表、および調査表があります。新しいアンケートごとにアンケートを作成します(アンケートは一意ですが、質問と回答は多く繰り返されます)。私は、回答者に関するいくつかの情報を含む回答者テーブルを持っています(そして、それはまた、調査テーブルにリンクしており、図でそれを忘れています)。また、回答者と調査ビルダーをリンクする回答表もあります。これはおそらく最善の方法ではありませんが、それは私のために働く方法です、そしてそれはかなり速く働きます(私たちは応答テーブルで約1mill +で、夢のように扱います)。

    このモデルでは、再利用可能な質問、再利用可能な回答(多くの質問で「はい」と「いいえ」を使用)、かなりスリムな応答表が得られます。

    +0

    ありがとう。あなたの答えは私の頭の中で類似のものを設計することに役立ちました。乾杯! – Jeremy

    関連する問題