Primary key / Foreign key介紹

Posted by Anthony Chao on 2019-09-06

上一次講完 Avtive record 的解釋後,今天繼續往下看,網站在這邊
2.1 這邊的 model 命名慣例, rails guide 寫了很多說明,但重點其實就是一句話而已:
model 名稱大寫單數, table 名稱小寫複數


2.2 這個段落中提到了 primary key 跟 foreign key,他們是什麼呢?

primary key:

對於某個表格來說,primary key 是其中一個或多個欄位,他們被用來辨識每筆資料,再白話一點來說,就像是每一筆資料在這個表格中的地址,要注意的是每個表格的 primary key 只能有一種設定,就像你家地址不會有兩種寫法,但他可以同時有多個欄位
但,什麼情況下有多個欄位呢? 從 Microsoft 的網站中我找到了一個例子

這張圖表中,每個ProductID 可以不是唯一的,因為同一個產品可以很多個製造商製作,每個製造商也不是唯一的,因為一個製造商可以做很多產品
But!霸特!同時符合同一個製造商跟某個產品的組合只會有一種,這時候這兩個合起來就是這張表格的 primary key

在 rails 中,就算你不寫,在生出每一個表格的時候,他也預設會幫你做出一個 id 的欄位,並用 id 號碼作為 primary key 來辨識每一筆資料

foreign key:

在多個表格的狀況下,foreign key 是用來做不同表格之間的關聯,比方說今天 A 表格是記錄全班同學的名字跟學號, B 表格是全班同學的學號跟成績,他們之間可以用來當作關聯的很明顯是學號,因為這個資訊兩邊都有,我可以從 A 表格的學號去找到 B 表格某位特定同學的成績,因此學號就是 foreign key
在一張表格中,可以跟很多表格有關聯性的欄位,因此很常 foreign key 不只有一個,當然也不一定要是 primary key

明天會接著這篇繼續往下看喔!會介紹基本的 CRUD 操作跟部分覆寫原先設定的方法~

參考資料:
Rails Guide

Foreign and Primary Key Differences

主要與外部索引鍵條件約束





prevent_hack