|
|
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Какова оптимальная структура БД для стандартной френдленты? 1. У каждого пользователя есть свой список друзей 2. Каждый пользователь может направить приглашение в друзья другому пользователю 3. Приглашение может ожидать подтверждения от получателя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 11:31 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
>> Какова оптимальная структура БД для стандартной френдленты? С такими постановкой вопроса и исходником Вам лучеш сразу в форум "Работа"... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 11:36 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
goodw, из каких вариантов выбираете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 11:51 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
Infernal V. Raven, спасибо за проявленный интерес. Вобщем-то вопрос в следующем. Вот классический способ. Таблица User id login passw Таблица Friendlist id user_id friend_id is_agree В этом случае надо как-то обыгрывать момент возможности избыточной записи: id user_id friend_id is_agree1 2312 321 Есть ли какое-то более адекватное решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 13:03 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
goodw Есть ли какое-то более адекватное решение? Я бы разделил USER: USER_ID FRIENDS: USER_ID1, USER_ID2 FRIEND_INVITE: USER_ID1, USER_ID2 Т.е. предложение дружбы находится FRIEND_INVITE, в случае если предложение принято, то добавляется соответствующая запись в FRIENDS. Избыточности можно избежать проверяя оба атрибута. Например написать функцию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 14:13 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
goodwВ этом случае надо как-то обыгрывать момент возможности избыточной записи: Самое простое - добавить check (user_id < friend_id) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 20:14 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
авторСамое простое - добавить check (user_id < friend_id) Таким образом, при перед вставкой записи каждый раз прийдется проверять user_id > friend_id и менять id местами. При отображении списка друзей для user_id1: выводить по условию: where user_id1 = @user_id1 or user_id2 = @user_id1 Аналогично и удаление из друзей. Запись в FRIEND_INVITE удалять после добавления записи в FRIENDS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2009, 00:35 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
goodwТаким образом, при перед вставкой записи каждый раз прийдется проверять user_id > friend_id и менять id местами. Ну если не придумать ничего более простого, то придётся goodwПри отображении списка друзей для user_id1: выводить по условию: where user_id1 = @user_id1 or user_id2 = @user_id1 А тут уже check не при чём, это вообще особенность желаемой Вами схемы "без дублирования". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2009, 00:58 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
goodwInfernal V. Raven, спасибо за проявленный интерес. Вобщем-то вопрос в следующем. Вот классический способ. В этом случае надо как-то обыгрывать момент возможности избыточной записи: id user_id friend_id is_agree1 2312 321 Есть ли какое-то более адекватное решение? Я бы сделал так: Тригер на Insert в поле user_id вставляется наименьшее значение в friend_id соотвтественно наибольшее из пары IDшников друзей. Is_Agree - False - это запрос на дружбу. True - это друзья. Это избавит Вас от двойной записи. Это позволит однозначно трактовать данные. Однако для вывода всех друзей придется проходить таблицу дважды. Что-то типа Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 08:17 |
|
||
|
Проектирование френдленты в социальной сети
|
|||
|---|---|---|---|
|
#18+
goodwЕсть ли какое-то более адекватное решение? Это уже обсудалось буквально дословно. Решите эту задачу в общем виде с учетом того, что а) отношения типа "дружба" всего лишь одна из разновидностей отношений 2-х объектов и б) в рамках одного отношения отношение А к Б может быть не равно отношению Б к А (то, что А относится к Б также, как Б к А, скорее исключение в жизни). Если будет желание, учтите, что в отношениях не обязательно участвуют 2 объекта. Раз и навсегда решите это, и все. А то потом начнутся отношения типа "черные списки", "одноклассники", "одноработники", "банда", "земляки", "собутыльники" - будете каждый раз новый велосипед натягивать на свою БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36245213&tid=1543025]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 431ms |

| 0 / 0 |
