我已经检查了this topic,但这并没有完全回答我正在寻找的内容。
我已经有一个包含字段topics
和t_id
的表t_title
。我想为每个主题添加一个投票功能。每个主题都可以有多个投票,每个投票可以是单个或多个答案。主题不需要投票。一次只能进行一次投票,这意味着onyl将向用户显示此主动投票。
我想到了这样的事情。
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_
的原因是,因为整个系统完全是匿名的,所以没有用户帐户,但每个用户都应该被允许投票一次。所以还有另一个问题。我应该为此用户ID使用哪个值?可能是一些cookie或会话ID?我正在使用PHP。
所以这就是我的想法,但由于我对数据库设计不是很有经验,所以在开始之前我想先征求意见。任何改进?
是的,我知道我应该正确地在表中创建外键。如果你同意这是一个很好的解决方案,我会在实际项目中这样做。