[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хранение личных данных юзера
DmitryOpalev
Мне нужно сохранять личную информацию о юзере, наподобии того, как в соц. сетях, только гораздо проще.
Например, как хранить друзей пользователя? Нужно для каждого пользователя делать таблицу, и туда записывать его друзей?



Спустя 11 минут, 50 секунд (20.04.2011 - 22:20) Raito-kun написал(а):
зачем? например 1 таблица users, в ней вся информация о юзере + отдельное поле, где перечислены id его друзей через запятую/точку с запятой/другой делимитер

Спустя 2 минуты, 40 секунд (20.04.2011 - 22:23) Snus написал(а):
DmitryOpalev
Для этого нужно:
1. таблица с пользунами (id, log, ...)
2. таблица со связями:

uId, fId , где uId - id пользуна, fId - id его другана. Естественно на оба поля поставить UNIQUE(uId, fId)

Спустя 2 минуты, 18 секунд (20.04.2011 - 22:25) neadekvat написал(а):
Цитата (Raito-kun @ 20.04.2011 - 23:20)
зачем? например 1 таблица users, в ней вся информация о юзере + отдельное поле, где перечислены id его друзей через запятую/точку с запятой/другой делимитер

Тогда зачем вообще бд использовать, если такую фигню делать?

Спустя 2 минуты, 7 секунд (20.04.2011 - 22:27) DmitryOpalev написал(а):
Snus
Не понял маленько... Надо сделать отдельную таблицу, где будет записыватся id пользователя, и его друг?

Спустя 24 минуты, 40 секунд (20.04.2011 - 22:52) Raito-kun написал(а):
Цитата
Тогда зачем вообще бд использовать, если такую фигню делать?

и в чем проявляется "такая фигня"? что тебе на этот раз неугодило? ну записывай в файл раз тебя что-то неустраивает или предложи свой вариант.
id|friends|name|surname|blabla

Спустя 1 минута, 4 секунды (20.04.2011 - 22:53) Snus написал(а):
DmitryOpalev
Допустим, что есть логин Vasya с ID 99 и у него в друзьях Petya (88) , Sasha (77) и Koder (66)

В таблице это будет выглядеть так

uId | fId
99 | 88
99 | 77
99 | 66

Спустя 2 минуты, 32 секунды (20.04.2011 - 22:55) neadekvat написал(а):
Цитата (Raito-kun @ 20.04.2011 - 23:52)
и в чем проявляется "такая фигня"? что тебе на этот раз неугодило? ну записывай в файл раз тебя что-то неустраивает или предложи свой вариант.

Она проявляется в полном игнорировании нормальной формы реляционной бд.
Если пихать "через запятую или другой делимитер" данные, по которым нужны поиск, сортировка и множество других действий, которые под собой подразумевает список друзей, то зачем вообще пользоваться бд - все равно придется все операции совершать на уровне костылей php.

Спустя 4 минуты, 10 секунд (20.04.2011 - 22:59) DmitryOpalev написал(а):
Snus
Спасибо, пойду делать smile.gif

Спустя 1 минута, 41 секунда (20.04.2011 - 23:01) denizkin написал(а):
DmitryOpalev
Есть таблица USERS в ней поля id log pass

Есть таблица СВЯЗЕЙ в ней поля id uid fid

соответсвенно первая таблица выглядит:
id log pass
1 den ***
2 mark ***

таблица связей:
id uid fid
1 1 2
2 2 1
Тобишь у первого юзера в друзьях mark у второго den



Во блин пока писал, уже тоже написали другие! biggrin.gif

Спустя 3 минуты, 24 секунды (20.04.2011 - 23:05) neadekvat написал(а):
Цитата (denizkin @ 21.04.2011 - 00:01)
таблица связей:
id uid fid
1 1 2
2 2 1
Тобишь у первого юзера в друзьях mark у второго den

Зачем в таблице связей суррогатный первичный ключ?

Спустя 36 секунд (20.04.2011 - 23:05) Snus написал(а):
denizkin
Я тебе друХ, а ты мине неа! biggrin.gif Мне кажется, что логично, что если друзья - то это понятие общее и дублировать записи 1-2, 2-1 не нужно. И более того - поле id вообще лишнее там.
neadekvat
Я на твоей стороне, хоть и тоже ты мне "не друХ" biggrin.gif

Спустя 9 минут, 12 секунд (20.04.2011 - 23:14) neadekvat написал(а):
Цитата (Snus @ 21.04.2011 - 00:05)
хоть и тоже ты мне "не друХ"

Главное - чтобы не "враХ", а там уж время покажет smile.gif

Спустя 7 часов, 22 минуты, 59 секунд (21.04.2011 - 06:37) denizkin написал(а):
Snus
Ну мне показолось логика взаимной связи логичней, чисто из примера ВКонтакте и фейсбук, что если есть человек в друзьях, то у него я тоже есть в друзьях, но подумав согласен с тобой, потому что-то так можно попробовать организовать друзья друзей)) :D И поле id это у меня такой бзик, чтоб оно было.

