2011-09-13 63 views
1

我知道這是非常基本的,但它在這裏。有關主鍵的一般SQL問題

我想知道你是如何知道哪些列是沒有主鍵的表中的主鍵?有什麼技巧或我應該閱讀的東西?

謝謝您提前

+1

這個問題就像問我應該買什麼類型的汽車。這麼多「取決於」變量,這並不好笑。基本上你看數據,你問自己,我怎樣才能唯一識別一行? –

回答

4

你需要看看你的數據結構。

主鍵必須

  • 從未爲NULL(沒有例外
  • 可靠和唯一標識每個單列

,它幫助,如果它的

  • 小,使用方便
  • 穩定(並沒有改變,或至少不經常)
  • 一列(或最多兩個)

檢查您的數據 - 這列或一組列可以滿足這些要求?

一旦你有這些潛在的主鍵(「候選鍵」) - 考慮你將如何訪問數據,以及可能需要與這個實體相關的其他數據 - 作爲一個有意義的外鍵?你想通過名字引用你的部門嗎?可能不是一個好主意,因爲這個名字可能拼錯了,它可能隨着時間的推移而改變等。通過該部門的辦公地點?也是不好的選擇。但像一個獨特的「部門ID」可能是一個好主意。

如果您在實際數據中沒有找到適合作爲主鍵並且有意義的適當列,那麼引入「代理鍵」是一種常見做法 - 一個額外的列,通常是INT (並且通常像「自動增量」INT),它將用作每行的仿真標識符。如果你這樣做,一個最常見的做法是不要在任何數據屏幕上顯示人工密鑰 - 它對你係統的用戶沒有任何意義 - 所以甚至不要向他們展示它。

檢查這些要求和許多經驗將幫助您找到正確的主鍵。

+0

謝謝marc_s這總結它以及一些其他建議在這裏。 – Maximus

+0

最小化也是一項要求(候選關鍵字必須*不可否認*唯一,而不僅僅是唯一的)。 – sqlvogel

+0

「單列(或最多兩列)」似乎完全是任意的。 – onedaywhen

1

它真的取決於數據本身。您需要確定可以使用哪些字段來唯一標識記錄。

+0

謝謝bluefeet我是這樣傾斜的,但被數據弄糊塗了。 – Maximus

+1

@Maximus它絕對會因表而異。不要問一個普遍的問題,爲什麼不通過詢問有關數據混淆的具體表格來進行練習? –

+0

@Aaron我想這樣做,但表格很大,數據與HR有關,所以我不認爲我的僱主會喜歡我發佈它:-) – Maximus

0

在SQL服務器中,它旁邊會有一個關鍵字。它通常是ID或其中帶有ID的東西。它也是獨特的,通常會增加。當你在SQL中查看它時。在桌面設計下的服務器管理工​​作室,你會看到它與Lil鍵圖標列的頂部。

這是一個獨特的標識符,可以將每條記錄相互解密。有點像每個人有一個ssn。