我有创建调查的任务,只有邀请某些人才能进行。
勘察要求:
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)
);
你认为这个结构还有什么问题?