Postgres对JSON(甚至是索引)有很多支持。我想把1个jsonb字段称为everything
而不是定义一堆类型列(mongodb样式)。
但我认为这是一个坏主意。我的问题是:为什么我不应该这样做?唯一的问题是它可能会占用额外的存储空间吗?
(我的表有很多可选字段,这就是我想这样做的原因)
答案 0 :(得分:4)
我可以想到几个原因:
如果JSON blob具有其他列的外键,我认为您不能添加REFERENCES
约束。
使用列可以非常轻松地强制执行NOT NULL
约束,但使用JSON,您必须为每个必需值编写CHECK
个约束。
JSON比Postgres的类型少。例如,没有日期/时间/时间戳,没有间隔,没有范围,只有一种数字类型,没有IP地址,没有二进制数据。
随着时间的推移,如果您在JSON结构中添加/移动/删除字段,您会发现较旧的行已过时并且您的应用程序无法理解JSON。使用常规列会强制您使整个表保持最新状态。