Code Bye

财务表不知道怎么设计了,求指点

开发CRM系统,财务部分设计的时候涉及到财务表的设计
首先是合同表,合同会关联财务表,某个合同可能会多次到账,财务全款后,才能做后续的事情
现在的问题是,
1、在合同表里设置一个财务状态的字段,每次更新财务的时候修改这个状态,这样读取合同数据的时候就能了解财务状况。
2、考虑到合同后续执行的前提条件较多,可能还会有其他的约束,如材料能否齐全、人员能否到位等,假如在合同中添加各个约束条件的状态,后期增加或减少约束条件,合同表都需要改变。但是没有相应约束状态,每次读取合同数据都需要计算各个约束状态,数据库和程序后台开销都很大。
现在没有好的设计方案,请给予指点,谢谢。
解决方案

40

按Oracle的大师Tomas Kyte的Effective Oracle by Design的说法,最好的设计是跟随你的需要。
既然你需要约束的结果,那么就给合同关联各个子功能的结果。
引用 LZ kevinskang 的回复:

开发CRM系统,财务部分设计的时候涉及到财务表的设计
首先是合同表,合同会关联财务表,某个合同可能会多次到账,财务全款后,才能做后续的事情
现在的问题是,
1、在合同表里设置一个财务状态的字段,每次更新财务的时候修改这个状态,这样读取合同数据的时候就能了解财务状况。

相当于财务要有一个summary,这个summary假如只是合同才会用,就可以合并进合同里。

引用 LZ kevinskang 的回复:

2、考虑到合同后续执行的前提条件较多,可能还会有其他的约束,如
材料能否齐全、
人员能否到位等,
假如在合同中添加各个约束条件的状态,后期增加或减少约束条件,合同表都需要改变。

首先,假如决定合并进合同里,那么合同表的alter也没什么可说,是本分工作。
接着,有很多后续的扩展,也可以考虑把这些约束从拿出来。

引用 LZ kevinskang 的回复:

但是没有相应约束状态,每次读取合同数据都需要计算各个约束状态,数据库和程序后台开销都很大。
现在没有好的设计方案,请给予指点,谢谢。

不用这么非黑即白的考虑问题。
具体来说本人觉得有两种折中设计,还是要看需求。
1 子功能独立内聚
在每个子功能里都加一个master表或summary表,描述总体情况。
例如
对于合同的应付、应收、人员、等等,都有合同的ap_ ar_ employee_ summary,由这些summary存contract_id来关联到合同
2 汇总检查相对内聚
做一个contract_validation表,存储各个功能的validation结果,每个子功能的结果占一个字段,这个表,再关联到合同上
不过背着抱着一样沉。假如想彻底不alter table,要不一开始把全部列做出来,要不就按行存。不过哪一种都是反范式设计,也就是说以丧失RDBMS建模的代价来换。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明财务表不知道怎么设计了,求指点