设计数据库时,两个表之间存在关系,即Job
和Document
。一个Job
可以有多个Documents
,但这些Documents
中的一个(并且只有一个)需要标记为IsCurrent
。这并不总是与Job
相关的最新Document
。如何使用“是当前”要求实现一对多关系
在结构上,我可以看到两种方法。
第一种方法是将DocumentId
列添加到Job
,将JobId
列添加到Document
。这将起作用,但会创建一个循环引用:当导入到实体框架中时,最终会出现Job
同时具有Document
和Documents
集合的特殊情况。同样,Document
同时具有Job
和Jobs
集合。
第二种方法是在Document
表中添加一个IsCurrent
位标志。这将起作用,但是在逻辑上使作业具有多个IsCurrent
Documents
,这是不允许的。
问题:
1)我是正确的思维有没有“第三条道路”摆脱这种困境的?
2)假设没有,哪个更好,为什么?我赞成第二个解决方案,因为它看起来更清洁,我们可以通过业务逻辑强制执行单个IsCurrent
。我的同事主张以前的解决方案,因为它会导致更简单的C#代码和对象引用 - 如果我们重命名外键,它应该避免由Job/Jobs
创建的混淆。
太好了,谢谢。我认为过滤的索引是性能工具 - 我不知道它们可以用来强制执行完整性。 –
@MattThrower - 如果你仔细想想,*任何*唯一索引至少在某些方面强制执行完整性。 –
这么简单,如此优雅......明亮等等:总是阅读**所有**工具的使用文档。 – tschmit007