我们有一个基于postgresql的数据库。实体以其核心属性存储在一个表中。有一个单独的表,其中包含属性名称和另一个属性值表。
更具体地说,我们有这样的东西:
usersTable: [id, name, surname] - [1, Johny, Doe]
attrNamesTable: [attrId, attrName] - [1, titleBefore]
attrValuesTable: [attrId, attrValue, userId] - [1, prof, 1]
我需要一个在这个数据库之上的框架,它将允许访问记录,就像访问文档一样,即:
user: {
id: 1,
name: Johny,
surname: Doe,
attributes: {
titleBefore: prof
}
}
有人知道这样的框架吗?任何建议都有帮助!
最佳答案
使用jsonb functions and operators:
select to_jsonb(t) || jsonb_build_object('attributes', json_object_agg("attrName", "attrValue")) as "user"
from "usersTable" t
join "attrValuesTable" a on a."userId" = t."id"
join "attrNamesTable" n using ("attrId")
group by t.id
在DbFiddle.上测试