Tsql 复合主键或外键

Tsql 复合主键或外键,tsql,database-design,Tsql,Database Design,我有一个数据模型如下 一个主题可以有多个练习(练习主题(FK)参考主题ID(PK)) 一个练习可以有多个问题(练习(FK)参考练习ID(PK)) 一个问题可以有多(4)个答案选择 我想为AnswerChoices表提供一个由三部分组成的主键,因为正是这种组合将唯一标识每个选项 出于数据完整性目的,我是否需要AnswerChoices表中的外键 复合主键是否足够?如果外键是必需的,它将是由两部分组成的复合外键(ExerciseId、QuestionId) 样本数据 主题(T1) 练习

我有一个数据模型如下

  • 一个主题可以有多个练习(练习主题(FK)参考主题ID(PK))
  • 一个练习可以有多个问题(练习(FK)参考练习ID(PK))
  • 一个问题可以有多(4)个答案选择

我想为AnswerChoices表提供一个由三部分组成的主键,因为正是这种组合将唯一标识每个选项

  • 出于数据完整性目的,我是否需要AnswerChoices表中的外键
  • 复合主键是否足够?如果外键是必需的,它将是由两部分组成的复合外键(ExerciseId、QuestionId)
样本数据

  • 主题(T1)
    • 练习E1
      • 问题1(回答:a、b、c、d)
      • 问题2(答案:a、b、c、d)
      • 问题3(答案:a、b、c、d)
    • 练习E2
      • 问题1(回答:a、b、c、d)
      • 问题2(答案:a、b、c、d)
      • 问题3(答案:a、b、c、d)
    • 练习E3
      • 问题1(回答:a、b、c、d)
      • 问题2(答案:a、b、c、d)
      • 问题3(答案:a、b、c、d)
  • 专题(T2)
    • 练习E1
      • 问题1(回答:a、b、c、d)
      • 问题2(答案:a、b、c、d)
      • 问题3(答案:a、b、c、d)
    • 练习E2
      • 问题1(回答:a、b、c、d)
      • 问题2(答案:a、b、c、d)
      • 问题3(答案:a、b、c、d)
    • 练习E3
      • 问题1(回答:a、b、c、d)
      • 问题2(答案:a、b、c、d)
      • 问题3(答案:a、b、c、d)
答案选项中似乎需要一个四列键:{TopicID、ExerciseID、QuestionID、ChoiceID}。表“AnswerChoices”应该有一个
外键(TopicID,ExerciseID,QuestionID)引用问题(TopicID,ExerciseID,QuestionID)
不需要是“或”
可以有复合型和外型
一种选择

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中去掉