【问题标题】:PostgreSQL | How to store user answers in survey?PostgreSQL |如何在调查中存储用户答案?
【发布时间】:2019-02-19 17:56:18
【问题描述】:

我的任务是创建只有通过邀请某些人才能进行的调查。一个人可以参加一次调查。该调查仅适用于特定时间段。我正在尝试为这个未来的应用程序创建数据库结构。作为数据库,我使用 PostgreSQL。

据我了解,一项调查可能有很多问题。同时,一个问题可以在许多调查中重复使用。这是多对多的关系。

这就是我创建表来解决第一个任务的方式。如果我在某个地方遗漏或做错了,请纠正我。

QUESTIONS 表:

CREATE TABLE QUESTIONS(
    ID SERIAL PRIMARY KEY,
    TEXT TEXT NOT NULL
);

SURVEYS 表:

CREATE TABLE SURVEYS(
    ID UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
    NAME VARCHAR NOT NULL,
    DESCRIPTION TEXT,
    START_PERIOD TIMESTAMP,
    END_PERIOD TIMESTAMP
);

SURVEYS_QUESTIONS 表:

CREATE TABLE SURVEYS_QUESTIONS(
    ID SERIAL,
    SURVEY_ID UUID NOT NULL,
    QUESTION_ID INT NOT NULL,
    PRIMARY KEY (ID),
    FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS (ID) ON DELETE CASCADE,
    FOREIGN KEY (QUESTION_ID) REFERENCES QUESTIONS (ID) ON DELETE CASCADE
);

现在我不明白如何正确地将用户与调查联系起来,以及如何正确存储用户答案。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    使用SURVEYS 表的外键和USERS 表的外键创建一个TAKEN_SURVEYS 表。如果您想确保每个用户只能有一个调查记录,请在 TAKEN_SURVEYS 表上创建一个唯一索引。

    【讨论】:

    • 您好!谢谢!我偷不明白我最终的数据库结构是什么样子的。在 StackOverflow 中我找到了 post 。您如何看待答案中提出的结构?
    • 类似的东西。和我说的差不多。
    【解决方案2】:

    考虑用两个新表替换您的最后一个表。这将与客户-订单-产品的经典 101 示例(此处为用户-调查-问答)保持一致。

    CREATE TABLE USER_SURVEYS (
        ID SERIAL,
        USER_ID UUID NOT NULL,
        SURVEY_ID UUID NOT NULL,
        PRIMARY KEY (ID),
        FOREIGN KEY (USER_ID) REFERENCES USERS (ID) ON DELETE CASCADE,
        FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS (ID) ON DELETE CASCADE
    );
    
    CREATE TABLE USER_SURVEYS_QA (
        ID SERIAL,
        USER_SURVEY_ID INT NOT NULL,
        QUESTION_ID INT NOT NULL,
        ANSWER VARCHAR(255),
        OTHER_SPECIFY VARCHAR(255),
        PRIMARY KEY (ID),
        FOREIGN KEY (USER_SURVEY_ID) REFERENCES USER_SURVEYS (ID) ON DELETE CASCADE,
        FOREIGN KEY (QUESTION_ID) REFERENCES QUESTIONS (ID) ON DELETE CASCADE
    );
    

    【讨论】:

    • 您好!谢谢您的回答。所以最后据我了解,我需要拒绝我提议的SURVEYS_QUESTIONS 表,对吗?我需要创建你的 2 表而不是那个表,对吗?那么最终的结构是什么?就从 4 张桌子?
    • 首先,数据库设计没有对错之分。它更像是一门艺术而不是科学。您应该始终以规范化和参照完整性为目标,但要与您的应用程序、系统和团队访问数据的方式保持一致。此解决方案只有 一种 方式。随着您的整体需求的更多背景,可以培养正确的模式:您的组织是什么?什么类型的调查?调查是如何设计和管理的?用户如何接受您的调查?什么类型的问题(例如,多项选择)/答案(例如,开放式)?
    猜你喜欢
    • 1970-01-01
    • 2020-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多