加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 父母和祖母的外键

发布时间:2020-12-15 22:10:02 所属栏目:百科 来源:网络整理
导读:我有3个名为“Projects”,“Contracts”和“Incidents”的数据库表.该设计用于基于项目的维护系统.客户能够在项目上建立合同以维护各种安装.此外,可能或可能与项目合同无关的孤立事件应该是可报告的,例如有缺陷的安装. 项目与合同具有1对多的关系(每个项目可
我有3个名为“Projects”,“Contracts”和“Incidents”的数据库表.该设计用于基于项目的维护系统.客户能够在项目上建立合同以维护各种安装.此外,可能或可能与项目合同无关的孤立事件应该是可报告的,例如有缺陷的安装.

项目与合同具有1对多的关系(每个项目可以有多个合同,或者没有合同).来自事故的记录最终必须可以解析为项目,但并不总是要求合同存在.在某些情况下,项目可能没有任何合同,但它应该能够发生事故.

我们的数据库设计师建议事件持有项目和合同的外键.实际上,这是一种与父母和祖父母分开的关系,以允许没有父记录.
另一种方法是创建一个“虚拟”合同.这两种方案都没有我的偏好.

更糟糕的是,合同还引用了另一个表中的“债务人”.因此,在没有合同的情况下,事件也应该能够引用债务人.

我不禁感到提议的方法违反了所有正常形式,并且有可能产生未来的问题,包括成为维护问题,因此我正在寻找一种能够在整个表格中保持完整性的替代解决方案.另外,是否有人熟悉这种方法可能导致的其他问题?

对于它的价值,我是负责编写将与该数据库一起使用的应用程序的开发人员.该项目将在WPF中使用LINQ over SQL创建.一个要求是它应该能够查询项目记录中的所有事件,包括通过合同引用的事件.

我在SO上寻找过类似的问题,尽管有许多处理祖父母的密钥,但它们似乎都不符合我的问题.

解决方法

这是一种更简单的方法.为每个项目制定虚拟合同,用于没有正式合同的事件.该合同将始终用于解决项目.

这简化了数据库设计,但确实引入了其他问题.例如,要查找没有合同的事件,您不会在合同列中查找NULL.你会在合约表中寻找“不是真正的合约”.根据具体情况,这可能是一个更优雅的解决方案.这也解决了Debtor的问题.

这确实提出了另一个问题,即可能涉及多个合同的事件.实际上,您最终可能会朝着需要支持另一个表的方向前进,这是一个事件和项目之间的n-m映射.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读