当前位置: 首页 > 知识库问答 >
问题:

在postgresql jsonb中存储外键是个坏主意?

蔡理
2023-03-14

在jsonb列中存储外键有哪些问题?

背景:

我有一个项目表:

Item 
--------------------------
| id   | name | property |
| PK   | text |  jsonb   |

属性列是以下结构的一级jsonb:

[
  {"value": "white", "item_attribute_id": "1"},
  {"value": "71", "item_attribute_id": "3"},
  {"value": "29", "item_attribute_id": "4"},
  {"value": "48-70", "item_attribute_id": "5"},
  {"value": "190", "item_attribute_id": "6"}
]

item_attribute_id是指向属性表的外键,它保存与给定属性(名称、类型、描述)相关的所有内容。

我找不到任何关于为什么这可能是一种好的/坏的做法的文献。有没有我忽略的明显的直接相关问题?

共有1个答案

柏麒
2023-03-14

关于JSONBtype,您需要考虑以下事项:

  • 查询会更复杂;如果您甚至对所有JSONB函数感到满意(它们更多地是关于SELECT语句),UPDATE操作仍然很棘手-请考虑@Erwin对此的回答。
  • 大小开销;对于小型文档来说,这并不重要,但在规模上您可能会碰壁。只需比较pg_column_size()对您的案例的结果。
  • 有限的索引支持;当您通过元素数组中执行搜索时,您将没有运气(例如json_array_elements()等功能)。默认GIN索引支持使用(CONTAINS@进行查询

需要考虑的条款:

  • 从PGConf 2015重新思考JSONB
  • PostgreSQL 9.4中的JSONB类型性能

 类似资料:
  • 问题内容: 如果我使用ID nr:s代替VARCHARS作为外键会更好吗?最好使用VARCHARS的ID nr:s istead作为主键吗?ID nr是指INT! 这就是我现在所拥有的: 我可能已经想到了: 还是我在这里认为完全错误? 问题答案: VARCHAR用于任何KEY的问题在于它们可以保留WHITE SPACE。空格由任何无法在屏幕上读取的字符组成,例如空格标签,回车符等。当您开始追查为什

  • 我使用的框架Laravel。 我有两个表(用户和人员)。我想将persons表的主键person\u id存储在users表的外键person\u id中。目前我使用这个$user- 表用户 餐桌上的人 索引操作 商店行动 用户迁移 人员迁移 模型用户 模范人物 我只想改变这个:$user-

  • 假设您有一个表,如下所示: 可以看到列是表的主键和外键。是的,MySQL成功生成了这个表。 问题很简单,我将如何在JPA实体中映射这一点?我是否应该有映射到列的1个id和连接列的另一个字段?欢迎提出建议。

  • 问题内容: 我知道String类的hashCode()方法 不能 保证为不同的String-s生成唯一的哈希码。我看到了很多将String键放入HashMap-s的用法(使用默认的String hashCode()方法)。如果地图使用真正不同的String键替换了先前放置在地图上的HashMap条目,那么很多这种用法可能会导致重大的应用程序问题。 在String.hashCode()对于不同的St

  • 我正在拉维尔创建一个项目。我有两个数据库表,它们是通过迁移创建的:我想在数据库模式中设置多个外键。 表用户 我想知道的是如何描述模型中的关系? 编辑: 我计划使用此关系,每个用户都属于部门,任何部门都有多个用户,每个用户只有一个部门

  • 如何使用hibernate注释实现下表? 当前代码为:(为简洁起见,已删除) 使用者 社交网络 SocialProfile公司 显然我的代码现在不能正常工作。有人能解释一下吗?