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表中的外键
- 复合主键是否足够?如果外键是必需的,它将是由两部分组成的复合外键(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)
- 练习E1
- 专题(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)
- 练习E1
外键(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中去掉