首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否应该对映射表使用复合键,该表也用于外键?

我是否应该对映射表使用复合键,该表也用于外键?
EN

Stack Overflow用户
提问于 2009-07-23 21:00:33
回答 2查看 982关注 0票数 2

我正在使用ASP.NET和实体框架来创建一个网站。我目前有一个地图表,用于许多到多个之间的关系.比方说用户和足球队。所以:

用户

团队

UserTeams

第1部分:对映射表的主键使用复合键是最佳实践吗?换言之:

UserTeams

PK UserId

PK TeamId

PreferenceId

第2部分:警告是我还有另一个表。让我们称之为"UserTeamPredictions“,它存储用户对给定团队每年的预测。该表有一个指向映射表的外键。所以看起来是这样的:

UserTeamPredictions

PK UserTeamPredictionId

FK UserId

FK TeamId

预测PredictionYear

在实体框架中,这似乎很好,但是,当引用第三方控件中的关系时,我遇到了一些问题,我像Telerik一样使用这些关系。尽管它可能不是理想的数据设置,但我是否应该更改表结构/关系,以便更容易地在代码中使用数据绑定和其他东西?

更改是在UserTeams映射表中添加一个整数主键,允许UserTeamPredictions表直接引用该键,而不是像当前那样通过复合键:

UserTeams

PK UserTeamId

FK UserId

FK TeamId

PreferenceId

UserTeamPredictions

PK UserTeamPredictionId

FK UserTeamId

预测PredictionYear

你觉得呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-23 21:05:22

我会选择不去。我将使用一个代理键,并在UserId和TeamId列上设置一个唯一的索引。当有两个以上的键时,我真的厌倦了复合键,而不是混合了复合键和代理键,我选择在可能的情况下使用所有的代理键,没有意义的自动递增键。

这给了您在联接方面的良好性能,并且意味着您始终知道给定表(表名+ ID)的键,而不必引用模式。有些ORM工具只能在单列下正常工作,而不是组合键。

票数 2
EN

Stack Overflow用户

发布于 2009-07-23 21:06:38

你应该改变它。搜索堆栈溢出以讨论“自然密钥”--几乎所有人都认为代理键更好,特别是在使用实体生成时。一般情况下,自然键或复合键不能很好地与实体框架样式DAL层一起使用。例如,Lightspeed和Subsonic都要求有一个唯一的列作为PK.在它的当前版本中,Lightspeed甚至坚持您的列被称为"Id",尽管这将改变下一个版本。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1174469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档