如何在调查中存储用户答案的​​历史记录? | PostgreSQL?

时间:2019-02-20 20:35:38

标签: sql postgresql

我的任务是创建仅可通过邀请某些人获得的调查问卷。

调查要求:

1)一个人可以参加一次调查。

2)该调查仅在特定时间段内可用。到时间结束时,无法进行调查。

3)一项调查可能有很多问题。同时,一个问题可以在许多调查中重复使用。

4)调查包含不同类型的问题。例如:用于注释的文本字段,多项选择题以及可能包含多个答案的问题。

5)调查有2种类型:参与和csi。

6)管理员可以编辑问题目录和提供的答案。同样,我需要以更改之前的形式存储用户答案的​​历史记录。

我正准备为此将来的应用程序创建数据库结构。作为数据库,我使用 PostgreSQL

现在我有了下一个结构。首先,这种要求是否正确?我目前的结构在第6款中存在问题。如果管理员更改了用户历史记录中的问题文本,则该问题也会更改。这是不正确的。

QUESTIONS表格:

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

OFFERED_ANSWERS表格:

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

SURVEYS表格:

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

SURVEYS_TYPES表格:

CREATE TABLE SURVEYS_TYPES(
    ID SERIAL PRIMARY KEY,
    NAME VARCHAR NOT NULL
);

QUESTIONS_AND_ANSWERS表格:

CREATE table QUESTIONS_AND_ANSWERS(
    ID SERIAL PRIMARY KEY NOT NULL,
    SURVEY_ID UUID,
    QUESTION_ID INT,
    OFFERED_ANSWER_ID INT,
    ALTERNATIVE_ANSWER TEXT,
    FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS (ID),
    FOREIGN KEY (QUESTION_ID) REFERENCES QUESTIONS (ID),
    FOREIGN KEY (OFFERED_ANSWER_ID) REFERENCES OFFERED_ANSWERS (ID)
);

USERS_ANSWERS_HISTORY表格:

CREATE table USERS_ANSWERS_HISTORY(
    ID SERIAL PRIMARY KEY NOT NULL,
    SURVEY_ID UUID,
    QUESTION_ID INT,
    OFFERED_ANSWER_ID INT,
    FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS (ID),
    FOREIGN KEY (QUESTION_ID) REFERENCES QUESTIONS (ID),
    FOREIGN KEY (OFFERED_ANSWER_ID) REFERENCES OFFERED_ANSWERS (ID)
);

您在此结构中还看到哪些其他问题?

0 个答案:

没有答案