Лучший способ хранения голосов в MySQL с помощью системы голосования php - PullRequest
0 голосов
/ 30 мая 2011

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

авторизованный пользователь может только оценивать понравившийся или disliked_it

- это лучший способ хранить пользователей, которым по рейтингу следует хранить их в виде длинного текста, подобного этому

54654,5145463,19993,3215,69445 

или создание новой таблицы, связывающей rate_id с user_id

и как это влияет на производительность скрипта и mysql

rate_id     int(11) unsigned    NO  PRI     NULL    auto_increment
rate_for_id     int(11) unsigned    NO NULL      
rate_for    enum('article','image','comment')   NO NULL      
liked_it    int(5) unsigned     NO NULL      
disliked_it     int(5) unsigned     NO NULL      
users_rated     longtext    NO      NULL    

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Проблема хранения нескольких значений в одном поле заключается в том, что это приводит к ненормализации вашей базы данных, что затрудняет извлечение данных.Например, когда вам нужно выбрать запись с определенным идентификатором like_it (скажем, получить все темы, которые понравились этому идентификатору), вы не сможете получить ее, поскольку она смешана с множеством других значений.

Итак, чтобы нормализовать вашу базу данных, я настоятельно рекомендую вам разделить ее на другую таблицу, чтобы вы могли гораздо проще извлечь данные для любых последующих нужд.Это точка реляционной базы данных.

2 голосов
/ 30 мая 2011

Определенно сделайте это отдельной таблицей.Хранение нескольких значений в одном поле почти всегда является плохим дизайном и усложняет последующую обработку.Например, чтобы проверить, проголосовал ли кто-то уже, вам нужно выполнить поиск по подстроке в поле «все в одном».Принимая во внимание, что если вы используете отдельную таблицу user_votes, вы просто проверяете, существует ли запись.Это очень ситуативно и зависит от аппаратного и программного обеспечения.Попробуйте оба метода и посмотрите, какой из них лучше в вашем случае, но я предполагаю, что победит вариант с отдельной таблицей.

...