Нужна эффективная схема базы данных mysql для хранения баллов / оценок - PullRequest
0 голосов
/ 14 января 2019

У меня есть четыре основных стола -

1.user(user_id, name,...) 
2. post(post_id, description, ...) 
3.comment(comment_id,user_id,comment,...)
4.reply(reply_id,user_id, reply,...)

и

5.user_post(user_id,post_id)
6.post_comment(post_id,comment_id)

Теперь пользователь может выставлять баллы от 1 до 10 (аналогично оценке) каждому комментарию, ответу и сообщению, и мне также нужно подсчитать общее количество баллов, набранных пользователем, с их содержанием (публикация, комментарий, ответ). В настоящее время у меня есть два варианта.

вариант 1: Я могу иметь большую таблицу с именем points и хранить количество баллов за каждый контент в столбце type, который жертвует referential integrity Например .-

points(content_id, type, point, given_by)

OR

вариант 2: Наличие трех отдельных столов, которые не приносят в жертву referential integrity. Например .-

post_point(post_id, point, given_by)
comment_point(comment_id, point, given_by)
reply_point(reply_id, point, given_by)

Итак, что будет лучшим и перспективным вариантом здесь или есть лучшее решение? Спасибо.

1 Ответ

0 голосов
/ 14 января 2019

Независимо от варианта 1 или 2, когда пользователь посещает сообщение, вам необходимо суммировать все подпункты, это стоит дорого.

Предположим, что вариант 2, вы можете сделать:

SELECT SUM(point) FROM post_point where post_id=100

Если за это сообщение тысячи пользователей отдают баллы, утверждение может занять несколько секунд.

Я предлагаю добавить еще 1 столбец баллов в таблицу user / post / comment / reply,

user (user_id, name, ...) → user (user_id, name, point , ...)

post (post_id, description, ...) → post (post_id, description, point , ...)

...

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

Например, пост 100 получил 1 балл, вы можете добавить 1 балл к таблице постов:

UPDATE post SET point=point+1 WHERE post_id=100;

Вы также можете добавить 1 очко в таблицу post_point, если хотите отслеживать или показывать данных пользователей.

INSERT INTO post_point VALUES('100','1','...');

Эффективное место, когда кто-то просматривает это сообщение, вы можете показать баллы только одним оператором SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...