我有表1與主鍵user_id
和表2其中user_id
是一個外鍵。MySQL - 也使用外鍵作爲主鍵
表2中每user_id
只能有1條記錄,沒有記錄就不能存在。
問題:表2中的user_id
可以同時爲外鍵和主鍵,如果是,這是一個好主意,有什麼優點/缺點?
我有表1與主鍵user_id
和表2其中user_id
是一個外鍵。MySQL - 也使用外鍵作爲主鍵
表2中每user_id
只能有1條記錄,沒有記錄就不能存在。
問題:表2中的user_id
可以同時爲外鍵和主鍵,如果是,這是一個好主意,有什麼優點/缺點?
是的,你可以做到這一點(你應該從數據庫設計的角度)。
但是,如果user_id
是表2中的主鍵,請考慮這意味着什麼。實際上,表2中的每一行都對應於某個用戶,但您已經有了一個表,其中每一行都與用戶對應:表1.這提出了一個問題:「爲什麼不把表2中的所有數據都放入表1中的可空列中?」。畢竟,擁有兩個表格意味着您必須進行兩次查詢才能獲取此數據而不是一個。
現在也有一些場景中這種做法可能是一個好主意:如果你有很多用戶,但在表2中只有幾行
這可能是一個好主意,但它取決於你的應用程序的細節。
謝謝。在我的情況中,這是你提到的第一個場景,再加上表2中有很多列的事實,並且還有表3,4等,這些表與表1類似,因此將所有列放置太多。 – CodeVirtuoso
這是有道理的一種情況是,如果你使用[類表繼承](http://stackoverflow.com/a/3579462/1709587),表2代表表1的子類。我想這是一個特殊的您的第一個要點。 –
這樣做的另一個原因是,如果您有兩個不同的表(表A和表B),它們共享表C中的列。例如,您有一個名爲Contacts的表,另一個名爲Employees,另一個名爲People。人名,姓氏等,聯繫人和僱員都代表人。 –
相似的問題(但不是重複):[如何創建也是MySQL的主鍵的外鍵?](http://stackoverflow.com/questions/5575051/how-to-create-foreign-key -that-is-also-primary-key-in-mysql) – naXa