PostgreSQL:用于配置选项的JSON列或一对多表

问题描述 投票:2回答:1

我们目前有一个存储用户信息的表。某些列包含用户ID,名称等信息,但许多其他列(布尔值,整数和varchars等)为每个用户保留配置选项。

这随着时间的推移导致表格的宽度变得非常大,我认为现在是将时间迁移到新的东西的时候了,所以我想将所有“选项”相关的列删除到单独的数据结构中。

根据我的经验,这样做的典型方法是拥有一张新表,其中只有option_idoption_name,以及第二张新表,其中包含user_idoption_idoption_value等。

但是,一位同事建议使用新的jsonb列类型作为替代,但我不知道我是否喜欢以非关系方式存储关系数据的想法。从Java的角度来看,就我所知,它几乎是相同的 - 它只会被转换为POJO然后缓存在对象上。

我应该提到的是,用户数量将会非常少,只会达到数千个,并且列数可以并将进入数百个。

有没有人对这里最好的前进方向有什么建议?

postgresql database-normalization
1个回答
3
投票

从技术上讲,您已经通过向表中添加与其中存储的某些实体无关的列来对数据库结构进行反规范化。

使用JSON只是另一种去标准化的方法,将一堆值塞入单个行列字段。然后,优秀的binary support for JSON in Postgresjsonb数据类型)允许您索引这些JSON文档中的元素,作为快速访问这些嵌入值的方法。从关系的角度来看,这非常棘手,但在某些情况下很方便。

这种方法通常都是针对这种问题进行的,并不一定是坏事。一般而言,去标准化通常是付费即付或后付款的解决方案。但是对于像用户偏好这样的东西,可能没有付费后期惩罚,因为通常存在大多数面向业务的问题域。

不过,您应该考虑规范化的数据库结构。

顺便说一句,在姐妹网站http://DBA.StackExchange.com/中可能会更好地询问这种表结构问题。

我建议搜索Stack Overflow,该DBA站点以及更广泛的Internet,以讨论用于存储用户首选项的数据库设计。像this

© www.soinside.com 2019 - 2024. All rights reserved.