2011-08-16 21 views
4

私は、ASP.NET、C#でアプリケーションを構築MVC3とSQL Serverの午前2008格納する変数のデータ

は、フォームは(名前、電子メール、アドレスなど)を記入するユーザに提示されます。 私はアプリケーションの管理者がこのフォームに動的な質問を追加できるようにしたいと考えています。

余分な質問の量と返されるデータのタイプは異なります。 は例えば、管理者が0を追加することができ、質問の次のタイプの1以上:

  1. はあなたに完全な、きれいな駆動liscenceをお持ちですか?
  2. 1から5までのあなたの運転技術を評価してください。
  3. 最後にあなたが長い旅に出た時を記述してください?回答がバイナリなり得ること
  4. 等...

注、(Q.1)、整数(Q.2)またはフリーテキスト(Q.3)。

このようなランダムデータをMS SQLに格納する最良の方法は何ですか?

どんな助力も大いに評価されます。

ありがとうございます。

+4

EAVを使用することを検討してください - 問題がある間は、新しい質問ごとに新しい列を追加するよりもずっとメンテナンスが容易です(IMHO)。私はこれまでにこれについてブログしました:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/what-is-so-bad-about-eav-anyway.aspx私はあなたがデータベース設計とそれをサポートするアプリケーション設計の両方をカバーするために、2つの質問に答えてください。最初にデータベース設計について心配してから、アプリケーションソリューションを攻撃してください。 –

+0

感謝アーロン、私はあなたのブログの記事をチェックアウトします。私はまた、2つの別々の部分に質問を出した(私はそれを聞く前に20分待つ必要がある)。再度、感謝します! –

+0

Nice EAVの記事Aaron。いくつかのコメントによると、以前はudfsのXML列を正常に使用しました。 –

答えて

1

私は、次の列を持つテーブルを作成し、他のすべての値がNULLの適切な列に値と共に変数の名前を格納します。

id:int (primary) 
name:varchar(100) 
value_bool:bit(nullable) 
value_int:int (nullable) 
value_text:varchar(100) (nullable) 
+0

これは正確に私が思いついた解決策でしたが、私は^ _ ^を掲示する前に昼食に行きました。私はあなたがnullをチェックするコーディングロジックで、value_typeを表現するために追加のintを格納することさえできると考えましたが、それは必要ではありません。いずれにしてもうまくいく! –

+0

私はフォームを動的に作成できるGoogleフォームと同様のものを作成するためにこのメソッドを使用しました。 – Caimen

+0

OPには「バイナリ」と記載されていましたが、実際には意味があります(例:yes/noなど)。これに対してint型のカラムをオーバーロードすることができます(型をより明示的にチェックするための追加のカラムを使用することもできます)。 –

1

スペースが問題でない限り、私はVARCHAR(MAX)を使用します。これは最大8,000文字を提供し、数字とテキストを格納します。

編集:実際には以下のようにAaronが指摘しているように、それはあなたに20億の文字(本には十分)を与えるでしょう。 VARCHAR(8000)などを使用して8,000文字まで入力できます。それはVARCHARなので、空のスペースを取ることはありません(0または1は8,000文字分のスペースを取らず、1つだけです)。

+0

この方法の問題は、SQLを使用して特定の値を後で引き出すことができなくなることです。あなたは全体の価値を引き出し、それを解析する必要があります。 – Caimen

+1

VARCHAR(MAX)は、8,000文字ではなく、20億文字を提供します。しかし、これは答えが「1」または「0」でしかないことができる質問のいくつかのために残酷に思えます... –

+0

Aaron、あなたは正しいです、それについては申し訳ありません。 –

関連する問題