现在有一个合同费用表 contract_ext,存放着各种合同相关的费率字段. 比如:
tax(利息), mgr(管理费),还有 n 多个费...
后来产品要求给有些费用添加类型字段,表示按月收 /按年收,于是在表中添加了 tax_type, mgr_type.
后来产品表示需要再加一些费用字段,于是这个表的字段蹭蹭蹭的加
后来产品说为了统一管理,要把一些字段删掉,于是这个表中出现了很多无用的字段
后来产品说...
我有预感,后来绝对只是个开始...
现在这种表结构设计给开发造成的痛点有:
目前改造的想法是将费用抽象出来,新建一个 contract_fee 表,里面有:
这样如果产品后来再有什么需求,只需要 contract_fee 表添加数据就可以了,不需要改动表结构.但是会出现联表查询,可能会影响一些查询效率.
我昨天跟组长讨论了一下这个问题,组长说这个改动有点大(确实),让我再仔细考虑考虑.请教大家这种设计还会有哪些弊端呢.
像这种额外信息数据,经常变化但是有比较重要的字段(因为可能会涉及到最后还款计划的计算方式)需要如何设计才能保证良好的扩展性呢?
1
testcount 2018-03-15 10:57:29 +08:00 1
用后面的方案,另,感觉就没必要存什么费用名称费用描述了,这些写成常量放代码里就行。id, contract_id, fee_type, fee_amount, create_time 这几个字段就行了。contract_id 建索引,没啥大问题。
|
2
lockerhyz OP @testcount 费用名称(tax,mgr)在计算还款计划表的时候会用到,比如还款计划表的利息=合同金额*月利息,如果不存在表里面的话,无法分辨这条数据是哪种费用.
费用描述,一般都是中文描述,主要是用来返回给前端的. |
3
lockerhyz OP @testcount 如果要保留 fee_name,那么这个字段要用什么类型呢,枚举吗?或者另外一种方案:再建一个费用配置表,将费用名称,费用描述放进费用配置表中?
|
4
Miy4mori 2018-03-15 12:20:03 +08:00
像这种字段经常变化的表一般有三种方式处理,一,横表转纵表,二,数据用 JSON 保存,三,凑合着做把。
|
5
yy120345 2018-03-15 12:53:30 +08:00
目前没啥大问题, 但是要考虑后续变更..... 嘤, 来到目前这家公司 后台我重构了 2 次 才刚刚整理好 , 数据库不知道改动多少次了, 好心累....大兄弟,设计表要慎重!!!
|
9
Magic347 2018-03-15 16:38:18 +08:00
一对多的关联查询之后还可以利用缓存层优化
|
10
night98 2018-03-15 17:55:29 +08:00 via Android
建议新增表,还可以单条查询
|