外键作为主键

时间:2011-07-05 04:40:39

标签: mysql database-design foreign-keys primary-key sqlyog

我设计了这样的表:

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

table2: students_score
---------------------
PK FK student_id
math_score
english_score
...
---------------------

问题1

如果有些学生根本没有分数,那桌面设计是不是很好?

问题2

如果这是好的设计,那我怎样才能在FK中将FK作为PK?我不知道怎么做。每当我尝试建立如上所述的关系时,SQLYog会说这个错误:Can't create table 'students.#sql-a31_2c8e' (errno: 150)

由于

更新

我找到了问题2的答案 from here。这只是type(int,signed int)的问题。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:4)

改为使用UNIQUEFOREIGN KEY。它允许您将FOREIGN KEYstudents_score表一起使用,并将student_id列保持为唯一。

答案 2 :(得分:1)

如果有些学生根本没有分数,那桌面设计是不是很好?

不,如果有些学生没有分数,则student_score表上不会有(或不应该)记录。这不是一个好的设计,这就是你得到错误的原因。

您的设计应该类似于:

students
---------------------
PK id
name
number

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

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