4

I designed tables like this:

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

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

Question 1

If some students doesn't have scores at all, is it good table design?

Question 2

If it's good design, then how can I make FK as PK in MySQL? I can't find out how. Everytime I try to make a relation like above SQLYog says this error: Can't create table 'students.#sql-a31_2c8e' (errno: 150)

Thanks

Update

I found an answer of the question 2 from here. This was just a problem of type(int, signed int).

Himanshu
  • 31,810
  • 31
  • 111
  • 133
Sanghyun Lee
  • 21,644
  • 19
  • 100
  • 126

3 Answers3

5

I would suggest something more along these lines:

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)
Kevin Stricker
  • 17,178
  • 5
  • 45
  • 71
4

Use UNIQUE and FOREIGN KEY instead. It will allow you to use the FOREIGN KEY with your students_score table, and maintain the student_id column as unique.

Nahydrin
  • 13,197
  • 12
  • 59
  • 101
1

If some students doesn't have scores at all, is it good table design?

No, if some students doesn't have scores, there won't be (or shouldn't be) records on the students_score table. It is not a good design though, and that's why you get errors.

Your design should be something similar to:

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

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

Consider creating an UNIQUE index for your student_id on the students_score table, but that will limit your number of records per student to one, which maybe is not what you want.

james_bond
  • 6,778
  • 3
  • 28
  • 34