【问题标题】:Normalizing survey database标准化调查数据库
【发布时间】:2014-07-13 01:15:51
【问题描述】:

所以我正在尝试规范化我的数据库并且无法弄清楚如何做到这一点(我对这一切都很陌生)。

我有 5 张桌子正在玩。第一个有我所有的数据,是我原来的超级表。其他 4 个是新的标准化版本。请注意,Joe Blow 条目只是一个示例,实际上我在所有这些上都有数千个条目,除了答案表(我试图用数千个新条目填充的那个):

表格:问题(原始非规范化表格)

unique_ID (PK) |答案 |问题 | p名称

2000 |是 |你对生活快乐吗? |乔吹


我的新表实际上是相同的,除了这次我使用所有键:

表格:答案

unique_ID (PK) | answer_ID (FK) | question_ID (FK) | person_ID (FK)


所以这就是说,我试图弄清楚如何使用 insert into 语句来完成这项工作。其他表将 ID 与数据相匹配,并且它们当前已填充:

表格:answers_only

​​>

answer_ID (FK) |回答

3555 |是的


表格:questions_only

​​>

question_Id (FK) |问题

4231 |你对生活快乐吗?


表:用户

person_ID (PK,FK) | p名称

2212 |乔吹


所以基本上第一部分是这样的: 插入答案(person_ID, answer_ID, question_ID) VALUES(person_ID, answer_ID, questionID)

我只是不知道如何获得这些值

【问题讨论】:

    标签: sql join normalize


    【解决方案1】:

    我会考虑两种方法。第一个将有这些表:

    person - PersonId, name, etc
    Survey - SurveyId, name, etc
    Question - QuestionId, text, etc
    Answer - AnswerId, text, etc
    
    SurveyQuestion - SurveyId, QuestionId, etc
    SurveyAnswer - SurveyId, QuestionId, PersonId, AnswerId, etc
    

    第二个没有答案表,而 SurveyAnswer 表将有一个 varchar 字段作为答案,而不是 AnswerId 字段。

    关于 Question、Answer、SurveyQuestion 和 SurveyAnswer 表中的等,我喜欢为我的所有记录加上时间戳。然而,这只是我。

    【讨论】:

      【解决方案2】:

      根据您描述架构的方式,Table: Questions 实际上在3NF 中。
      1NF -> 表是平的(即一个答案列中没有两个答案)
      2NF -> 表列都是主键上的functionally dependent作为一个整体(即答案,问题, person 都依赖于 unique_id)
      3NF -> 非候选键上的表列不是 functionally dependent

      Note: 我会从answers 表中删除unique_id 键,这似乎是多余的。

      对于插入,您可以对每一列使用子查询

      INSERT INTO answers(person_ID,answer_ID,question_ID)
      SELECT (SELECT person_ID FROM user WHERE pName = 'Joe Blow'),(SELECT answer_ID FROM answers_only WHERE answer = 'Yes'), (SELECT question_ID FROM questions_only WHERE question = 'Are you Happy with Life?')
      

      【讨论】:

      • Joe Blow 条目只是一个示例。我需要使用数千个名字进行海量数据传输。
      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2018-05-19
      • 2017-11-29
      • 2019-10-22
      • 1970-01-01
      相关资源
      最近更新 更多