Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Структура таблицы friends (связываем друзей друг с другом)
 
 автор: ruslanaxti   (27.03.2011 в 05:57)   письмо автору
 
 

Хочу создать таблицу со списком друзей:
---------------------
userID - юзер, friendID - друг
---------------------
userID \\ friendID

в колонке userID будет ид юзера, а напротив ид его друга. Если у userID будет 30 друзей, то получается надо создать 30 строк в которых строка userID будет повторятся, а напротив нее перечислять друзей.

Правильный ли это метод? И возможно ли создать структуру так что б избежать повторений?

  Ответить  
 
 автор: cheops   (27.03.2011 в 11:06)   письмо автору
 
   для: ruslanaxti   (27.03.2011 в 05:57)
 

А вы нормализуйте таблицу, т.е. разбейте её на несколько. Для связи userID friendID лучше создать отдельную таблицу из двух столбцов, сколько у пользователей друзей, столько и записей будет в таблице. Так как будут использовать только числа - эта таблица будет очень маленькой, а все операции с ней очень быстрыми.

  Ответить  
 
 автор: ruslanaxti   (28.03.2011 в 01:17)   письмо автору
 
   для: cheops   (27.03.2011 в 11:06)
 

у меня база данных myisam. Связать не получится. Но мне нужно не количество друзей, там прописать, а id каждого друга, что б при необходимости получить его данные по id. Я прочитал в инете что данные можно писать в одной ячейке через точку с запятой. Тогда напротив userID можно было бы перечислить все id друзей не создавая множества строк.

Только не знаю как это сохранять через точку с запятой и какой тип данных колонки нужен для этого
Напишите кто знает, если так можно сохранять

  Ответить  
 
 автор: cheops   (28.03.2011 в 11:42)   письмо автору
 
   для: ruslanaxti   (28.03.2011 в 01:17)
 

>у меня база данных myisam. Связать не получится.
Я под связью имею в виду не внешние ключи, а просто реляционную связь, которую можно будет реализовать либо через вложенные запросы, либо через соединения.

>Но мне нужно не количество друзей, там прописать, а id каждого друга, что б при необходимости
>получить его данные по id.
Именно это я и предлагаю, о количестве речи пока не идет.

>Я прочитал в инете что данные можно писать в одной ячейке через точку с запятой.
Плохая идея - намучаетесь с извлечением, с производительностью и с редактированием. Отдельная таблица гораздо лучше. Т.е. вместо записи в таблице друзей
56 - 45, 4, 89, 90, 102
предлагаю отдельную таблицу с записями вида
56 - 45
56 - 4
56 - 89
56 - 90
56 - 102
Когда вам потребуется список друзей, вы просто обратитесь к этой отдельной таблице по идентификатору пользователя (в данном случае 56).

>Только не знаю как это сохранять через точку с запятой и какой тип данных колонки нужен
>для этого
>Напишите кто знает, если так можно сохранять
Лучше отказаться от этой идеи - потом потребуются гораздо большие усилия на нормализацию данных.

  Ответить  
 
 автор: ruslanaxti   (28.03.2011 в 19:39)   письмо автору
 
   для: cheops   (28.03.2011 в 11:42)
 

Спасибо большое, все очень понятно написано. В начале я именно так имел ввиду, но как там я и говорил, если имеется допустим 30 друзей то надо будет создать 30 строк, нельзя ли это как нибудь иначе написать чтоб уместилось в одну строку? Или нет необходимости, если допустим в таблице имеется 5000 строк. Поиск по ним будет быстрым?

  Ответить  
 
 автор: cheops   (28.03.2011 в 20:07)   письмо автору
 
   для: ruslanaxti   (28.03.2011 в 19:39)
 

Можно, но 30 строк у вас будут занимать меньше места, чем одна строка с числами через пробел или запятую (при условии, конечно, что вы вынесите эти связи в отдельную таблицу) и работать они будут быстрее, чем строка.

>Поиск по ним будет быстрым?
Да, в любом случае он будет быстрее строки с числами (при условии, конечно, что вместо одной таблицы у вас появится две: одна для данных пользователей, другая - для связей друзей друг с другом).

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования