【发布时间】:2016-03-05 17:15:40
【问题描述】:
在 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 是指向属性表的外键,其中包含与给定属性(名称、类型、描述)相关的所有内容。
我找不到任何关于为什么这可能是一种好/坏做法的文献。有没有我忽略的明显直接相关的问题?
【问题讨论】:
-
如何为一个项目的所有属性选择名称、类型和描述?
-
我试图找到某种方法,但在我看来,我需要利用我的 ORM 来做到这一点(我使用支持 jsonb 列的 ActiveRecord)。你有什么想法吗?
-
确实——你需要 ORM 并且查询会变得比
SELECT * FROM item_attributes LEFT JOIN attributes USING(attribute_id) WHERE item_id = ?更复杂。通常,我不会使用 JSON 或任何其他基于文本/二进制的复杂内容来存储引用数据库本身的信息,而是使用适当的 FK,以便数据库强制执行它们。 MysqlDB 有一个将外键存储为\0分隔值的列,我已经遇到了足够的麻烦......但如果它适合你,那么它得到很好的支持,速度很快,而且查询不会变得不必要的复杂,为什么不.
标签: postgresql jsonb