我们使用Postgres作为我们的数据库。现在有一个新的要求来建模关系,如跟随。虽然它似乎非常适合图形数据库,但是没有使用图形数据库的余地,因为postgres已经在此应用程序中用作数据库平台。
在关系设计中对此进行建模的最佳方法是什么,以避免递归的自连接,这将导致大型递归树的可怕查询性能。 -
查询要求是显示John Doe
关系树以及其中每个相关成员的关系树。
请注意,以下示例仅用于说明目的,但实际用例涉及非常深的此类递归关系。
{
"personId" : 1,
"name" : "John Doe",
"relationships": {
"cousineOf" : 23 //23 is a personId in the same table. say 23 is "Merry",
"fatherOf" : 3 //where 3 is a personId with name - "George",
"brotherOf" : 67 //where 67 is a personId with name - "Tony"
}
}
答案 0 :(得分:0)
这就是设计架构的方法:
create table people (
person_id int primary key,
name text not null
);
create table relationships (
from_person_id int references people(person_id),
type text, --link to foreign table in real life
to_person_id int references people(person_id),
primary key (from_person_id, type, to_person_id)
);
示例数据:
insert into people values
(1, 'John Doe'),
(23, 'Merry'),
(2, 'George'),
(67, 'Tony');
insert into relationships values
(1, 'cousinOf', 23),
(1, 'fatherOf', 6),
(1, 'brotherOf', 67);
请告诉我们您要对数据执行的操作。一些tree and path examples使用PostgreSQL递归CTE。