модель данных и логика приложения вопрос?

0

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

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

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

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

Теги:
database
logic

2 ответа

1
Лучший ответ

Вам понадобится другая таблица, например. "голосами":

Проголосовать {user_id, post_id}

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

/Карстен

  • 0
    да, я извиняюсь, я не положил это + поднять голос от себя, я просто думал, потому что пользователи могут голосовать за или против, так что в основном, если пользователь голосует за, а затем голосует против, мне нужно удалить предыдущий голос, который он сделал, его как stackoverflow, если вы понимаете, что я имею в виду, но я думаю, это больше связано с логикой приложения, а не с уровнем базы данных
  • 0
    Вы можете расширить мою таблицу голосования с помощью поля «Направление», которое может быть 1 (вверх) или -1 (вниз). Таким образом, пользователь сможет отменить свой голос «за» или «против», но не сможет повторить тот же голос.
0

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

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 не нужно определять.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню