Mail.ruПочта0Мой Мир0ОдноклассникиВКонтактеИгры0ЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

У меня есть сайт где можно добавлять в друзья

Амай Амаев Ученик (2), закрыт 3 часа назад
у меня есть таблица с пользователями, а как мне правильно организовать таблицу где есть дружественные связи например id такой то дружит с id таким то как эту таблицу правильно организовать ?
Лучший ответ
Kill-Me Pkz-Katy Гуру (3975) 5 дней назад
Для организации таблицы с дружественными связями в базе данных можно использовать подход с двумя полями для идентификаторов пользователей. Таким образом, можно создать таблицу, которая будет хранить пары пользователей, состоящих в дружбе. Примерная структура таблицы может выглядеть так:

### Таблица: **friends**

| id (PK) | user_id_1 | user_id_2 | статус |
|---------|-----------|-----------|--------|
| 1 | 101 | 102 | активен|
| 2 | 103 | 104 | активен|
| 3 | 101 | 103 | удален |

- **id (PK)**: уникальный идентификатор записи.
- **user_id_1**: идентификатор первого пользователя.
- **user_id_2**: идентификатор второго пользователя.
- **статус**: может быть значением типа "активен", "удален" и т.п. — показывает статус дружбы.

### Принципы:
1. **Не дублировать записи**: В этой таблице важный момент — для каждой пары пользователей должна быть только одна запись. То есть если **user_id_1 = 101** и **user_id_2 = 102** есть запись, то не должно быть записи **user_id_1 = 102** и **user_id_2 = 101** (они взаимозаменяемы).

2. **Можно добавлять статус** дружбы, чтобы отмечать, например, заблокированные или удаленные связи.

3. **Запросы**: Чтобы узнать, кто является другом пользователя, нужно будет делать запросы, например, так:

- **Поиск друзей пользователя (например, user_id = 101)**:
SELECT user_id_2 FROM friends WHERE user_id_1 = 101 AND статус = 'активен'
UNION
SELECT user_id_1 FROM friends WHERE user_id_2 = 101 AND статус = 'активен';

Это обеспечит возможность отслеживания взаимных дружеских связей.
Остальные ответы
mda hes Искусственный Интеллект (117986) 5 дней назад
У меня есть диван где добавляю в друзья
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (272457) 5 дней назад
При небольшом количестве пользователей и связей можно использовать таблицу связей, как выше указали. При тысячах пользователей или особенно если все между собой дружат и образуют миллионы записей для связи, то лучше использовать битовую строку (Bitset) или даже блоки битовых строк. Это дает огромную экономию на одну связь и высокую скорость (например для вывода кто из друзей онлайн).
Похожие вопросы