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
我可以向数据库发出1个请求,以便在html页面中形成下拉列表,全部清除......
但是,当我需要请求成员配置文件时,我需要在应用程序中发出两个请求并处理数据,以便将UserProfile表中的数字与ProfileFieldsOptions表的选项相关联...
我不能使用Inner Join或其他选项发出一个复杂的请求。
现在,问题:
也许您知道在SQL Server for ASP.NET MVC 3中使用这种结构的更简单方法吗?
关键要求:
谢谢,伊戈尔。
答案 0 :(得分: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--")
答案 1 :(得分:0)
为每个字段的选项创建一个单独的表。所以单独的表名为Ethnicities,Heights,HairColors。 让您的ASP.Net代码查询此表以检索您所说的字典的值。
优点是
答案 2 :(得分:0)
如果选项永远不会改变,请为每个选项使用枚举。
如果您希望使用它,LINQ to SQL可以正常处理枚举。