現有一資料表 codes 記錄有哪些 code:
| id | code | department |
|---|---|---|
| 1 | a | A |
| 2 | a | B |
| 3 | b | A |
| 4 | c | A |
其中有部分 code 比較特殊,所以會另外分組出來。
我建立了一個資料表 code_group 來記錄有哪些 code 是需要另外分組出來的:
| code |
|---|
| a |
| b |
我想要表達兩資料表關聯性,所以試著在資料表 codes 設定欄位 code 為外鍵,參考 code_group 的 code 欄位:
ALTER TABLE codes
ADD CONSTRAINT fk_code
FOREIGN KEY (code) REFERENCES code_group(code);
但我發現這樣行不通,因為 codes 資料表的 code 欄位有部份內容未存在於 code_group 資料表,違反外鍵限制。
請問有何建議?謝謝。
因為我不知道你有沒有其他設計
所以我現在的理解是你因為 code_group 的 data 缺少導致 codes 在做 reference 的時候出現問題
但是 code_group 是後來新增的
所以你應該是先下 query 從 codes 找到所有 code
在 insert 到 group_code
最後才新增 FK
不要建 foreign key
外來鍵是一個(或數個)指向另外一個表格主鍵的欄位。外來鍵的目的是確定資料的參考完整性 (Referential Integrity)。換言之,只有被准許的資料值才會被存入資料庫內。
建立 foreign key 的目的
就是要確保「這個 table 裡的欄位必須存在於那個 table」
請參考這篇寫得很清楚的範例
如果你還是堅心要建 foreign key 來表示關聯性
那麼就
ALTER TABLE code_group
ADD CONSTRAINT fk_code
FOREIGN KEY (code) REFERENCES codes(code);