外键作为主键

4

我设计的表格如下:

table1: 学生
---------------------
PK id
姓名
学号
...
---------------------
table2: 学生成绩 --------------------- PK FK 学生id 数学成绩 英语成绩 ... ---------------------

问题1

如果某些学生根本没有成绩,这是好的表格设计吗?

问题2

如果这是好的设计,那么我该如何在MySQL中将FK设置为PK?我找不到方法。每次我尝试建立上述关系时,SQLYog都会显示以下错误:Can't create table 'students.#sql-a31_2c8e' (errno: 150)

谢谢

更新

我在这里找到了问题2的答案。这只是类型(int、signed int)的问题。


数据库设计。我认为最新的趋势是去规范化数据。当然,学术界可能会要求使用第五范式。 - J-16 SDiZ
这只是速度与灵活性的权衡。 - Kevin Stricker
3个回答

5
我建议您采用更类似以下的方式:

我建议采用以下方式:

table1: students
---------------------
PK id
name
number
...
---------------------

table3: classes
---------------------
pk id
name

table2: students_score
---------------------
fk student_id
fk class_id
score
PK(student_id, class_id)

4
使用 UNIQUEFOREIGN KEY 替代。这将允许您在 students_score 表中使用 FOREIGN KEY,并保持 student_id 列的唯一性。

1
如果有些学生根本没有成绩,这是一个好的表格设计吗?
不,如果有些学生没有成绩,在学生分数表上就不会有(或者不应该有)记录。虽然这样做并不是一个好的设计,这也是为什么你会遇到错误的原因。
你的设计应该类似于:
students
---------------------
PK id
name
number

students_score
---------------------
FK student_id
math_score
english_score
...

考虑在“students_score”表上为您的“student_id”创建一个“UNIQUE”索引,但这将限制每个学生的记录数量为一条,这可能不是您想要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接