我们什么时候应该在PostgreSQL中使用JSONB
我是PostgreSQL新手,希望了解JSONB数据类型,它的使用何时有用,以及我们应该使用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
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);