2014-09-01 13 views
1

我將從一個例子開始,以便清楚我想要問什麼。如何跟蹤不同表中的ID(主)?

Templates 
template_id, Name 
1, Light Blue 
2, Red 
3, Sky Blue 
4, Yellow 

template_id是主要和自動增量。

Products 
product_id, product_name, template_id 

Users 
user_id, user_name, template_id 

Categories 
category_id, category_name, template_id 

還有6個表格更像這樣引用template_id。

默認 template_id在所有這些表是(這意味着沒有模板分配)

我需要的方式在一些地方保存這些引用,這樣,如果我嘗試刪除模板我的PHP應用程序會檢查它是否在使用中。我知道這是一種外鍵概念,但我不確定在外鍵列中是否可以有零值,所以我感覺有點卡住了。你有什麼建議來解決這個問題?如何跟蹤模板ID在不同表格中的使用位置?

UPDATE

我嘗試作爲建議增加外鍵...

ALTER TABLE `Templates` 
ADD CONSTRAINT `Templates_ibfk_1` 
FOREIGN KEY (`template_id`) REFERENCES `Products` (`template_id`), 
ADD CONSTRAINT `Templates_ibfk_2` 
FOREIGN KEY (`template_id`) REFERENCES `Users` (`template_id`) 

我在哪裏可以檢查是否這些都增加?我嘗試使用PhpMyAdmin查看Templates表的結構,但在那裏找不到任何提及外鍵的東西?

+3

不要在產品/用戶/類別中爲template_id使用'0'值,請使用'null';那麼使用外鍵約束就沒有問題了 – 2014-09-01 13:15:22

+0

是的,我可以更改爲Null。但是你是否說在使用外鍵之後將其改爲NULL?你能舉個例子嗎? – TigerTiger 2014-09-01 13:17:10

+1

我__am__說改爲null後使用外鍵約束;那麼如果你試圖刪除一個使用的模板,這個約束會阻止你這樣做 – 2014-09-01 13:18:56

回答

0

在Mysql中使用參考視圖,這將有助於您日後自動管理/跟蹤記錄。

ALTER TABLE `Templates` ADD CONSTRAINT `Templates_ibfk_1` FOREIGN KEY (`template_id`) REFERENCES `Products` (`template_id`),ADD CONSTRAINT `Templates_ibfk_2` FOREIGN KEY (`template_id`) REFERENCES `Users` (`template_id`) 

欲進一步瞭解詳情,請閱讀本Link

+0

是t_Templates與我上面例子中的「模板」相同還是它是一個新表? – TigerTiger 2014-09-01 13:34:55

+0

不,我會編輯。ALTER TABLE' Templates' ADD CONSTRAINT'Templates_ibfk_1' FOREIGN KEY('template_id')REFERENCES'Products'('template_id'),ADD CONSTRAINT' Templates_ibfk_2' FOREIGN KEY('template_id') – 2014-09-01 13:36:11

+0

Ok多一個問題 - 我是否也需要更改所有不同表中的單個template_id列以添加外鍵?或者我只需要改變「模板」表,並將所有其他表中的默認值更改爲NULL? – TigerTiger 2014-09-01 13:40:50

0

我會使用InnoDB我的表,建立外鍵約束,讓MySQL的需要,而不是試圖以編程方式複製這一功能照顧的問題。

我也避免使用0默認模板和創建默認(無模板),其將被template_id = 1

保持0和/或-1的錯誤。

+0

嗨 - 我需要根據「punitha subramani v」的建議在父表上設置外鍵或者它必須是子表中的單個列? – TigerTiger 2014-09-01 14:39:19

+0

一旦你創建了你的表格,父表格和子表格就必須有這些字段的索引。然後通過在STRUCTURE視圖中打開您的子表並選擇RELATIONSHIP查看器來建立RELATIONSHIPS。你會看到你想要的每個索引字段的下拉菜單。您可以選擇刪除和​​更新如何傳播(級聯或限制)。 – 2014-09-01 14:48:04