【发布时间】:2012-08-02 08:19:31
【问题描述】:
我正在为一所学校的学生创建一个数据库。这是我目前所拥有的:
如果您不喜欢阅读,请跳至“简而言之”部分
问题是我对这个设计不满意。我希望grade、subgrade 和id_class 的组合是唯一的,并作为学生表的主键。
我可以删除 student_id 并从 3 中创建一个复合键,但我也不想要这样。也许我应该创建另一个表,比如说combination_id,其中grade、subgrade 和id_class 是外键,还有一个额外的列comb_id 作为表的ID。所有的列都将是主键。但问题是这 3 列仍然可以重复,因为那个额外的列 (comb_id)。例如,我可以拥有相同的 grade、subgrade 和 class_id,但不同的 comb_id 由于表的 4 列 (combination_id) 的复合键,这将使行有效。
简而言之,我希望 students_id 保持表的唯一主键,但作为另一个表的外键,该表是 grades、subgrade 和 class_id 的独特组合。
如果我不够清楚,请在下面的 cmets 中提问,并提前感谢您。
PS 我很抱歉这个难以描述的标题,但我不擅长命名
编辑 1:
为了更清楚:
grade 可以是 1 到 12
subgrade 可以是 a 到 j
id_class 可以是 1 到 30,是你的班级号码
所以一个学生可以来自 7b 班级,他的班级人数 - 5
【问题讨论】:
-
我不明白,一个班的所有学生都应该有不同的成绩吗?
-
当学生换班时你会怎么做,或者这种情况永远不会发生?
-
student_id列有什么问题? -
学生是否只有一个班级,如小学/初中/幼儿学校?
-
@Jodrell 我已经编辑了我的问题,以便更清楚地了解这些列。我希望
student_id成为另一个表中的 FK,其中包含用作其中复合键的那 3 列。如果您仍有问题,请询问
标签: mysql sql database-design uml composite-key