現有一資料表 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);