1

ASP.NET MVC 3 (SQL Server 2012 データベース) の Web アプリケーション。

データベースの正規化後、ユーザー プロファイルとプロファイル管理システム用に 3 つのデータベース テーブルがあります。

最初のテーブルにはユーザー プロファイルが含まれています

構造:

UserId      int (primary key)
Ethnicity   int
Height      int
HairColor   int
...

サンプルデータ:

1  1  2  1  3
2  1  3  2  4

2 番目のテーブルには、プロファイル フィールドのリストが含まれています

構造:

FieldId     int
FieldName   nvarchar(20)

サンプルデータ:

1 - Ethnicity
2 - Height
3 - HairColor 

3 番目のテーブルには、プロファイル フィールド オプションのリストが含まれています (プロファイルの各フィールドの DropDownList オプション)

構造:

OptionId    int
OptionName  nvarchar(30)
FieldId     int (external key to FieldId of second table)

サンプルデータ:

1 - Caucasian - 1
2 - Asian - 1
3 - Hispanic - 1
... 
1 - 4"5 - 2
2 - 4"6 - 2

HTMLページでドロップダウンリストを作成するために、dbに1つのリクエストを送信できます。すべてクリアです...

しかし、メンバー プロファイルを要求する必要がある場合、UserProfile テーブルの番号を ProfileFieldsOptions テーブルのオプションとリンクするために、2 つの要求を作成し、アプリケーションでデータを処理する必要があります...

内部結合または別のオプションでは、1 つの複雑な要求を行うことはできません。

さて、質問:

SQL Server for ASP.NET MVC 3 でこのような構造を作成する簡単な方法をご存知でしょうか?

主な要件:

  1. データベースに保存するには、プロファイル フィールドとプロファイル フィールド オプションが必要です。

ありがとう、イゴール。

4

3 に答える 3

1

この問題は、プロファイル フィールド オプションを 3 番目のテーブルから に再配置し、Dictionary<int, string>2 番目のテーブルを削除して、次のようなドロップダウンを使用することで解決しました。

コントローラー/クラス/モデルでは、公開辞書で構成されるクラス BaseConstants を使用します。

public Dictionary<int, string> Ethnicity = new Dictionary<int, string>()
    {{1, "Caucasian"}, {2, "Black"}, ...};

そしてビューで:

@Html.DropDownListFor(model => model.Item, 
    new SelectList((Dictionary<int, string>)ViewBag.Items,"Key", "Value"), 
    "--Select--")
于 2013-01-27T12:10:07.680 に答える
0

オプションが変更されない場合は、それぞれに列挙型を使用してください。

  • デバッグ時にわかりやすい名前が付けられます。
  • プロパティは型付けされるため、何らかの形式の一貫性を保つことができます。あるフィールドから別のフィールドへの偶発的な交換や、フィールドに無効なオプション番号を入力することを防ぎます。

LINQ to SQL は、必要に応じて列挙型を適切に処理できます。

于 2013-01-27T13:41:55.543 に答える
0

フィールドのオプションごとに個別のテーブルを作成します。そのため、Ethnicities、Heights、HairColors というテーブルを分けます。ASP.Net コードでこのテーブルにクエリを実行して、あなたが話している辞書の値を取得します。

利点は、

  • オプション整数をその説明に結合できるため、データベースはコードなしでより読みやすくなります
  • コードを再コンパイルせずにオプションを追加 (およびおそらく非推奨) できる
  • 外部キー制約を使用してデータの一貫性を確保できます
于 2013-01-27T12:55:00.383 に答える