2011-03-31 50 views
12

是否會發生我們設計了一個不需要主鍵的表?當我們不需要我們的表的主鍵?

+9

當您在表 – 2011-03-31 06:28:37

+0

@Shakti @EBAG中只有一行時,這是真實的,但是1)何時會發生這種情況?和2)限制你的數據總是隻有一行是不好的做法。設計數據庫時考慮未來更好。我相信你是半開玩笑的,但如果問題是合法的,那麼EBAG需要知道,即使只有一行,主鍵也不是一個好主意。 – rockerest 2011-03-31 06:36:52

+1

@rockerest - 當你想要一個表格來表示各種配置選項。您希望使用不同的列,以便爲每個選項使用適當的數據類型(例如,如果您想要某個東西的重試值,則將其存儲爲int)。在這種情況下,你想確保只有一行。當然,在這種情況下,理想的(理論上的)主鍵將是沒有列的主鍵,但我不知道任何允許您聲明它的SQL產品。 – 2011-03-31 06:52:37

回答

19

主鍵做了很多幕後的東西,即使你的應用程序從未使用它。

例如:clustering提高了效率(因爲heap tables亂七八糟)。

更不用說,如果任何人需要在桌子上做某些事情,需要拉一個特定的行,而您沒有主鍵,那麼您就是壞人。

+0

同意:只需添加主鍵並不再考慮它。 – 2011-03-31 06:31:49

1

主鍵不是強制性的,但創建沒有主鍵的表不是一個好習慣。 DBMS在PK上創建自動索引,但是你可以使列獨一無二併爲其編制索引。 user_name列中的users表通常會做出獨特的索引,因此您可以在此選擇跳過PK。但是仍然是一個壞主意,因爲PK可以作爲外鍵用於參照完整性。

一般來說,你應該幾乎總是在表中有PK,除非你有很強的理由證明沒有PK。

鏈接表(在多對多關係中)可能沒有主鍵。但是,我個人也喜歡在這些表中擁有PK。

+0

我也爲我的多對多表添加一個PK。不知道爲什麼,但我覺得他們更安全:) – rockerest 2011-03-31 06:42:46

+0

@rockerest在這裏。 :) – Nishant 2011-03-31 06:43:50

+1

多對多表也應該有一個主鍵!不是因爲感覺更安全,而是有快速識別記錄的方式。正如你在(幾乎)所有其他表格中所需要的一樣,正如其他答案中所描述的那樣。 – 2011-03-31 07:54:57

6

是的。

如果你有一個表總是被完全取出,並且被其他表零引用,比如某種獨立的設置或者配置表,那麼沒有一個主鍵有意義,一些人認爲在這種情況下增加一個PK可能會欺騙正常使用這種表格。

這是罕見,也可能是它最經常做的是做錯誤,但他們確實存在,並且這種情況可能是有效的。

+0

你爲什麼要在這樣的表中重複行?當你說你永遠不想「獲取」單個行時,這是否意味着你永遠不想更新它們,並且你將每一行都替換爲每一次數據更改?或者你的意思是這些數據是隻讀的? – sqlvogel 2011-03-31 09:45:11

+0

@dportas:你說的一切。 ''unique''是防止重複行的一種方法。沒有PK是指示該表不應該從另一個表引用的方式。對於這個(通常無鑰匙表非常罕見)最常見的用例是典型的單記錄設置表。我認爲不應該忽略定義一個PK,但是要求每個表都必須有一個是錯誤的。如果是這樣,我們不會有選擇。 – 2011-04-01 07:12:37

+0

@crjh:同意「主要」鍵總是多餘的。我對你的答案的解釋是你的意思是「沒有鑰匙」。如果你的意思是:「一個表應該至少有一個候選鍵,其中一個可能被稱爲主鍵」然後我同意。一個約束有一行的表不是一個例外,因爲它隱式地有一個(空)鍵。 – sqlvogel 2011-04-01 08:37:33

3

取決於。

什麼是主鍵/唯一鍵?

在關係數據庫設計中,唯一鍵可以唯一標識表中的每一行,並且與超鍵概念密切相關。一個唯一的密鑰包含一列或一組列。如果沒有使用NULL值,那麼表中沒有兩個不同的行可以在這些列中具有相同的值(或值的組合)。根據其設計,表格可以具有任意多個唯一鍵,但最多隻有一個主鍵。

所以,當你沒有區分(唯一標識)的每一行,
你不必使用主鍵

例如,一大桌的日誌,
無使用主鍵時,您可以擁有相對較小的數據大小並且插入速度更快

+1

...但檢索速度要慢得多。回到關於聚簇與堆表的討論。如果沒有主鍵,則從表中檢索任何內容需要更長的時間。 – rockerest 2011-03-31 07:45:38

相關問題