代码之家  ›  专栏  ›  技术社区  ›  Nurzhan Nogerbek

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

  •  0
  • Nurzhan Nogerbek  · 技术社区  · 7 年前

    我有创建调查的任务,只有邀请某些人才能进行。

    勘察要求:

    1)一人一次。

    2)调查仅在特定时期内有效。当时间结束时,调查变得不可用。

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

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

    5)调查有两种类型:参与调查和犯罪现场调查。

    6)管理员可以编辑问题和提供答案的目录。同样,我需要将用户的历史答案存储在更改前的表单中。

    我正在尝试为这个未来的应用程序创建数据库结构。作为我使用的数据库 波斯特雷斯尔 .

    现在我有了下一个结构。首先,这样的要求是否正确?我现在的结构有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 回复  |  直到 7 年前