c# – 父母和祖母的外键

c# – 父母和祖母的外键,第1张

概述我有3个名为“Projects”,“Contracts”和“Incidents”的数据库表.该设计用于基于项目的维护系统.客户能够在项目上建立合同以维护各种安装.此外,可能或可能与项目合同无关的孤立事件应该是可报告的,例如有缺陷的安装. 项目与合同具有1对多的关系(每个项目可以有多个合同,或者没有合同).来自事故的记录最终必须可以解析为项目,但并不总是要求合同存在.在某些情况下,项目可能没有任何合 我有3个名为“Projects”,“Contracts”和“IncIDents”的数据库表.该设计用于基于项目的维护系统.客户能够在项目上建立合同以维护各种安装.此外,可能或可能与项目合同无关的孤立事件应该是可报告的,例如有缺陷的安装.

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

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

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

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

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

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

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

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

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

总结

以上是内存溢出为你收集整理的c# – 父母和祖母的外键全部内容,希望文章能够帮你解决c# – 父母和祖母的外键所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存