1.sql 改写遇到表字段经常要增加的业务怎么设计表结构?
下面只是我的个人想法,欢迎拍砖讨论。
2. 业务问题是什么?
简单说就是有个表,字段经常变动,表结构该怎么设计? 例子:入金订单表(已经有 29 个字段)。因业务发展,入金订单有了拓展业务,有了三个拓展业务, paygo 入金订单,自营入金订单,话费入金订单。 paygo 入金,需要增加 4 个字段( ADDRESS , LONGITUDE , LATITUDE , DEVICE_NO )。自营入金拓展需要增加 7 个字段( COUNTER_NO , BRANCH_NO , BUSINESS_CREATE_TIME , BUSINESS_ORDER_NO , BRANCH_NAME , SERVICE_FEE , ORDER_FEE )。话费入金订单需要增加 1 个字段。 不知道我说明白这件事情了吗?就是说,一个表经常增加字段,增加的字段又不是所有数据都用到。
3. 表结构是如何设计的?
暂且称之为
key-value
方法。
Ext_key
存储增加字段名,
ext_value
存储字段值。
4.key-value 设计带来的优点和缺点
这个设计带来了很大灵活性,但是用起来,编写 sql 就不容易。设计到行转列,列转行。维护扩展起来不会方便。 来看下其中一个业务的 sql : 如果统计的话会更复杂了。后期维护也会困难。
5. 另外一种表结构设计,暂且称之为扩展表
再增加一个订单扩展表
1
,把经常变动的扩展字段放到扩展表。这样设计之后,可以想到,就变成了订单表和扩展表的简单
join
了,
sql
也更加清爽了。
6. 扩展表有什么缺点?
(1) 经常改表结构,会不会锁表?当然会。但是目前 oracle ,包括 mysql ( 5.7 ),增加表字段,增加字段速度很快。 (2) 数据很多冗余。可以想到, paygo 入金和自营入金相互用不到对方的字段,对应列就是空数据。空数据占用空间不大,我觉得可以忽略这个问题。 (3) 假设这样一种情况, paygo 入金订单扩展有 1 千万数据,自营入金订单扩展有 500 数据,话费入金订单扩展 500 条数据, paygo 订单扩展表显得很冗余哦。遇到这种问题我觉得可以拆分:入金订单扩展表, paygo 入金订单扩展表。这样编写 sql 的时候,也是非常简单的 3 表 join.
编辑推荐:
- 表字段经常要增加的业务怎么设计表结构03-01
- MySQL 百万级数据量分页查询方法及其优化03-01
- MySQL入门--体系结构03-01
- 大量文件名记录的树形结构存储03-01
- 高性能可扩展MySQL数据库设计及架构优化 电商项目03-01
- 删除4G数据1300万数据时间花费记录03-01
- MySQL入门--数据类型03-01
- 3dmax制作逼真的高跟鞋教程03-01
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
