0

我有一个数据模型如下...

  • 一个主题可以有多个练习(ExerciseTopic(FK) 引用 TopicId(PK))
  • 一个练习可以有多个问题(练习(FK)引用练习Id(PK))
  • 一个问题可以有多个 (4) AnswerChoices

在此处输入图像描述

我想为 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)
4

2 回答 2

1

看起来您需要在 AnswerChoices 中使用一个四列键:{TopicID、ExerciseID、QuestionID、ChoiceID}。并且表“AnswerChoices”应该有一个foreign key (TopicID, ExerciseID, QuestionID) references Questions (TopicID, ExerciseID, QuestionID).

于 2013-01-08T14:27:00.213 回答
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

于 2013-01-08T14:30:36.310 回答