4

我设计了这样的表格:

表1:学生
---------------------
PK 编号
姓名
数字
...
---------------------

表 2:students_score
---------------------
PK FK student_id
数学分数
英语分数
...
---------------------

问题 1

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

问题2

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

谢谢

更新

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

4

3 回答 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)
于 2011-07-05T04:47:25.407 回答
4

使用UNIQUEandFOREIGN KEY代替。它将允许您将FOREIGN KEY与您的students_score表一起使用,并保持该student_id列的唯一性。

于 2011-07-05T04:44:53.153 回答
1

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

不,如果某些学生没有分数,students_score 表中不会有(或不应该有)记录。这不是一个好的设计,这就是为什么你会出错。

您的设计应该类似于:

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

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

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

于 2011-07-05T04:47:08.530 回答