【发布时间】:2010-10-14 17:52:51
【问题描述】:
我正在尝试确定在关系数据库中为记录关系建模的最佳方法。这是经典的朋友/关注模式:
~~~~
一个用户可以有零到多个朋友。
一个用户可以有零到多个关注者。
朋友和关注者都是用户自己。
~~~~~
对此建模的最佳方法是什么?
谢谢!
【问题讨论】:
标签: database-design data-modeling rdbms
我正在尝试确定在关系数据库中为记录关系建模的最佳方法。这是经典的朋友/关注模式:
~~~~
一个用户可以有零到多个朋友。
一个用户可以有零到多个关注者。
朋友和关注者都是用户自己。
~~~~~
对此建模的最佳方法是什么?
谢谢!
【问题讨论】:
标签: database-design data-modeling rdbms
用户(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
)
【讨论】:
Invitations 是定向的,包括邀请日期(以防它需要过期)等。一旦收件人接受,它就会移动到Friendship 表。