浅谈用JSON字符串代替mysql的拓展表设计的备选方案

正文

需求上,A表需要拓展表B,有个B_ID关联B表;B表需要拓展表C,有个C_ID关联C表。
当我们需要根据A表查询C表的记录的时候,只能join B,B再join C。

当前端需要的字段越多,需要关联的拓展表越多,那么,有没有更好的备选方案去解决连表过多?

思路

1、怎么查询拓展表的信息?

A对象有个BJsonString字符串,BJsonString有个CJsonString。那么,我只查A表就能获取到B的内容和C的内容,减少了表的关联,相当于变相优化了SQL。

Class A{
	private String BJsonString;
}
Class B{
	private String CJsonString;
}
Class C{
	//里面有拓展信息属性
}

2、缺点

如果页面需要根据C表的字段查询整条记录,把对象转JSON字符串不适用。

3、优点

减少了对表的关联,如果页面的查询条件为A表的字段,那么,可以考虑将B、C两个对象转Json字符串作为属性分别存在A、B两个对象。

数据库只有A表,B表和C表都变为A表的varchar字段(存JSON字符串),减少了数据库表的臃肿

4、注意点

当我需要修改B对象或者C对象的某字段时,前端传的只有这个字段,其他属性没传,那么为了避免空字段覆盖有内容的字段,我们应该自定义一个BeanUtil,而不是用Spring默认的copyProperties(因为它会用空属性覆盖原属性)

自定义BeanUtil

结论

灵活应用JSON字符串存对象的内容,不要死板地用数据库字段去关联表。业务是死的,但人是活的。

你可能感兴趣的:(数据库,后端,高可用架构,json,mysql,java)