是否會發生我們設計了一個不需要主鍵的表?當我們不需要我們的表的主鍵?
回答
號
主鍵做了很多幕後的東西,即使你的應用程序從未使用它。
例如:clustering提高了效率(因爲heap tables亂七八糟)。
更不用說,如果任何人需要在桌子上做某些事情,需要拉一個特定的行,而您沒有主鍵,那麼您就是壞人。
同意:只需添加主鍵並不再考慮它。 – 2011-03-31 06:31:49
主鍵不是強制性的,但創建沒有主鍵的表不是一個好習慣。 DBMS在PK上創建自動索引,但是你可以使列獨一無二併爲其編制索引。 user_name
列中的users
表通常會做出獨特的索引,因此您可以在此選擇跳過PK。但是仍然是一個壞主意,因爲PK可以作爲外鍵用於參照完整性。
一般來說,你應該幾乎總是在表中有PK,除非你有很強的理由證明沒有PK。
鏈接表(在多對多關係中)可能沒有主鍵。但是,我個人也喜歡在這些表中擁有PK。
是的。
如果你有一個表總是被完全取出,並且被其他表零引用,比如某種獨立的設置或者配置表,那麼沒有一個主鍵有意義,一些人認爲在這種情況下增加一個PK可能會欺騙正常使用這種表格。
這是罕見,也可能是它最經常做的是做錯誤,但他們確實存在,並且這種情況可能是有效的。
你爲什麼要在這樣的表中重複行?當你說你永遠不想「獲取」單個行時,這是否意味着你永遠不想更新它們,並且你將每一行都替換爲每一次數據更改?或者你的意思是這些數據是隻讀的? – sqlvogel 2011-03-31 09:45:11
@dportas:你說的一切。 ''unique''是防止重複行的一種方法。沒有PK是指示該表不應該從另一個表引用的方式。對於這個(通常無鑰匙表非常罕見)最常見的用例是典型的單記錄設置表。我認爲不應該忽略定義一個PK,但是要求每個表都必須有一個是錯誤的。如果是這樣,我們不會有選擇。 – 2011-04-01 07:12:37
@crjh:同意「主要」鍵總是多餘的。我對你的答案的解釋是你的意思是「沒有鑰匙」。如果你的意思是:「一個表應該至少有一個候選鍵,其中一個可能被稱爲主鍵」然後我同意。一個約束有一行的表不是一個例外,因爲它隱式地有一個(空)鍵。 – sqlvogel 2011-04-01 08:37:33
取決於。
什麼是主鍵/唯一鍵?
在關係數據庫設計中,唯一鍵可以唯一標識表中的每一行,並且與超鍵概念密切相關。一個唯一的密鑰包含一列或一組列。如果沒有使用NULL值,那麼表中沒有兩個不同的行可以在這些列中具有相同的值(或值的組合)。根據其設計,表格可以具有任意多個唯一鍵,但最多隻有一個主鍵。
所以,當你沒有區分(唯一標識)的每一行,
你不必使用主鍵
例如,一大桌的日誌,
無使用主鍵時,您可以擁有相對較小的數據大小並且插入速度更快
...但檢索速度要慢得多。回到關於聚簇與堆表的討論。如果沒有主鍵,則從表中檢索任何內容需要更長的時間。 – rockerest 2011-03-31 07:45:38
- 1. 我們的關鍵字何時需要?
- 2. 當我們創建表時,我們是否需要指定關係的基數?
- 3. 爲什麼我們需要analysis_export當我們有analysis_port
- 4. 當我們有點子時,爲什麼我們需要Anaconda?
- 5. 當我們使用xchg時,我們是否需要防護
- 6. 我們需要在jQuery的
- 7. 我們是否需要引用另外兩個表的表上的主鍵?
- 8. 當我們需要使用curveTo()和setCurve()
- 9. 當我們需要多個EntityManager?
- 10. 當我們需要接口C#
- 11. 我們應該做的,當我們需要克隆的對象深深
- 12. 爲什麼我們需要鍵入 '( 「+ I +」)',而不僅僅是 '(我)'
- 13. 我們是否需要爲主鍵指定「not null」? Oracle/SQL
- 14. 我們是否需要將主鍵添加到多列索引?
- 15. 我們可以添加主鍵破錶
- 16. 當我們獲取C#中的屬性時,我們是否需要鎖定?#
- 17. DavLockDB:我們需要什麼?
- 18. 我們是否需要ezpublish_legacy?
- 19. 我們需要指針嗎?
- 20. 我們需要ignite.sh腳本?
- 21. 如何從引導我們需要爲我們的項目
- 22. 我們總是需要關閉我們提供的ModelViewViewController嗎?
- 23. 我的表不需要主鍵,我應該使用它嗎?
- 24. Ruby:爲什麼我們不需要`attr_accessor`?
- 25. 當我們有內核時,爲什麼我們需要驅動程序?
- 26. 當我們可以拋出TypeErrors時,爲什麼我們需要NaN值?
- 27. 當我們已經有一階邏輯時,爲什麼我們需要PDDL?
- 28. 當我們已經有mapDispatchToProps時,爲什麼我們需要使用redux-thunk
- 29. 爲什麼我們需要filebeat當我們可以將日誌發送到Logstatsh
- 30. 當我們計算Gflop時,我們是否需要考慮指數計算?
當您在表 – 2011-03-31 06:28:37
@Shakti @EBAG中只有一行時,這是真實的,但是1)何時會發生這種情況?和2)限制你的數據總是隻有一行是不好的做法。設計數據庫時考慮未來更好。我相信你是半開玩笑的,但如果問題是合法的,那麼EBAG需要知道,即使只有一行,主鍵也不是一個好主意。 – rockerest 2011-03-31 06:36:52
@rockerest - 當你想要一個表格來表示各種配置選項。您希望使用不同的列,以便爲每個選項使用適當的數據類型(例如,如果您想要某個東西的重試值,則將其存儲爲int)。在這種情況下,你想確保只有一行。當然,在這種情況下,理想的(理論上的)主鍵將是沒有列的主鍵,但我不知道任何允許您聲明它的SQL產品。 – 2011-03-31 06:52:37