【问题标题】:jsonb vs jsonb[] for multiple addresses for a customerjsonb vs jsonb[] 用于客户的多个地址
【发布时间】:2017-09-02 15:06:35
【问题描述】:

在 PostgreSQL 的一个 jsonb 字段中保存多个地址是个好主意。我是 nosql 的新手,我想测试 PostgreSQL 来做到这一点。我不想有另一个带有地址的表,我更喜欢将它放在同一个表中。 但我很怀疑,我见过 PostreSQL 有 jsonb 和 jsonb[]。

存储多个地址哪个更好? 如果我使用 jsonb,我想我必须为每个字段添加一个前缀,如下所示:

"1_adresse_line-1"
"1_adresse_line-2"
"1_postalcode"

"2_adresse_line-1"
"2_adresse_line-2"
"2_postalcode"

"3_adresse_line-1"
"3_adresse_line-2"
"3_postalcode"

等等

用jsonb[]是不是更好,它是如何工作的?

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    使用结构如下的 jsonb(不是 jsonb[]!)列:

    select
    '[{
            "adresse_line-1": "a11",
            "adresse_line-2": "a12",
            "postalcode": "code1"
        },
        {
            "adresse_line-1": "a21",
            "adresse_line-2": "a22",
            "postalcode": "code2"
        }
    ]'::jsonb;
    

    不过,与主表相关的常规表是更好的选择。

    为什么不是 jsonb[]?看看JSON definition:

    JSON 建立在两种结构之上:

    • 名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。
    • 值的有序列表。在大多数语言中,这被实现为 数组、向量、列表或序列。

    因此,您可以在 jsonb 列中存储对象数组。尝试使用 jsonb 的数组,很可能是由于对这类数据的误解。我从未见过对这种解决方案的合理需求。

    【讨论】:

    • 谢谢,但是 jsonb[] 是干什么用的?,probme,相关表是我想动态添加字段,我没有固定结构
    • Jsonb 有一个内置的数组功能。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多