В основном у меня есть эта проблема. У меня есть таблица сообщений (в моей базе данных mysql).
Post{user_id, post, vote_up(int), vote_down(int)}
потому что пользователи входят в систему, а затем получают голосование, но я хотел проверить, проголосовал ли пользователь, поэтому я не могу позволить им проголосовать снова, и, очевидно, я собираюсь использовать сеанс пользователя для управления этим противостоянием для отслеживания ips и т.д.
поэтому я думал, что мне нужно создать другую таблицу или лучше подход.
Вам понадобится другая таблица, например. "голосами":
Проголосовать {user_id, post_id}
Я предполагаю, что ваша таблица "Почта" имеет первичный ключ (например, "id" ), который вы не указали в своем вопросе выше? Затем "post_id" должен быть внешним ключом для Post # id.
/Карстен
Вам определенно понадобится другая таблица, и некоторые первичные и внешние ключи тоже помогут:
Post{post_id(int), user_id(varchar), post(clob)}
Votes{vote_id(int), post_id, user_id, up_down(char)}
Значения столбца vote_up и vote_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), чтобы предотвратить множественное голосование одного и того же пользователя в том же сообщении.
Первичный ключ vote_id не должен определяться, но каждая таблица должна иметь первичный ключ, и если вы не хотите использовать суррогатный ключ, тогда вы можете определить PK, используя те же столбцы, что и выше, и это будет служить уникальный индекс тоже, поэтому ot не нужно определять.