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 или перемножать таблицу саму на себя
Хотел бы узнать есть ли у кого-нибудь еще какие-нибудь варианты моделей, просто интересно, сейчас пока начал делать по первому варианту
Реализую возможность добавления друзей, думаю как лучше сделать, пока пришло на ум два варианта:
Есть таблица 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 или перемножать таблицу саму на себя
Хотел бы узнать есть ли у кого-нибудь еще какие-нибудь варианты моделей, просто интересно, сейчас пока начал делать по первому варианту