在数据库中模拟相互友谊关系的最佳方式是什么?

问题描述 投票:0回答:0

我正在为社交网络设计数据库模式
并且需要在数据库中的用户之间实现相互好友关系

但是在数据库中表示这种关系的最佳方式是什么?有可能吗?

作为例子,我会从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])
}

С 是否可以确保数据完整性和更改的原子性?另外,如何确保从一侧删除关系时,另一侧的关系也被删除?

database-design orm many-to-many relationship data-integrity
© www.soinside.com 2019 - 2024. All rights reserved.