Postgres SQL 的json 数据优势和劣势

优势

  1. 以json 格式保存的数据,没有了表和表之间的关联关系,
  2. 因为一切的关联关系都通过使用json 来进行关联,例如,一个订单下存在多个商品,以json 的格式存储,甚至不需要重新创建一张新的表,可以直接将数据保存在json 字段中
  3. 从这方面讲同时也降低了数据查询量,大大加快了数据库的查询速度,
  4. 并且pgsql 的json 是可以加索引的,也是其一大优势(但是为了其能够命中索引条件查询时其写法变得有些复杂)
  5. 方便了关联关系查询,减少了n+1 的问题,如果我们想查询订单并且同时获取到订单详情的数据,直接查询订单表就可以找到相关联的订单详情数据
  6. 增加了扩展性,如果要新增或者删除字段,不必那么麻烦直接在保存数据时不保存该字段即可

劣势

增加了添加、修改的难度

同样以上方的订单为例,因为一个订单可能绑定了多个商品,由于不是关系型的表结构,我们如果想要订单详情中的某个商品信息,我们必须经历如下步骤:

  1. 首先必须先查询当前订单
  2. 之后获取到当前的订单详情的json 字段
  3. 通过json字段转换称订单详情实体类
  4. 之后通过遍历,获取到要修改的数据
  5. 修改后还必须转换回Json 数据并保存到表中
  6. 多出的代码意味着风险,写出的代码处理步骤约繁琐,越是容易写出bug
  7. 另外再转换Json 数据的过程中也可能会出现一些未知的问题

空处理加上对接问题

这是我们不得不面对的一个问题,因为如果我们忽略处理某个字段,可能导致前端找不到某个字段,所以我们保存到数据库时必须保证对象中的某个字段即使为空,在生成Json后字段的值至少是null或者空字符串

增加了设计难度和查询难度

仍然是以上面的订单和订单详情为例,如果我们只想查询某个订单的订单详情,甚至对订单详情做分页查询,就必须新建表了,如果存在一些特殊的需求,修改了订单详情,那同样要考虑到是否需要改变订单表的Json 字段,以达到两张表数据一致的问题

结论

在设计数据库表结构时,如果考虑使用Json 格式保存数据,那这张表的Json 字段最好是保存后就再不进行修改的字段,另外保存数据时必须保证Json 的值是null 或者空字符串

经验分享 程序员 微信小程序 职场和发展