Моделирование друзей и последователей в РСУБД - PullRequest
3 голосов
/ 21 марта 2009

Я пытаюсь выбрать лучший способ смоделировать отношения записей в реляционной базе данных. Это классическая подруга / модель для подражания:

~~~~

У пользователя может быть ноль ко многим друзьям.
У пользователя может быть ноль ко многим подписчикам.

Друзья и подписчики являются самими пользователями.

~~~~~

Как лучше всего смоделировать это?

Спасибо!

1 Ответ

11 голосов
/ 21 марта 2009

пользователей (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
)
...