I am making a database of students in one school.Here is what I have so far:
如果您不喜欢阅读,请跳至“简而言之”部分
问题是我对这个设计并不满意。我想要的组合grade
, subgrade
and id_class
是唯一的并作为学生表的主键。
我可以删除student_id
并从 3 中制作一个复合键,但我也不想要那样。也许我应该再做一张桌子combination_id
where grade
, subgrade
and id_class
是外键并且有一个额外的列comb_id
用作表的 ID。所有列都将是主键。但问题是,由于额外的列,这 3 列仍然可以重复(comb_id
)。例如我可以有同样的grade
, subgrade
and class_id
但不同comb_id
由于表的 4 列的复合键,这将使该行有效(combination_id
).
简而言之我想要students_id
保留表的唯一主键,但作为另一个表的外键,该表在某种程度上是唯一的组合grades
, subgrade
and class_id
.
如果我不够清楚,请在下面的评论中询问并提前感谢您。
PS 我很抱歉这个不具描述性的标题,但我不擅长命名
EDIT 1:更清楚地说:grade
可以是 1 到 12subgrade
可以是 a 到 jid_class
可以是 1 到 30,这是你在课堂上的号码
所以一个学生可以来自 7b 班,他在班级的人数 - 5
不要混淆以下概念唯一键 and 主键。你可以很好地添加一个唯一键 http://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_unique_constraint跨越三列grades
, subgrade
and class_id
。这样就没有两行了可以有 http://dev.mysql.com/doc/refman/5.6/en/constraint-primary-key.html这三列的值相同。当您写道您不想将这三个作为复合主键时,我不确定复合唯一补充键是否会更好。如果不是,您必须澄清复合键何时可以接受。
要创建唯一键,可以使用以下 SQL陈述 http://dev.mysql.com/doc/refman/5.6/en/alter-table.html:
ALTER TABLE students ADD UNIQUE gsc (grades, subgrade, class_id);
这个单词gsc
只有一个我根据关键列的首字母组成的名称;使用您想要的任何名称,因为除非您想识别某些内容中的密钥,否则这并不重要EXPLAIN
输出或类似的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)