数据库表结构设计 相似业务表是否应该合并

欧鹏007 2016-12-10 03:07:42
问题描述:
金融方面业务,用户发布项目,项目有不同类型,不同类型的项目基本信息(标题、时间、简介基本一致)但是主体结构上有部分差异(可能A类型有1、2、3字段,B类型有4、5、6字段,C...D...)

所以在设计表结构时陷入纠结中,两种结果如下:
1:一张表存储所有字段,用分类区分,这样表字段会有30%左右为空;
2:不同类型数据分开存储,这样5张表相同的字段也很多。

目前业务设计上是项目分类查询,不会混在一起,但是会有评论等相关表,不知道那种方法的效率能高些。

希望有经验的前辈给予建议或者帮助
...全文
610 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧鹏007 2016-12-13
  • 打赏
  • 举报
回复
引用 5 楼 wangjian0228 的回复:
如果是不同业务考虑之间的 关系,合表有两个风险: 1:后面数据量大,还是会考虑分表,2:单个业务变更,扩展乏力 分表主要考虑两个业务间关联性大小,经常需要关联查询的可以考虑数据仓库,而且大部分工作可以交给应用层来做。 个人建议分表
感谢回帖
LongRui888 2016-12-12
  • 打赏
  • 举报
回复
引用 3 楼 openg007 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 可以考虑第1种设计,第1种设计的好处是,你取数据比较方便,只是字段有所不同,处理方法也简单,都是从给一个表里取。 可以要增加一个类型字段,就可以把不同业务类型的数据取出来。用空间换取性能。 第2个办法,看似更规范,不同业务放到不同的字段,分表,但是业务上,就要访问多个表,如果数据要合并,就比较麻烦,速度也会很慢。 还有第3种方法,用2个表,主表都是类似字段,子表增加一个字段区分不同的业务类型,另外增加一个字段,存放属性名称,然后存放值,这种方法的好处是非常灵活,业务扩展很方便,但是缺点就是写sql复杂,另外数据量大了,查询速度慢。
很荣幸我的问题能引起版主的注意,也非常感谢版主详细的回答~ 但还有一点小问题希望版主给点建议: 这两张图片分别是不同业务的表结构设计,那么按照您的解答,我可以把第一张图分为多表存储,第二张图一张表存储吗? 如果是您去设计表的话,您会怎样做呢? [/quote] 可以这么设计。
致命的西瓜 2016-12-12
  • 打赏
  • 举报
回复
如果是不同业务考虑之间的 关系,合表有两个风险: 1:后面数据量大,还是会考虑分表,2:单个业务变更,扩展乏力 分表主要考虑两个业务间关联性大小,经常需要关联查询的可以考虑数据仓库,而且大部分工作可以交给应用层来做。 个人建议分表
欧鹏007 2016-12-12
  • 打赏
  • 举报
回复
引用 3 楼 openg007 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 可以考虑第1种设计,第1种设计的好处是,你取数据比较方便,只是字段有所不同,处理方法也简单,都是从给一个表里取。 可以要增加一个类型字段,就可以把不同业务类型的数据取出来。用空间换取性能。 第2个办法,看似更规范,不同业务放到不同的字段,分表,但是业务上,就要访问多个表,如果数据要合并,就比较麻烦,速度也会很慢。 还有第3种方法,用2个表,主表都是类似字段,子表增加一个字段区分不同的业务类型,另外增加一个字段,存放属性名称,然后存放值,这种方法的好处是非常灵活,业务扩展很方便,但是缺点就是写sql复杂,另外数据量大了,查询速度慢。
很荣幸我的问题能引起版主的注意,也非常感谢版主详细的回答~ 但还有一点小问题希望版主给点建议: 这两张图片分别是不同业务的表结构设计,那么按照您的解答,我可以把第一张图分为多表存储,第二张图一张表存储吗? 如果是您去设计表的话,您会怎样做呢? [/quote] 忘记说了,不同颜色代表不同业务新加的字段。
欧鹏007 2016-12-12
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
可以考虑第1种设计,第1种设计的好处是,你取数据比较方便,只是字段有所不同,处理方法也简单,都是从给一个表里取。

可以要增加一个类型字段,就可以把不同业务类型的数据取出来。用空间换取性能。

第2个办法,看似更规范,不同业务放到不同的字段,分表,但是业务上,就要访问多个表,如果数据要合并,就比较麻烦,速度也会很慢。

还有第3种方法,用2个表,主表都是类似字段,子表增加一个字段区分不同的业务类型,另外增加一个字段,存放属性名称,然后存放值,这种方法的好处是非常灵活,业务扩展很方便,但是缺点就是写sql复杂,另外数据量大了,查询速度慢。


很荣幸我的问题能引起版主的注意,也非常感谢版主详细的回答~
但还有一点小问题希望版主给点建议:
这两张图片分别是不同业务的表结构设计,那么按照您的解答,我可以把第一张图分为多表存储,第二张图一张表存储吗?
如果是您去设计表的话,您会怎样做呢?




LongRui888 2016-12-10
  • 打赏
  • 举报
回复
可以考虑第1种设计,第1种设计的好处是,你取数据比较方便,只是字段有所不同,处理方法也简单,都是从给一个表里取。 可以要增加一个类型字段,就可以把不同业务类型的数据取出来。用空间换取性能。 第2个办法,看似更规范,不同业务放到不同的字段,分表,但是业务上,就要访问多个表,如果数据要合并,就比较麻烦,速度也会很慢。 还有第3种方法,用2个表,主表都是类似字段,子表增加一个字段区分不同的业务类型,另外增加一个字段,存放属性名称,然后存放值,这种方法的好处是非常灵活,业务扩展很方便,但是缺点就是写sql复杂,另外数据量大了,查询速度慢。
欧鹏007 2016-12-10
  • 打赏
  • 举报
回复
之所以有这种顾虑,是因为之前做过一个财务报销相关的系统,最开始把不通报销业务分表存储,关联审核等表,后来数据量大了查询变慢了,之后废了好大劲又把所有的业务表合并在一起,所以这次希望在开始的时候就好好设计。 希望有经验的大神帮帮忙~ 小弟先在此谢过了~

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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