2013-01-08 268 views
0

我有一个数据模型,即如下...复合主键或外键

  • 的话题可以有多个练习(ExerciseTopic(FK)引用TopicId(PK))
  • 的运动能有多个问题(练习(FK)引用ExerciseId(PK))
  • 一个问题可以有多个(4)AnswerChoices

enter image description here

我想为AnswerChoices表的三部分主键,因为它是这种组合,它将唯一标识每个选择。

  • 我需要在AnswerChoices表数据完整性的目的外键或
  • 将复合主键是足够的?如果外键是必需的,它将是两部分复合外键(ExerciseId,QuestionId)?

示例数据...

  • 主题(T1)
    • 练习E1
      • 问题1(AnswerChoices:A,B,C,d)
      • 问题2(AnswerChoices:A,B,C,d )
      • 问题3(AnswerChoices:A,b,C,d)
    • 练习E2
      • 问题1(AnswerChoices:A,B,C,d)
      • 问题2(AnswerChoices:A,B,C,d)
      • 问题3(AnswerChoices:A,B,C,d)
    • 练习E3
      • 问题1(AnswerChoices:A,b,C,d)
      • 问题2(AnswerChoices:A,b,C,d)
      • 问题3(AnswerChoices:A,B,C,d)
  • 主题(T2)
    • 练习E1
      • 问题1(AnswerChoices:A,B,C, d)
      • 问题2(AnswerChoices:A,b,C,d)
      • 问题3(AnswerChoices:A,b,C,d)
    • 练习E2
      • 问题1(AnswerChoices:A,B,C,d)
      • 问题2(AnswerChoices:A,B,C,d)
      • 问题3(AnswerChoices:一, b,C,d)
    • 练习E3
      • 问题1(AnswerChoices:A,b,C,d)
      • 提问2(AnswerChoices:A,B,C,d)
      • 问题3(AnswerChoices:A,B,C,d)

回答

1

看起来像你会需要AnswerChoices中的四列键:{TopicID,ExerciseID,QuestionID,ChoiceID}。表“AnswerChoices”应该有一个foreign key (TopicID, ExerciseID, QuestionID) references Questions (TopicID, ExerciseID, QuestionID)

0

并不需要是一个“或”
能有复合和外国
一种选择

Exercise: 
PK TopicID FK to Topic 
PK ExerciseID 

Question: 
PK TopicID FK to Exercise 
PK ExerciseID FK to Exercise 
PK QuestionID 

AnswerChoices: 
PK TopicID FK to Question 
PK ExerciseID FK to Question 
PK QuestionID FK to Question 
PK ChoiceID 

UserAnsers: 
PK UserID FK to Users 
PK TopicID FK to AnswerChoices 
PK ExerciseID FK to AnswerChoices 
PK QuestionID FK to AnswerChoices 
PK ChoiceID FK to AnswerChoices 

如果用户只能选择一个答案,然后采取PK掉ChoiceID