首页 新闻 会员 周边

数据库设计的疑惑

0
悬赏园豆:20 [已解决问题] 解决于 2014-11-20 09:37

  今天遇到一个问题,一张采购业务单据,业务上需要他有一张采购跟踪单据,实时跟踪这张采购单据的变化信息的变化。 那么数据库上两张单据的对应关系应该是怎么设计比较合理?我认为应该是一对一的关系(1:1 一张采购单只有一张采购跟踪单据)这样设计的,同事说设计成一对多的(设计上设计成一个1:N,编码上严格控制只有一张跟踪单据),我觉得不对,对编码影响挺大的,该如何分析这个问题,求解?

neoshero的主页 neoshero | 初学一级 | 园豆:186
提问于:2014-11-17 11:57
< >
分享
最佳答案
0

1:N的设计具备更高的可扩展性.

举例: 假设已经记录了A,B,C三个时点的变化信息. 现在需要新增一个D时点变化的记录.

1:1的设计,你就需要改动整个表结构了; 1:N的设计不过是多录入一条数据而已.

收获园豆:20
200cc | 菜鸟二级 |园豆:266 | 2014-11-17 16:58

  你说的情况就是我现在遇到的情况,设计上有缺陷,这个跟踪单据是跟踪商品的整个生产过程,是一对一的关系的,单据的时间节点放在一张表,是设计缺陷,就算把任务节点拆分开,也只是把这种跟踪表的任务拆分开,但是实际情况是,生产的单据表 和 跟踪表是1:N 关系,我认为生产单据表和跟踪表示1:1关系,然后跟踪表和时间节点任务表示1:N 关系,这样拓展性更好,所以不太理解他的想法,他也就说程序适应数据库,我觉得不合理想上来问问

neoshero | 园豆:186 (初学一级) | 2014-11-18 10:24
其他回答(2)
1

对编码的影响挺大?怎么大法?你可以问一下同事,为什么要一对多而不是一对一,他应该也是有所考虑的。比如我也曾经这么干过,因为好象Bindingsource+Linq不支持一对一关系的Lazy Loading。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-17 12:04

  问了,他就说让程序适应数据库设计,而不是数据库设计适应程序、 但是业务上,确实也就是一对一的关系,我们使用ef 好像支持了一对一关系哦。

支持(0) 反对(0) neoshero | 园豆:186 (初学一级) | 2014-11-18 10:15

@矿石兽: 按照我的分析,采购和采购跟踪应该是一对多的关系。因为没有必要再建立一张采购跟踪主表,直接用采购跟踪明细表与采购表构成关系即可。

采购跟踪应该是类似这样的

采购单:10456

日期           描述                    经办人

2014-10-1  厂家电话说最近生产压力较大,可能要延迟交货  张三

.....      ...............                 李四

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-18 10:20
0

根据业务需求定

如果只是跟踪单据状态,那么一条记录足以,如果每个状态还有相关审核等等其他附加信息,那么就需要把这个状态提取出来单独一个记录维护

看时机情况而定。

茂茂 | 园豆:2892 (老鸟四级) | 2014-11-17 12:52

这个业务就是记录一次生产的整个过程, 只有一次审核,也就是整个生产过程完结就通过了,业务上没有分开时间节点,都放在一起了,所有时间节点的业务都整合在一起了,设计上其实是有缺陷的,应该是要把时间节点的任务拆分的。

支持(0) 反对(0) neoshero | 园豆:186 (初学一级) | 2014-11-18 10:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册