如果我不需要主鍵,我應該不向數據庫添加一個主鍵?是否可以不使用主鍵當我不需要一個
回答
主鍵唯一標識表中的一行。
索引和/或聚集的事實是一個物理實現問題,與邏輯設計無關。
您需要一張表來表達意義。
如果你不需要主鍵,那麼不要使用主鍵。我通常需要主鍵,所以我通常使用它們。如果你有相關的表,你可能需要主鍵和外鍵。
+1 short and sweet :) – James 2009-11-20 15:33:00
是的,但只是在同樣的意義上,如果你不打算在事故中不使用安全帶是可以的。也就是說,在需要時付出很大的利益是很小的代價,即使你認爲你不需要它,未來也會有機會。不同的是你很多更可能需要一個主鍵比進入車禍。
你也應該知道,如果你不這樣做的話,某些數據庫系統會爲你創建一個主鍵,所以你不會在引擎中發生什麼。
我不同意。我拒絕佩戴安全帶,因爲它們阻止我充分接觸到我的啤酒。 但我永遠不會創建沒有PK的表。 – 2009-11-20 16:11:29
@Rev奇聞趣事,你需要的是一個更具戰略意義的啤酒持有者。來吧2010年。 – JeffO 2010-03-08 17:56:54
你確實需要一個主鍵。你現在還不知道。
我曾經以爲我不需要主鍵或者...現在我知道更好。 – MiseryIndex 2009-11-20 16:07:10
+1因爲這最準確地反映了現實。我可以看到一個可能不需要一個但很少的情況。 – Murph 2009-11-20 16:10:45
除了當你不需要主鍵時,你現在知道它。但這是一個不尋常的例子。更好地發揮它安全和錯誤的贊成PK。 – MarkPflug 2010-11-08 19:20:50
我不知道。我已經使用了幾個表格,其中只有一行和一列。將始終只是單行和單列。沒有外鍵關係。
爲什麼我要在這個主鍵上?
爲什麼會有一個表? – 2009-11-20 16:44:09
你需要存儲一條信息?像系統寬泛的偏好?每個人都需要這些數據,但是你不想爲了獲得那一塊數據而創建一個全新的東西。 – ElGringoGrande 2009-11-20 20:12:22
啊。但是你確實想在這個表上使用主鍵。還有一個檢查約束將主鍵限制爲單個值。因爲否則,你會在6個月後回來,發現有人爲你添加了另一行,你的應用程序正在拾取哪一個是任意的... – 2010-03-04 15:46:54
主鍵主要是正式定義來幫助參考完整性,但是如果表格非常小或者不可能包含唯一數據,那麼這是一個不必要的開銷。 在表上定義索引通常可以用來暗示主鍵而不用正式聲明。 但是,您應該考慮定義主鍵對於開發人員和架構生成或SQL開發工具非常有用,因爲讓元數據有助於理解,並且一些工具依靠此來正確定義模型中的主鍵/外鍵關係。
那麼......
關係型數據庫中的每個表都需要一個主鍵。正如已經指出的那樣,主鍵是唯一標識記錄的數據...如果您有一個連接兩個不同表的NM表,但您可以唯一地識別出一個「ID」字段,那麼您可能會失去一個「ID」字段通過您加入的兩列中的值來確定記錄。 (複合主鍵)
有一個表沒有主鍵是針對第一範式,並沒有任何的關係數據庫
不,除非你能找到,「這個數據庫的例子會做如果table_x沒有主鍵,則工作得更好。「
如果不需要性能,數據完整性和規範化,您可以進行永不使用主鍵的爭論,可能不需要安全性和備份/恢復功能,但最終,您會將您的大男孩褲子並加入數據庫實現的真實世界
是的,一個表應該總是有一個主鍵...除非你不需要唯一地標識它中的記錄(我喜歡做出絕對的語句,並立即與之矛盾)
什麼時候你不需要唯一地標識表中的記錄?幾乎從不,我之前做過這樣的事情,比如審計日誌表。或刪除,並不會受到任何限制。基本上結構化的日誌。
你應該總是有一個主鍵,即使它只是在ID上。也許NoSQL是你所追求的(只是問)?
這很大程度上取決於你如何確定你不需要。如果您有一絲懷疑,請添加一個 - 稍後您會感謝您。一種指標,如果您存儲的數據可能與您的數據庫中的其他數據有關聯。
我能想到的一種用例是一種日誌類型的表格,您可以在其中簡單地轉存一個條目(以便稍後正確處理它們)。如果您要存儲足夠的數據以過濾出相關的消息(如日期),那麼您可能不需要主鍵。當然,爲此使用RDBMS是值得懷疑的。
- 1. 當我們不需要我們的表的主鍵?
- 2. 我的表不需要主鍵,我應該使用它嗎?
- 3. 是否可以使用React和打字稿一起使用而不需要transpiling
- 4. 我是否需要知道PHP,使自舉一個WordPress主題?
- 5. RedBean是否需要「id」主鍵?
- 6. 我是否需要爲每個表定義一個新的主鍵字段?
- 7. 在doctrine2中是否可以有一個不是主鍵的自動增量列?
- 8. 是否有可能使一個函數自我意識,而不需要外部
- 9. 您需要使用theme.appcompat主題 - 但我是,不是嗎?
- 10. 當不級聯字段時,您是否需要使用@Transient?
- 11. 我需要一個按鍵代碼,它可以正常工作
- 12. 當我使用Apache Tiles時,是否需要使用XHTML?
- 13. 如果我的複合索引是唯一的,我需要一個主鍵嗎?
- 14. 是否可以在表中寫約束主鍵不等於column4
- 15. 當需要移除模塊以節省內存時,是否可以使用requirejs
- 16. 是否可以調用使用一個主要活動多個XML佈局,而無需創建新的活動
- 17. 當我們使用xchg時,我們是否需要防護
- 18. 我可以在DQL中使用「ON」關鍵字還是需要使用Native Query?
- 19. 休眠:Forign鍵需要是主鍵
- 20. 是否可以使用COM可見類型構建.NET DLL,而不需要VS需要提升?
- 21. 如果我使用render_to_response,是否需要有一個HttpRequest對象?
- 22. 我是否需要使用htaccess的時候美化一個URL
- 23. 如果我的應用程序中不需要帳戶,可以公開我的firebase數據庫是否可以?
- 24. 我需要實現一個可以多次使用的函數
- 25. jQuery AJAX呼叫 - 是否可以取消不需要的呼叫?
- 26. 是否可以在asp.net中驗證控件,但不需要它?
- 27. 是否有可能修改ASP.NET以不再需要runat =「server」?
- 28. 使用終端機時,我是否需要不斷登錄github?
- 29. 是否可以在一個鍵下設置一個NSMutableDictionary鍵?
- 30. 我是否需要使用關鍵字關閉SQL Server連接?
幾乎沒有任何情況下您不需要主鍵。基本上,如果表沒有主鍵,它不是表 - 它只是一堆數據。 – 2009-11-20 15:33:00
它可能與您的問題沒有關係,但我確實需要問:*您爲什麼不覺得您需要一個?* – 2009-11-20 15:33:03
您能否向我們提供有關您正在處理的情況的更多信息?主鍵並不總是必要的,但如果我們知道你在做什麼,我們可能會給你一些更好的建議。 – TLiebe 2009-11-20 15:34:21