我们需要通过询问我们的联系人各种问题并记录他们的回答来调查他们。有些问题是标准问题,必须包含在每个调查中(默认问题),而其他问题则特定于个别调查并根据需要创建。
为了有效管理这些问题,我们必须存储默认问题和个性化问题,以及联系人的回复。用户应该能够添加新问题、存档旧问题并按照他们喜欢的任何顺序排列它们。
认为默认问题遵循多对多关系,因为每个默认问题可以在多个调查中使用,并且每个调查可以包含多个默认问题。
另一方面,还认为个性化问题遵循一对多关系,因为它们是特定调查所独有的并且不会重复使用。对于这些问题,我们将有一个表格将特定问题直接链接到调查表,包括它们的顺序。
根据不同的角色将问题分为不同的表关系、多对一(个性化问题)与多对多(每个调查问卷上的默认问题)是否有意义?
我尝试将所有问题保留在一个表中,但对我来说,将所有问题都存储在问题表中没有意义,因为其中绝大多数问题不会在所有调查中使用。
最好选择多对多。
CREATE TABLE surveys
(
survey_id UUID,
PRIMARY KEY (survey_id)
);
CREATE TABLE questions
(
questions_id UUID,
PRIMARY KEY (questions_id)
);
CREATE TABLE survey_question
(
survey_id UUID,
questions_id UUID,
priority INTEGER NOT NULL,
PRIMARY KEY (survey_id, questions_id),
FOREIGN KEY (survey_id)
REFERENCES surveys (survey_id),
FOREIGN KEY (questions_id)
REFERENCES questions (questions_id)
);
这种方法的优点是灵活性 - 您可以在调查中包含或不包含某些问题。将来,如果您改变主意并决定不提供个性化问题,这将为您解决问题。