модель данных и логика приложения вопрос? - PullRequest
0 голосов
/ 06 октября 2010

В основном у меня есть эта проблема, у меня есть таблица сообщений (в моей базе данных MySQL)

Post{user_id, post, vote_up(int), vote_down(int)}

поскольку пользователи входят в систему, они получают право голоса, но я хотел проверить, голосовал ли уже пользователь, поэтому я не могу позволить ему проголосовать снова, и, очевидно, я собираюсь использовать сеанс пользователя для контроля за этим для отслеживания ips и т. д.

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

Ответы [ 2 ]

1 голос
/ 06 октября 2010

Вам понадобится еще один стол, например называется "голосов":

Голосование {user_id, post_id}

Я предполагаю, что ваша таблица "Post" имеет первичный ключ (например, "id"), который вы не указали в своем вопросе выше? Тогда «post_id» должен быть внешним ключом для Post # id.

/ Карстен

0 голосов
/ 06 октября 2010

Вам определенно понадобится еще одна таблица, и некоторые первичные и внешние ключи также могут помочь:

Post{post_id(int), user_id(varchar), post(clob)}
Votes{vote_id(int), post_id, user_id, up_down(char)}

Ваши значения столбцов voice_up и voice_down удалены и теперь рассчитываются с помощью запросов:

-- vote_up
select count(*) from votes where post_id = n and up_down = '+';
-- vote_down
select count(*) from votes where post_id = n and up_down = '-';

Должен быть уникальный индекс голосов (post_id, user_id), чтобы один и тот же пользователь не мог голосовать за несколько голосов за один и тот же пост.
Первичный ключ voice_id определять не нужно, но каждая таблица должна иметьпервичный ключ, и если вы не хотите использовать суррогатный ключ, то вы можете определить PK, используя те же столбцы, что и выше, и это также будет служить уникальным индексом, поэтому не нужно определять ot.

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