1

ASP.NET MVC 3(SQL Server 2012 数据库)中的 Web 应用程序。

数据库规范化后,我有三个用于用户配置文件和配置文件管理系统的数据库表。

第一个表包含用户配置文件

结构:

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

样本数据:

1  1  2  1  3
2  1  3  2  4

第二个表包含配置文件字段列表

结构:

FieldId     int
FieldName   nvarchar(20)

样本数据:

1 - Ethnicity
2 - Height
3 - HairColor 

第三个表包含配置文件字段选项列表(配置文件每个字段的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

我可以向 db 发出 1 个请求以在 html 页面中形成下拉列表,一切都清楚......

但是,当我需要请求成员配置文件时,我需要在应用程序中发出两个请求并处理数据,以便将 UserProfile 表中的数字与 ProfileFieldsOptions 表的选项链接起来......

我无法使用 Inner Join 或其他选项提出一个复杂的请求。

现在,问题:

也许您知道在 SQL Server for ASP.NET MVC 3 中制作这种结构的更简单方法?

关键要求:

  1. 配置文件字段和配置文件字段选项需要保存在数据库中。

谢谢,伊戈尔。

4

3 回答 3

1

通过将配置文件字段选项从第三个表重新定位到Dictionary<int, string>,删除第二个表并使用如下下拉列表来解决问题:

在控制器/类/模型中,我使用类 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

为每个字段的选项创建一个单独的表。所以单独的表称为种族,高度,头发颜色。让您的 ASP.Net 代码查询此表以检索您所说的字典的值。

优点是

  • 没有代码,数据库将更具可读性,因为您可以将选项整数加入其描述
  • 无需重新编译代码即可添加(甚至可能不推荐使用)选项
  • 您可以使用外键约束强制数据的一致性
于 2013-01-27T12:55:00.383 回答
0

如果选项永远不会改变,请为每个选项使用一个枚举。

  • 调试时它们将具有描述性名称。
  • 将键入属性,以便您保持某种形式的一致性。它将防止从一个字段意外交换到另一个字段或为字段填写无效的选项编号。

如果您希望使用它,LINQ to SQL 可以很好地处理枚举。

于 2013-01-27T13:41:55.543 回答