我设计了这样的表:
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)的问题。
答案 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)
改为使用UNIQUE
和FOREIGN KEY
。它允许您将FOREIGN KEY
与students_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
索引,但这会将每位学生的记录数限制为一,这可能不是您想要的。