我正在尝试确定在关系数据库中建立记录关系的最佳方法。这是经典的朋友/关注模式:
~~~~
用户可以拥有零到多个朋友 用户可以拥有零到多个粉丝。
朋友和粉丝都是用户自己。
~~~~~
对此进行建模的最佳方式是什么?
谢谢!
答案 0 :(得分:11)
用户(UserId,...)
订阅(订阅者,发布者)
友谊(FirstUser,SecondUser)
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
)