sql - Postgres 使用 JSONB 列而不是定义的列

标签 sql postgresql

Postgres 对 JSON(甚至索引)有很多支持。我只想放置 1 个名为 everything 的 jsonb 字段,而不是定义一堆类型化的列(mongodb 样式)。

但我认为这是个坏主意。我的问题是:我为什么不应该这样做?唯一的缺点是它可能会占用额外的存储空间吗?

(我的表有很多可选字段,这就是我要这样做的原因)

最佳答案

我能想到几个原因:

  • 如果 JSON blob 具有指向其他列的外键,我认为您不能添加 REFERENCES 约束。

  • 对于列,您可以非常轻松地执行 NOT NULL 约束,但是对于 JSON,您必须为每个必需的值编写 CHECK 约束。

  • JSON 的类型少于 Postgres。例如,没有日期/时间/时间戳,没有间隔,没有范围,只有一种数字类型,没有 IP 地址,没有二进制数据。

  • 随着时间的推移,如果您在 JSON 结构中添加/移动/删除字段,您会发现旧行变得过时并且您的应用无法理解 JSON。使用常规列会强制您使整个表格保持最新状态。

关于sql - Postgres 使用 JSONB 列而不是定义的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37888681/

相关文章:

postgresql - postgres查询(不止功能)

mysql - SELECT by A列OR B列在数据库中的数据比较顺序是什么

MySQL 和推送查询数组在一起

java - 如何合并 10 万条 MySQL 行

ruby-on-rails - 如何使用带有 PostgreSQL 的 Rails 通过自定义规则设置自定义序列号

postgresql - 如何从 psql -f my_script.sql 调用的脚本中引发错误

sql - MS SQL Pivot 动态 header

php - 类似于 PL/SQL 中的 += 或 .= 的运算符?

sql - 复杂的结果分布数据库查询

sql - 累计重复次数