业务表 拆分 or 合并

zhuxianguo 2011-11-04 12:26:33
呵呵,一个四年前的问题,现在依然有些疑问,看看哪位可以指点一二
现在有的业务,下面的表都是主从表,只是列出主表,为了简便说明,当然数据量为中小企业,假设为100w以下级别
第一种拆分方案:
订单(单号,订货数,配货数,仓库编号,客户编号,日期,状态)
返货单(单号,计划返货数,实际返货数,仓库编号,客户编号,返货原因,日期,状态)
入库单(单号,入库数,仓库编号,供应商编号,日期,状态)
转仓单(单号,转仓数,转出仓编号,转入仓编号,日期,状态)
第二种合并方案:
分析这些业务有的共同点,调出方和调入方,现在考虑把这些单据合并成为一个表,通过一个字段(单据类型)来区分
单据表(单号,数量,调出方编号,调入方编号,日期,状态,单据类型)
这样的话原来的主从表共8个将减少到2个表,可以避免第一种设计表数据不均衡的现象,有得表数据量很小,有的表很大

按第二种方案,还有一个问题,在订单中是有订货数和实际配货数,也有两种结构
第一种:订单(单号,订货数,配货数)
第二种:订单(单号,引用单号,数量)
...全文
97 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-11-04
  • 打赏
  • 举报
回复
感觉合并起来不妥.
一是,你的几个表属性数目不同,合并起来有些列是空值,会有冗余.
二是,你的几个表的合并属性看上去相似,但实质上不同,合并后查询起来需要用另加条件语句来区别它们.
三是,合并到同一表后,在进行查询时,要对合并表进行多余的查询筛选,相比于分表存储,会多花额外的开销.
四是,合并后,数据处理逻辑更复杂,不利于简化程序.
快溜 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhuxianguo 的回复:]
引用 1 楼 qianjin036a 的回复:

感觉合并起来不妥.
一是,你的几个表属性数目不同,合并起来有些列是空值,会有冗余.
二是,你的几个表的合并属性看上去相似,但实质上不同,合并后查询起来需要用另加条件语句来区别它们.
三是,合并到同一表后,在进行查询时,要对合并表进行多余的查询筛选,相比于分表存储,会多花额外的开销.
四是,合并后,数据处理逻辑更复杂,不利于简化程序.
……
[/Quote]有道理
zhuxianguo 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qianjin036a 的回复:]

感觉合并起来不妥.
一是,你的几个表属性数目不同,合并起来有些列是空值,会有冗余.
二是,你的几个表的合并属性看上去相似,但实质上不同,合并后查询起来需要用另加条件语句来区别它们.
三是,合并到同一表后,在进行查询时,要对合并表进行多余的查询筛选,相比于分表存储,会多花额外的开销.
四是,合并后,数据处理逻辑更复杂,不利于简化程序.
[/Quote]
呵呵,感觉说的很有道理
zhuxianguo 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gogodiy 的回复:]

我曾经做过方案二的合并,当时的出发点也是为了能直接从合并后的表中得到货物进出明细。
但经过一段时间的运行后,光数据量增长带来的问题就非常麻烦,尤其是牵涉到统计的速度和效率,已经并发下面的事务处理问题,都会给系统带来不稳定性。因为还是建议你不要合并,仍旧采用方案一。
[/Quote]
这位老兄的经验很可贵,你们公司数据有没做水平分割,就是把历史数据转移到历史表
gogodiy 2011-11-04
  • 打赏
  • 举报
回复
我曾经做过方案二的合并,当时的出发点也是为了能直接从合并后的表中得到货物进出明细。
但经过一段时间的运行后,光数据量增长带来的问题就非常麻烦,尤其是牵涉到统计的速度和效率,已经并发下面的事务处理问题,都会给系统带来不稳定性。因为还是建议你不要合并,仍旧采用方案一。
chenguang79 2011-11-04
  • 打赏
  • 举报
回复
其实多一个表不表示它就是冗余的,有时候多的这一个表反而会使用查询更加有效率。感觉楼主现在限入一个误区,就是表越少效率越高的误区
zhuxianguo 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jyh070207 的回复:]

方案一较好,如果感觉要关联多个表才可以查出出入记录的话,可以加一个合并表记录物品进入库情况
(交易单据号,交易类型(此处不同的类型表明数据来自不同的),物品编号,数量,日期,金额等)
[/Quote]
我也想过弄一个库存日志,但是这样就多了一个冗余表,更新单据的时候需要更新这个日志,增加数据不一致的几率
q465897859 2011-11-04
  • 打赏
  • 举报
回复
方案一好 [Quote=引用 1 楼 qianjin036a 的回复:]
感觉合并起来不妥.
一是,你的几个表属性数目不同,合并起来有些列是空值,会有冗余.
二是,你的几个表的合并属性看上去相似,但实质上不同,合并后查询起来需要用另加条件语句来区别它们.
三是,合并到同一表后,在进行查询时,要对合并表进行多余的查询筛选,相比于分表存储,会多花额外的开销.
四是,合并后,数据处理逻辑更复杂,不利于简化程序.
[/Quote]+1
qin_0 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fredrickhu 的回复:]

合并以后还有一点不好的地方是 数据冗余很多 关系不清晰

比如说要查一个数据 很多时候需要全表扫描 效率也不高
[/Quote]
对.效率也得考虑
--小F-- 2011-11-04
  • 打赏
  • 举报
回复
合并以后还有一点不好的地方是 数据冗余很多 关系不清晰

比如说要查一个数据 很多时候需要全表扫描 效率也不高
  • 打赏
  • 举报
回复
还是不要合并吧,相对数据库来说,数据的完整与程序的效率更重要
jyh070207 2011-11-04
  • 打赏
  • 举报
回复
方案一较好,如果感觉要关联多个表才可以查出出入记录的话,可以加一个合并表记录物品进入库情况
(交易单据号,交易类型(此处不同的类型表明数据来自不同的),物品编号,数量,日期,金额等)

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