在数据库不良实践中创建导航关系?

时间:2013-06-17 09:23:48

标签: sql-server entity-framework navigation-properties

我正在使用EF4.3 / Sql Server 2008 Web。

我试图创建一个规范化的数据库 - 这是它的一部分:

enter image description here

正如您所看到的,共同因素是它们都是通过BuyerId链接的。在EF中,我可以使用“Buyer.MatchBuyer.MatchNodes”等在这个结构中导航,但是我想知道为了进一步简化此导航而创建额外的关系是否被认为是不好的做法。

例如,在BuyerId上添加LenderMatchNode和Buyer之间的关系。

所有建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我想说在数据库中这不是一个好主意。如果您使用的是实体框架,则可以使用“Table Splitting”来实现相同的功能,而无需使用奇怪的数据库结构。

这是一个很好的教程:

http://weblogs.asp.net/manavi/archive/2011/04/24/associations-in-ef-4-1-code-first-part-4-table-splitting.aspx

Scott Guthrie的博客还有其他人:

http://weblogs.asp.net/scottgu/

编辑:这是我提到的教程:

http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx

您可以查看方案三。我认为这就是你追求的目标。

编辑:Gert Arnolds的评论让我重新思考了一下。

可以如下:

<强>买家

BuyerId
Name
Status
BuyerTypeId
RequestClass
AcceptQuota
TierId
Commission

<强> MatchNode

BuyerId
TierId
Enabled
RuleClass

然后,买方MatchNode和可能是买方的组合密钥有1:N吗?

在EF中,您可以使用上述表格拆分来提供您正在寻找的导航属性。当然它可能不会产生很大的差异,但我想这是你喜欢什么方法的问题。