Проектирование базы данных для голосования с одним и несколькими вариантами ответов

Я уже проверил Эта тема, но это не совсем ответило на то, что я ищу.

У меня уже есть стол topics с полями t_id а также t_title, Я хочу добавить функцию голосования по каждой из этих тем. У каждой темы может быть несколько голосов, и каждое голосование может иметь один или несколько ответов. Тема не нуждается в голосовании. Только одно голосование может быть «активным» одновременно, что означает, что только это активное голосование будет показано пользователям.


Я думал о чем-то вроде этого.

CREATE TABLE votings (
v_id SERIAL NOT NULL PRIMARY KEY,
v_name TEXT NOT NULL,
v_multichoice BOOLEAN NOT NULL,
v_t_id INTEGER NOT NULL /*foreign key*/
);

CREATE TABLE answers (
a_id SERIAL NOT NULL PRIMARY KEY,
a_text TEXT NOT NULL,
a_v_id INTEGER NOT NULL /*foreign key*/
);

CREATE TABLE voting_answers_single (
vas_user VARCHAR(128) NOT NULL,
vas_a_id INTEGER NOT NULL, /*foreign key*/
PRIMARY KEY(vas_user, vas_a_id)
);

CREATE TABLE voting_answers_multi (
vam_id SERIAL NOT NULL,
vam_user VARCHAR(128) NOT NULL,
vam_a_id INTEGER NOT NULL, /*foreign key*/
PRIMARY KEY(vam_id, vam_user, vam_a_id)
);

В дополнение к этому я хочу добавить еще одно поле topics, который topics.t_active_voting,

Причина, по которой я использую VARCHAR для пользователя в voting_answer_ Таблицы, потому что вся система полностью анонимна, нет учетных записей пользователей, но каждый пользователь должен иметь право голосовать только один раз. Так что есть еще один вопрос. Какое значение я должен использовать для этого идентификатора пользователя? Возможно, некоторые куки или идентификатор сессии? Я использую PHP.


Так что это была бы моя идея, но, поскольку я не очень опытен в проектировании баз данных, я хотел бы попросить совета, прежде чем начать. Какие-нибудь улучшения?

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector