jsonb 与 jsonb[] 用于客户的多个地址

DDa*_*ave 3 postgresql jsonb

在 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"
Run Code Online (Sandbox Code Playgroud)

等等。

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

kli*_*lin 5

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

select
'[{
        "adresse_line-1": "a11",
        "adresse_line-2": "a12",
        "postalcode": "code1"
    },
    {
        "adresse_line-1": "a21",
        "adresse_line-2": "a22",
        "postalcode": "code2"
    }
]'::jsonb;
Run Code Online (Sandbox Code Playgroud)

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

为什么不是 jsonb[]?看一下JSON 定义:

JSON 建立在两种结构上:

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

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