簡體   English   中英

外鍵作為主鍵

[英]Foreign key as Primary key

我設計了這樣的表格:

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

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

問題 1

如果有些學生根本沒有分數,那是不是很好的表格設計?

問題2

如果它是好的設計,那么我怎樣才能在 MySQL 中將 FK 作為 PK? 我不知道怎么做。 每次我嘗試像上面那樣建立關系時,SQLYog 都會說這個錯誤: Can't create table 'students.#sql-a31_2c8e' (errno: 150)

謝謝

更新

從這里找到了問題 2的答案。 這只是類型(int,signed int)的問題。

我會建議更多類似的東西:

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)

請改用UNIQUEFOREIGN KEY 它將允許您將FOREIGN KEYstudents_score表一起使用,並將student_id列保持為唯一。

如果有些學生根本沒有分數,那是不是很好的表格設計?

不,如果某些學生沒有分數,students_score 表中不會有(或不應該有)記錄。 這不是一個好的設計,這就是為什么你會出錯。

您的設計應該類似於:

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

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

考慮在students_score表上為你的 student_id 創建一個UNIQUE索引,但這會將每個學生的記錄數限制為一個,這可能不是你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM