簡體   English   中英

擁有由整數和外鍵組成的主鍵,或者具有自動遞增的主鍵和外鍵,哪個更好?

[英]Which is better, have a primary key composed of an integer and a foreign key or have a primary key autoincrement and a foreign key?

我有一個問題,數據庫管理員具有以下結構:

在此處輸入圖片說明

如您所見,表TCModulo的主鍵是ID_moduloID_sistema的組合鍵,這是表TCSistemas的外鍵。

我認為這是更好的那場ID_modulo從表TCModulo必須與一個AUTO_INCREMENT約束的主鍵,和現場ID_sistema必須只有一個外鍵。

哪一個更好?

TCmodulo的PK是(ID_modulo)還是(ID_modulo,ID_sistema)取決於表中的內容。 除非您告訴我們,否則我們無法回答您的問題。 大概一行中的ID_modulo值就是您引用某些模數的方式。 您必須告訴我們該怎么做。 但是在那之后(對於每一列)(並考慮到可能發生的情況),對於哪幾列列是主鍵的候選者別無選擇。

表中子行值唯一的一組列稱為超鍵。 包含唯一子行的任何子行都是唯一的。 因此,任何包含超鍵的列集都是一個超鍵。 不包含(較小)唯一子行的子行稱為候選鍵。 因此,不包含(較小)超級鍵的超級鍵為候選鍵。 選擇表的候選鍵之一作為主鍵。

如果ID_modulo在整個應用程序中唯一確定一個模塊,則(ID_modulo)將是唯一的,內部沒有更小的唯一子行,因此它將是候選關鍵字。 這將是唯一的密鑰,因此它將成為主鍵。

如果ID_modulo僅針對每個Sistema唯一地確定一個模塊,則(ID_modulo,ID_sistema)將是唯一的,並且沒有較小的唯一子行(假設可以有多個Sistemo),因此它將是候選密鑰。 這將是唯一的密鑰,因此它將成為主鍵。

因此,可以選擇哪些候選鍵作為主鍵取決於您的應用程序如何引用模數。 之后,關於候選鍵就別無選擇。 在這兩種情況下,只有一個候選鍵,因此也沒有關於主鍵的選擇。

至於您是否應該在整體上擁有唯一的ID,還是僅在呼吸系統內擁有唯一的ID,或兩者兼而有之,這取決於其他人體工程學問題。 例如,您在stackoverflow中是唯一的kentverger(現在;用戶名不一定是唯一的),但在家里可能是唯一的Kent。 例如,您可能更喜歡今天撥打7月4日這樣的電話,而不是第185天。但是請注意,任何候選密鑰都是唯一的標識符。 因此,如果ID_modulo僅在呼吸系統內唯一,則(ID_modula,ID_sistema)總體上還是唯一的。

請注意,這與模數本身與皮膚的多對一無關。 它與構成唯一子行的列有關。

我總是喜歡對主鍵使用標識(自動遞增),因為它可以使頁面更好地群集,並避免磁盤碎片。 無論如何,您都需要一個外鍵ID_sistema,因此也要添加它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM