4

私はこのようなテーブルを設計しました:

table1: 学生
----------------------
PK ID
名前
番号
...
----------------------

table2: students_score
----------------------
PK FK Student_id
math_score
英語スコア
...
----------------------

質問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

代わりにUNIQUEandを使用してください。FOREIGN 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、これにより、学生ごとのレコード数が 1 つに制限されます。これは、希望するものではない可能性があります。

于 2011-07-05T04:47:08.530 に答える