2010-02-02 195 views
3

除了在表中標識唯一列之外,什麼是主鍵?難道這不是通過簡單地在列上使用自動增量約束來完成的?我知道PK和FK被用來關聯不同的表,但是不能通過使用連接來完成?爲什麼使用主鍵?

基本上數據庫在使用主鍵連接時如何提高性能?

回答

4

主要是爲了與外鍵參照完整性,,當你有一個PK也將查找值

+0

如果你沒有在where子句中使用PK,那麼你仍然需要表掃描。 – ScaryAardvark 2010-02-02 19:05:36

+0

是的..你是對的...所以我:-) .....如果你有一個PK(默認情況下創建一個聚集索引),你永遠不會得到一個表掃描(因爲聚集索引擁有所有表本身的數據)......但是,如果你的WHERE子句沒有被覆蓋,你將會得到索引掃描 – SQLMenace 2010-02-02 19:13:51

1

一些的PK 時在後臺創建一個索引,這樣就不需要表掃描只是一個自動遞增的列。此外,你通常加入使用PK和FK。必須有一些關係才能進行連接。此外,大多數DBMS默認會自動索引PK,這可以提高連接性能以及根據ID查詢特定記錄。

2

RDBMS提供程序通常經過優化,可以與具有主鍵的表一起使用。大多數商店統計信息有助於優化查詢計劃這些統計信息對性能非常重要,特別是在較大的表上,並且如果沒有主鍵,它們的工作方式不會相同,並且最終會導致無法預測的查詢響應時間。

大多數數據庫最佳實踐書籍都建議使用主鍵創建所有表,但沒有例外,遵循此慣例將是明智之舉。沒有太多事情說初級軟件開發人員不止是建立一個沒有參照完整性的數據庫!

1

您可以在查詢中沒有主鍵的情況下加入,但是,您必須定義一個主鍵來強制實施數據完整性約束,至少在SQL Server中。 (外鍵等)

此外,這裏是一個有趣的讀取你Primary Keys

1

在Microsoft Access中,如果您有SQL Server的鏈接表,則源表必須具有主鍵才能使鏈接表可寫。至少,Access 2000和SQL Server 6.5就是這種情況。它可能與更高版本不同。

0

關鍵是關於數據完整性以及識別。通過在數據庫中設置一個約束來保證密鑰的唯一性,以避免違反密鑰的「壞」數據。以這種方式保證數據完整性規則的事實正是使密鑰可用作標識符的原因。這適用於任何關鍵。按照慣例,每個表的一個鍵稱爲「主鍵」,但不會使其他鍵不太重要。

實際上,我們需要能夠對所有類型的數據(不僅僅是數字)執行唯一性規則,以滿足數據質量和可用性的要求。