Реализация друзей

spiverg

Новичок
Реализация друзей

Реализую возможность добавления друзей, думаю как лучше сделать, пока пришло на ум два варианта:
Есть таблица situser
[sql]
CREATE TABLE siteuser (
siteuser_id INT PRIMARY KEY,
name CHARACTER VARYING (100) NOT NULL и т.д.
)
[/sql]

Первый вариант добавляем таблицу friend следующего вида:
[sql]
CREATE TABLE friend (
active_id INT NOT NULL REFERENCES siteuser,
passive_id INT NOT NULL REFERENCES siteuser,
confirm BOOLEAN NOT NULL DEFAULT FALSE,
CONSTRAINT friend_pk PRIMARY KEY(active_id, passive_id)
)
[/sql]
Работает это следующим образом, когда один чувак приглашает другого в друзья вставляем запись, когда второй подтверждает приглашение меняем confirm на true, таким образом дружба успешно заключена если confirm true

Второй вариант:
[sql]
CREATE TABLE friend (
active_id INT NOT NULL REFERENCES siteuser,
passive_id INT NOT NULL REFERENCES siteuser,
CONSTRAINT friend_pk PRIMARY KEY(active_id, passive_id)
)
[/sql]
Здесь следующая логика, когда один чувак приглашает другого в друзья вставляем запись(active_id тот кто приглашает, passive_id кого приглашают), когда чувак которого пригласили подтверждает приглашение вставляем еще одну запись (active_id кого приглашают, passive_id тот кто приглашает), таким образом дружба успешно заключена если есть две записи, минус этого метода неудобные выборки приходится делать union или перемножать таблицу саму на себя

Хотел бы узнать есть ли у кого-нибудь еще какие-нибудь варианты моделей, просто интересно, сейчас пока начал делать по первому варианту
 

Wicked

Новичок
сдам друзей на реализацию :)

-~{}~ 21.08.08 12:08:

я бы сделал отдельную таблицу заявок на дружбу. После подтверждения из нее запись удаляется, а в таблицу friend вставляется 2 записи - (i, j), (j, i).
 

spiverg

Новичок
да, твоя модель удобнее, что то я сам не догадался выделить заявки

Wicked
сдам друзей на реализацию
теперь уже приму заявку на сдачу друга в(или под?:) )реализацию
 
Сверху