c# – 父母和祖母的外键
我有3个名为“Projects”,“Contracts”和“Incidents”的数据库表.该设计用于基于项目的维护系统.客户能够在项目上建立合同以维护各种安装.此外,可能或可能与项目合同无关的孤立事件应该是可报告的,例如有缺陷的安装.
项目与合同具有1对多的关系(每个项目可以有多个合同,或者没有合同).来自事故的记录最终必须可以解析为项目,但并不总是要求合同存在.在某些情况下,项目可能没有任何合同,但它应该能够发生事故. 我们的数据库设计师建议事件持有项目和合同的外键.实际上,这是一种与父母和祖父母分开的关系,以允许没有父记录. 更糟糕的是,合同还引用了另一个表中的“债务人”.因此,在没有合同的情况下,事件也应该能够引用债务人. 我不禁感到提议的方法违反了所有正常形式,并且有可能产生未来的问题,包括成为维护问题,因此我正在寻找一种能够在整个表格中保持完整性的替代解决方案.另外,是否有人熟悉这种方法可能导致的其他问题? 对于它的价值,我是负责编写将与该数据库一起使用的应用程序的开发人员.该项目将在WPF中使用LINQ over SQL创建.一个要求是它应该能够查询项目记录中的所有事件,包括通过合同引用的事件. 我在SO上寻找过类似的问题,尽管有许多处理祖父母的密钥,但它们似乎都不符合我的问题. 解决方法
这是一种更简单的方法.为每个项目制定虚拟合同,用于没有正式合同的事件.该合同将始终用于解决项目.
这简化了数据库设计,但确实引入了其他问题.例如,要查找没有合同的事件,您不会在合同列中查找NULL.你会在合约表中寻找“不是真正的合约”.根据具体情况,这可能是一个更优雅的解决方案.这也解决了Debtor的问题. 这确实提出了另一个问题,即可能涉及多个合同的事件.实际上,您最终可能会朝着需要支持另一个表的方向前进,这是一个事件和项目之间的n-m映射. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Tensorflow的C API中,如何使用Eigen Tensor设置Tensorflo
- ORACLE的OMF管理(表空间,日志文件,控制文件)
- Swift入门学习之一常量,变量和声明
- Flex中TextInput组件用restrict限制某些字符的输入用法
- 在localStorage中存储对象数组并读取
- Flash Builder编译的swf为什么在bin-debug下运行正常,复制
- WSAStartup()函数以及DLL的加载
- 有没有什么办法锁定一个对象在Swift像在C#
- ruby – Sublime Monokai语法高亮显示:如何为方法调用着色
- .NET的SOLID DDD ORM请求(使用干净的实体和存储库)