【发布时间】:2015-08-17 22:48:34
【问题描述】:
在设计数据库时,两个表之间存在关系,Job 和 Document。一个Job 可以有多个Documents,但其中一个(并且只有一个)Documents 需要标记为IsCurrent。这并不总是与该Job 关联的最新Document。
在结构上,我可以看到两种方法。
首先是在Job 中添加DocumentId 列,在Document 中添加JobId 列。这会起作用,但会创建一个循环引用:当导入实体框架时,您最终会遇到Job 同时具有Document 和Documents 集合的特殊情况。同样,Document 有一个 Job 和一个 Jobs 集合。
第二种是在Document 表中添加一个IsCurrent 位标志。这会起作用,但逻辑上一个 Job 可以有多个 IsCurrent Documents,这是不允许的。
问题:
1) 我是否认为没有“第三条路”可以摆脱这种困境?
2) 假设不是,哪个更好,为什么?我赞成第二种解决方案,因为它看起来更干净,我们可以通过业务逻辑强制执行单个 IsCurrent。我的同事喜欢前一种解决方案,因为它会导致更简单的 C# 代码和对象引用 - 如果我们重命名外键,它应该避免 Job/Jobs 造成的混淆。
【问题讨论】:
标签: sql database entity-framework database-design relational-database