具有单选和多选答案的投票数据库设计

时间:2018-01-15 13:48:46

标签: php database postgresql database-design

我已经检查了this topic,但这并没有完全回答我正在寻找的内容。

我已经有一个包含字段topicst_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。

所以这就是我的想法,但由于我对数据库设计不是很有经验,所以在开始之前我想先征求意见。任何改进?

是的,我知道我应该正确地在表中创建外键。如果你同意这是一个很好的解决方案,我会在实际项目中这样做。

0 个答案:

没有答案