DmitryOpalev
Ты можешь таблицу связей заменить на упрощённую версию таблицы меток, тогда это в итоге сократит твоё кол-во таблиц.
Пример: таблица МЕТОК с полями id, object_id, type_object, data

Как это выглядит:

id object_id type_object data
1 1 'fid' 2

тобишь в object_id - id объекта к кому относиться тобишь к юзеру с id, тип объекта туда пишем fid и в дату id нашего друга! Так же там можно хранить любую другую инфу о нашем юзере например ссылки на фотки и всё что хочешь в принципе!

id object_id type_object data
2 1 'picture' /img/pic2.jpg


И делать выборку по 2 полям, ну в общем всё просто, зато кол-во таблиц существенно сокрашается! ;) Единственное надо желательно такую таблицу меток ограничить в типах данных заранее, чтоб если система разрастётся таблица не была мегаогромной и запросы не занимали часы! :D
Это я привёл самую простую таблицу меток, я обычно пользую несколько более сложные, но пока тебя ими не буду грузить!

neadekvat
Это мой бзик, я всегда делаю хотя он вроде и не нужен, но обычно всегда помогает, если что при дебаге, чтоб просто вывести id данной ячейки и посмотреть поиском в phpmyadmin что действительно в ячейке, короче я считаю, что пусть он будет! ;)

Спустя 53 минуты, 46 секунд (21.04.2011 - 07:31) kirik написал(а):
Цитата (Raito-kun @ 20.04.2011 - 15:20)
например 1 таблица users, в ней вся информация о юзере + отдельное поле, где перечислены id его друзей через запятую/точку с запятой/другой делимитер

Цитата (Raito-kun @ 20.04.2011 - 15:52)
и в чем проявляется "такая фигня"?

И это ты письками мерился с denizkin'ым, кто из вас лучший разработчик...

denizkin
В данном случае суррогатный ключ, явно лишний. Как часто ты смотришь по id что в ячейке? smile.gif Как часто в эту таблицу будут писаться данные? Последнее будет происходить явно чаще, и лишний уникальный ключ будет сказываться на производительности на вставку.

Спустя 1 час, 24 минуты, 20 секунд (21.04.2011 - 08:55) denizkin написал(а):
kirik
Я согласен с тобой полностью,но это я ж сказал глупый бзик никак не отучусь! Бум исправляться! smile.gif

Спустя 4 минуты, 16 секунд (21.04.2011 - 09:00) kirik написал(а):
Цитата (denizkin @ 21.04.2011 - 01:55)
Бум исправляться!

Приду, проверю mad.gif

Спустя 49 минут, 18 секунд (21.04.2011 - 09:49) neadekvat написал(а):
denizkin, приведенная структура "таблицы меток".. ээ.. ну, скажем, ее нельзя использовать для списков друзей, к примеру. Такие таблицы пойдут для свойств, которых будет две-три штуки каждого, и создавать под каждое из них таблицу обломно.

К тому же, даже при такой структуре, список свойств стоит вынести в отдельную таблицу и в type_object писать id этого свойства, а не его имя.

Спустя 3 часа, 44 минуты, 36 секунд (21.04.2011 - 13:34) denizkin написал(а):
neadekvat
Я самую простую структуру привёл всё помойму подходит!
Почему она не подходит?

В чём её проблема объясни! Я лично не вижу проблем!

В таблице связей как предложил снус мы делаем выбор друзей либо по uid и смотрим fid, либо делаем выбор по fid и смотрим uid, и понимаем кто у друга в друзьях))

В моей таблица смотри либо по ид_объекта и чтоб тип объекта был fid, либо смотрим по data и тип объекта так же fid и понимаем кто из юзеров в друзьях у нашего друга! Все теже функции, что и у таблицы связей и естьдополнительные свойства!)) wink.gif


_____________
Курс валют
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.