Внешний ключ как первичный ключ - PullRequest
4 голосов
/ 05 июля 2011

Я разработал таблицы следующим образом:

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

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

Вопрос 1

Если у некоторых учеников вообще нет оценок, это хороший дизайн таблицы?

Вопрос 2

Если это хороший дизайн, то как я могу сделать FK как PK в MySQL?Я не могу узнать как.Каждый раз, когда я пытаюсь установить отношение, подобное приведенному выше, SQLYog сообщает об этой ошибке: Can't create table 'students.#sql-a31_2c8e' (errno: 150)

Спасибо

Обновление

Я нашел ответ вопрос 2 отсюда .Это была просто проблема типа (int, подписано int).

Ответы [ 3 ]

5 голосов
/ 05 июля 2011

Я бы предложил что-то еще в этом духе:

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 голосов
/ 05 июля 2011

Используйте UNIQUE и FOREIGN KEY вместо.Это позволит вам использовать FOREIGN KEY с таблицей students_score и поддерживать столбец student_id как уникальный.

1 голос
/ 05 июля 2011

Если у некоторых учеников вообще нет оценок, хорошо ли это оформление стола?

Нет, если у некоторых студентов нет результатов, в таблице Students_score не будет (или не должно быть) записей. Это не очень хороший дизайн, и поэтому вы получаете ошибки.

Ваш дизайн должен быть похож на:

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

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

Подумайте о создании индекса UNIQUE для вашего student_id в таблице students_score, но это ограничит количество ваших записей на одного учащегося одной, что, возможно, не то, что вы хотите.

...