Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们什么时候应该在PostgreSQL中使用JSONB_Postgresql_Database Design - Fatal编程技术网

我们什么时候应该在PostgreSQL中使用JSONB

我们什么时候应该在PostgreSQL中使用JSONB,postgresql,database-design,Postgresql,Database Design,我是PostgreSQL新手,希望了解JSONB数据类型,它的使用何时有用,以及我们应该使用JSONB数据类型的场景。它对于在行上存储可选属性很有用。例如,如果您有一个表cars,您通常在其中存储诸如make、model、year…等内容。(适用于每辆车的字段)。您可以存储特定汽车的可选信息,如颜色、车轮尺寸、车主等 更具体的例子: CREATE TABLE node ( id SERIAL PRIMARY KEY , parentid INTEGER , created

我是PostgreSQL新手,希望了解JSONB数据类型,它的使用何时有用,以及我们应该使用JSONB数据类型的场景。

它对于在行上存储可选属性很有用。例如,如果您有一个表
cars
,您通常在其中存储诸如make、model、year…等内容。(适用于每辆车的字段)。您可以存储特定
汽车的可选信息,如颜色、车轮尺寸、车主等

更具体的例子:

CREATE TABLE node
( id       SERIAL      PRIMARY KEY
, parentid INTEGER
, created  TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
, updated  TIMESTAMPTZ
, label    TEXT
, type     TEXT
, quantity INTEGER
, attr     JSONB DEFAULT '{}'
);

那么您可能会有如下记录:

id|parentid|created            |updated            |label    |type  |quantity|attr
--|--------|-------------------|-------------------|---------|------|--------|---------------------------------------------|
2 |      1 |2019-08-01 00:00:00|2019-08-01 00:00:01|'part123'|'ITEM'|     10 |{'quantity-confirmed': '2019-08-01 00:00:01'}|

您可以在表的正常形式被破坏的地方使用它。就我个人而言,我会创建一个单独的表
attributes
,其中有一个
objectid
充当数据库中某个其他记录的外键,并将属性存储在那里


CREATE TABLE attributes
( objectid INTEGER     PRIMARY KEY
, attr     JSONB
, created  TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
, updated  TIMESTAMPTZ
);
CREATE INDEX attribute_idx_objectid ON attribute USING btree (objectid);
CREATE INDEX attribute_idx_attr     ON attribute USING gin   (attr);