我正在尝试决定在关系数据库中建模记录关系的最佳方法。这是一个经典的好友/关注模型:
- 一个用户可以有零到多个好友。 - 一个用户可以有零到多个关注者。
好友和关注者都是用户本身。
那么,如何最好地建模呢?谢谢!
- 一个用户可以有零到多个好友。 - 一个用户可以有零到多个关注者。
好友和关注者都是用户本身。
那么,如何最好地建模呢?谢谢!
用户表 (用户ID, ...)
订阅关系表 (订阅者, 发布者)
好友关系表 (第一个用户, 第二个用户)
CREATE TABLE Users (
UserID int not null primary key,
...
)
CREATE TABLE Subscription (
Subscriber int not null references Users(UserID),
Publisher int not null references Users(UserID),
constraint ck_NotEqual check (Subscriber <> Publisher)
)
CREATE TABLE Friendship (
FirstUser int not null references Users(UserID),
SecondUser int not null references Users(UserID),
constraint ck_Order check (FirstUser < SecondUser) -- since friendship is reflective
)
Invitations
,它是定向的,并包括邀请日期(以防需要过期等)。一旦收件人接受,它就会移动到Friendship
表。 - Bill Karwin