|
|
|
| Хочу создать таблицу со списком друзей:
---------------------
userID - юзер, friendID - друг
---------------------
userID \\ friendID
в колонке userID будет ид юзера, а напротив ид его друга. Если у userID будет 30 друзей, то получается надо создать 30 строк в которых строка userID будет повторятся, а напротив нее перечислять друзей.
Правильный ли это метод? И возможно ли создать структуру так что б избежать повторений? | |
|
|
|
|
|
|
|
для: ruslanaxti
(27.03.2011 в 05:57)
| | А вы нормализуйте таблицу, т.е. разбейте её на несколько. Для связи userID friendID лучше создать отдельную таблицу из двух столбцов, сколько у пользователей друзей, столько и записей будет в таблице. Так как будут использовать только числа - эта таблица будет очень маленькой, а все операции с ней очень быстрыми. | |
|
|
|
|
|
|
|
для: cheops
(27.03.2011 в 11:06)
| | у меня база данных myisam. Связать не получится. Но мне нужно не количество друзей, там прописать, а id каждого друга, что б при необходимости получить его данные по id. Я прочитал в инете что данные можно писать в одной ячейке через точку с запятой. Тогда напротив userID можно было бы перечислить все id друзей не создавая множества строк.
Только не знаю как это сохранять через точку с запятой и какой тип данных колонки нужен для этого
Напишите кто знает, если так можно сохранять | |
|
|
|
|
|
|
|
для: ruslanaxti
(28.03.2011 в 01:17)
| | >у меня база данных myisam. Связать не получится.
Я под связью имею в виду не внешние ключи, а просто реляционную связь, которую можно будет реализовать либо через вложенные запросы, либо через соединения.
>Но мне нужно не количество друзей, там прописать, а id каждого друга, что б при необходимости
>получить его данные по id.
Именно это я и предлагаю, о количестве речи пока не идет.
>Я прочитал в инете что данные можно писать в одной ячейке через точку с запятой.
Плохая идея - намучаетесь с извлечением, с производительностью и с редактированием. Отдельная таблица гораздо лучше. Т.е. вместо записи в таблице друзей
предлагаю отдельную таблицу с записями вида
56 - 45
56 - 4
56 - 89
56 - 90
56 - 102
| Когда вам потребуется список друзей, вы просто обратитесь к этой отдельной таблице по идентификатору пользователя (в данном случае 56).
>Только не знаю как это сохранять через точку с запятой и какой тип данных колонки нужен
>для этого
>Напишите кто знает, если так можно сохранять
Лучше отказаться от этой идеи - потом потребуются гораздо большие усилия на нормализацию данных. | |
|
|
|
|
|
|
|
для: cheops
(28.03.2011 в 11:42)
| | Спасибо большое, все очень понятно написано. В начале я именно так имел ввиду, но как там я и говорил, если имеется допустим 30 друзей то надо будет создать 30 строк, нельзя ли это как нибудь иначе написать чтоб уместилось в одну строку? Или нет необходимости, если допустим в таблице имеется 5000 строк. Поиск по ним будет быстрым? | |
|
|
|
|
|
|
|
для: ruslanaxti
(28.03.2011 в 19:39)
| | Можно, но 30 строк у вас будут занимать меньше места, чем одна строка с числами через пробел или запятую (при условии, конечно, что вы вынесите эти связи в отдельную таблицу) и работать они будут быстрее, чем строка.
>Поиск по ним будет быстрым?
Да, в любом случае он будет быстрее строки с числами (при условии, конечно, что вместо одной таблицы у вас появится две: одна для данных пользователей, другая - для связей друзей друг с другом). | |
|
|
|