比如说我们业务有自己券体系。
券分为 A B 两种,在同一张表。
后来 A 又有自己的类型
B 又有自己的类型
如此循环,字段加的越来越多,也越来越耦合。
请问,建表时,一般要考虑哪些因素,业务越来越耦合时,如何加字段,如何拆表?
1
lscho 2021-11-24 11:39:58 +08:00
没办法,字段多了就分表
|
2
infun 2021-11-24 11:51:36 +08:00
一百九十多个字段的表都没拆,还在加。。。
|
3
SimonOne 2021-11-24 11:51:55 +08:00 1
|
4
ericgui 2021-11-24 11:55:04 +08:00
业务乱,这又不是技术问题,这个你作为程序员怎么可能解决得了?
不要幻想代码可以解决一切问题,代码只是现实生活的一个在互联网上的一个映射 /投影,而且你在写代码的时候又要做很多抽象,抽得四不像的情况多的去了 跑吧 |
5
Samuelcc 2021-11-24 13:06:04 +08:00
我在小规模服务中用过 Mongodb 存储多态对象,能够比较优雅地解决这种问题。但是没在大规模服务中尝试过。
|
6
dajj 2021-11-24 13:10:34 +08:00
换项目组或者换公司就好了
|
7
eason1874 2021-11-24 13:28:07 +08:00
一步到位是消费主义的谎言.jpg
后期发展谁说得准呢,不需要过度设计,有一定设计预留就够了 后期差异太大再分开,重新设计 AB 两张表,迁移或者根据券码、时间决定读新表还是旧表 |
8
clf 2021-11-24 13:34:27 +08:00 3
(快进到 text 存 json 字符串)
|
9
Ariver 2021-11-24 13:36:43 +08:00 via iPhone
银行有很多一个表字段六七百。
|
11
ZhaoWang 2021-11-24 13:43:42 +08:00 via iPhone
垂直拆分成两张,业务自定义垂直表,随便他们折腾
|
12
xuanbg 2021-11-24 13:59:10 +08:00
@eason1874 设计要有前瞻性,做到能升级、易升级就行了。但不需要预留现在没用的东西,特别是那种从 c0-c99 的预留未定义字段,简直就是辣鸡中的战斗机。
|
13
yunshansimon 2021-11-24 14:25:28 +08:00
任何读写都通过一个 dataview 来进行,这个 dataview 用来组织表格,如果有加不了的项,就拆到另一个表中去,用 dataview 来组织这些表,最终呈现一个“统一”的表格给应用,当然,注意要加上一个版本号,以便数据使用方来识别。所有写入都要通过一个写入过程,在过程中来判断要写入那些表中的那些字段,以便分开加锁,这样还能提高性能。
|
14
pengtdyd 2021-11-24 15:01:12 +08:00
把该死的架构师拉出去祭天就可以了
|
15
Saxton 2021-11-24 18:01:29 +08:00
考虑自定义字段? 用行来存字段呗,不一定要把字段具体化
|
17
zeni123 2021-11-24 22:30:28 +08:00 via iPhone
BigTable 架构啊
|
18
liuxu 2021-11-24 22:34:59 +08:00
解决掉建表的人
|
19
3dwelcome 2021-11-24 22:52:03 +08:00
说起来可能楼主不信,但我个人推荐的方式就是对数据套娃。
也就是对数据库建立一个抽象层的读写 API ,给后端数据库读取的数据,都是加工处理过后的。 对外看起来是两个表,读写也是两个表。实际存到磁盘上,可能就一个总表了,通过一些代码做逻辑字段的切分。 |
20
akira 2021-11-25 00:43:16 +08:00
忍受不了的时候 就拆表呀。。
|
21
zachlhb 2021-11-25 08:29:46 +08:00 via iPhone
分表,先建一个券主表存放通用字段,然后每种券独立到自己的表中,然后根据主表的券类型去各类型表中查扩展数据
|
22
netnr 2021-11-25 08:58:43 +08:00 via Android
就举例需求来讲,首先分 1 和 2 ,然后 1 又拆分 11 12 13 ,2 就拆分 21 22 23 ,如果还需要分,那就转成字符串,1-1-1 2-1-1 这种
也算是一种可扩展的变通,当然涉及到的逻辑也要改,历史数据的维护(很多时候不愿意维护历史数据来支持新的功能,而是通过加字段,反而越来越复杂) |
23
yogogo 2021-11-25 09:30:33 +08:00
我现在是这样做的,券有一个主表,里面是券的基本信息,id ,编号,名称,类型,假设券类型分 A 和 B ,再建两张类型表 A 和 B ,这样就分开 A 和 B 的类型字段就各自维护,主表也能保持简单,后续有新类型就新增类型表就行了
|
24
php01 2021-11-25 09:46:28 +08:00
不要对重构抱有敌意,拥抱重构,才能前进
|
25
goldpumpkin 2021-11-25 10:25:10 +08:00
@SimonOne 直接换个英文单词 换一个解释, 绕晕它
|
26
bsg1992 2021-11-25 15:31:34 +08:00
继续加字段
如果字段是在太多就只能分表 分表也回带来业务上开发的复杂度 |