2009-11-20 216 views
8

如果我不需要主鍵,我應該不向數據庫添加一個主鍵?是否可以不使用主鍵當我不需要一個

+16

幾乎沒有任何情況下您不需要主鍵。基本上,如果表沒有主鍵,它不是表 - 它只是一堆數據。 – 2009-11-20 15:33:00

+2

它可能與您的問題沒有關係,但我確實需要問:*您爲什麼不覺得您需要一個?* – 2009-11-20 15:33:03

+0

您能否向我們提供有關您正在處理的情況的更多信息?主鍵並不總是必要的,但如果我們知道你在做什麼,我們可能會給你一些更好的建議。 – TLiebe 2009-11-20 15:34:21

回答

13

主鍵唯一標識表中的一行。

索引和/或聚集的事實是一個物理實現問題,與邏輯設計無關。

您需要一張表來表達意義。

3

如果你不需要主鍵,那麼不要使用主鍵。我通常需要主鍵,所以我通常使用它們。如果你有相關的表,你可能需要主鍵和外鍵。

+0

+1 short and sweet :) – James 2009-11-20 15:33:00

0

主鍵將始終幫助查詢性能。因此,如果您需要使用「鍵」查詢「外鍵」,或者將其用作查找,那麼可以使用外鍵。

+1

我不明白,主鍵有助於提升性能嗎?如果你不需要它們,你將不會使用它來查找記錄。所以,沒有任何好處。 – brainfck 2009-11-20 15:32:58

+0

那桌子會用什麼?大多數情況下,我們需要表格來存儲一些信息,並且您將從中查找值。 – 2009-11-20 15:35:19

+1

Luke101應該發佈他的用例,如果他需要,我們會看到。 – brainfck 2009-11-20 15:37:07

2

是的,但只是在同樣的意義上,如果你不打算在事故中不使用安全帶是可以的。也就是說,在需要時付出很大的利益是很小的代價,即使你認爲你不需要它,未來也會有機會。不同的是你很多更可能需要一個主鍵比進入車禍。

你也應該知道,如果你不這樣做的話,某些數據庫系統會爲你創建一個主鍵,所以你不會在引擎中發生什麼。

+5

我不同意。我拒絕佩戴安全帶,因爲它們阻止我充分接觸到我的啤酒。 但我永遠不會創建沒有PK的表。 – 2009-11-20 16:11:29

+0

@Rev奇聞趣事,你需要的是一個更具戰略意義的啤酒持有者。來吧2010年。 – JeffO 2010-03-08 17:56:54

40

你確實需要一個主鍵。你現在還不知道。

+6

我曾經以爲我不需要主鍵或者...現在我知道更好。 – MiseryIndex 2009-11-20 16:07:10

+2

+1因爲這最準確地反映了現實。我可以看到一個可能不需要一個但很少的情況。 – Murph 2009-11-20 16:10:45

+1

除了當你不需要主鍵時,你現在知道它。但這是一個不尋常的例子。更好地發揮它安全和錯誤的贊成PK。 – MarkPflug 2010-11-08 19:20:50

0

我不知道。我已經使用了幾個表格,其中只有一行和一列。將始終只是單行和單列。沒有外鍵關係。

爲什麼我要在這個主鍵上?

+0

爲什麼會有一個表? – 2009-11-20 16:44:09

+0

你需要存儲一條信息?像系統寬泛的偏好?每個人都需要這些數據,但是你不想爲了獲得那一塊數據而創建一個全新的東西。 – ElGringoGrande 2009-11-20 20:12:22

+3

啊。但是你確實想在這個表上使用主鍵。還有一個檢查約束將主鍵限制爲單個值。因爲否則,你會在6個月後回來,發現有人爲你添加了另一行,你的應用程序正在拾取哪一個是任意的... – 2010-03-04 15:46:54

0

主鍵主要是正式定義來幫助參考完整性,但是如果表格非常小​​或者不可能包含唯一數據,那麼這是一個不必要的開銷。 在表上定義索引通常可以用來暗示主鍵而不用正式聲明。 但是,您應該考慮定義主鍵對於開發人員和架構生成或SQL開發工具非常有用,因爲讓元數據有助於理解,並且一些工具依靠此來正確定義模型中的主鍵/外鍵關係。

0

那麼......

關係型數據庫中的每個表都需要一個主鍵。正如已經指出的那樣,主鍵是唯一標識記錄的數據...如果您有一個連接兩個不同表的NM表,但您可以唯一地識別出一個「ID」字段,那麼您可能會失去一個「ID」字段通過您加入的兩列中的值來確定記錄。 (複合主鍵)

有一個表沒有主鍵是針對第一範式,並沒有任何的關係數據庫

2

不,除非你能找到,「這個數據庫的例子會做如果table_x沒有主鍵,則工作得更好。「

如果不需要性能,數據完整性和規範化,您可以進行永不使用主鍵的爭論,可能不需要安全性和備份/恢復功能,但最終,您會將您的大男孩褲子並加入數據庫實現的真實世界

1

是的,一個表應該總是有一個主鍵...除非你不需要唯一地標識它中的記錄(我喜歡做出絕對的語句,並立即與之矛盾)

什麼時候你不需要唯一地標識表中的記錄?幾乎從不,我之前做過這樣的事情,比如審計日誌表。或刪除,並不會受到任何限制。基本上結構化的日誌。

0

你應該總是有一個主鍵,即使它只是在ID上。也許NoSQL是你所追求的(只是問)?

0

這很大程度上取決於你如何確定你不需要。如果您有一絲懷疑,請添加一個 - 稍後您會感謝您。一種指標,如果您存儲的數據可能與您的數據庫中的其他數據有關聯。

我能想到的一種用例是一種日誌類型的表格,您可以在其中簡單地轉存一個條目(以便稍後正確處理它們)。如果您要存儲足夠的數據以過濾出相關的消息(如日期),那麼您可能不需要主鍵。當然,爲此使用RDBMS是值得懷疑的。

相關問題