【发布时间】:2013-09-18 22:21:38
【问题描述】:
当前的 Postgresql 版本已经为 JSON 内容引入了各种功能,但我担心我是否真的应该使用它们 - 我的意思是,还没有建立关于哪些有效和哪些无效的“最佳实践”,或者至少没找到。
我有一个具体的例子——我有一个关于对象的表,其中包含该对象的备用名称列表。所有这些数据也将包含在 JSON 列中以供检索。例如(跳过所有其他不相关的字段)。
create table stuff (id serial primary key, data json);
insert into stuff(data) values('{"AltNames":["Name1","Name2","Name3"]}')
我需要一些查询,格式为“列出所有替代名称之一为 'foobar' 的对象”。预期的表大小约为几百万条记录。 可以使用 Postgres JSON 查询,也可以对其进行索引(例如Index for finding an element in a JSON array)。但是,应该这样做还是不建议这样做的不正当的解决方法?
当然,经典的替代方法是为该一对多关系添加一个附加表,其中包含主表的名称和外键;它的表现是很好理解的。但是,这有其自身的缺点,因为这意味着该表和 JSON 之间的数据重复(可能存在完整性风险);或者在每次请求时动态创建 JSON 返回数据,这有其自身的性能损失。
【问题讨论】:
-
如果你只想存储一个数组,为什么不使用
text[]而不是JSON?
标签: json postgresql postgresql-9.3