我正在为社交网络设计数据库模式
并且需要在数据库中的用户之间实现相互好友关系。
但是在数据库中表示这种关系的最佳方式是什么?有可能吗?
作为例子,我会从Prisma取一个样本。
follower关系就是这样实现的,虽然不保证互惠:
CREATE TABLE "User" (
id integer DEFAULT nextval('"User_id_seq"'::regclass) PRIMARY KEY,
name text
);
CREATE TABLE "_UserFollows" (
"A" integer NOT NULL REFERENCES "User"(id) ON DELETE CASCADE ON UPDATE CASCADE,
"B" integer NOT NULL REFERENCES "User"(id) ON DELETE CASCADE ON UPDATE CASCADE
);
model User {
id Int @id @default(autoincrement())
name String?
followedBy Follows[] @relation("following")
following Follows[] @relation("follower")
}
model Follows {
follower User @relation("follower", fields: [followerId], references: [id])
followerId Int
following User @relation("following", fields: [followingId], references: [id])
followingId Int
@@id([followerId, followingId])
}
С 是否可以确保数据完整性和更改的原子性?另外,如何确保从一侧删除关系时,另一侧的关系也被删除?