2014-01-27 38 views
1

大家好我在書或博客的某個地方閱讀過,在SQL中有經驗法則,我們必須在PRIMARY KEY和AUTO-INCREMENT屬性的每個表中創建ID列。如果我在我的表格中使用手機號碼作爲用戶ID,該怎麼辦?我應該在我的表中創建ID列還是手機號碼是我的表中的主鍵足夠了?是否有必要在SQL表中創建ID列?

+0

有沒有這樣的經驗法則。是的,代理鍵是可以的,但它們不是必需的,而且它們被用於何處,最好的做法是提供一個唯一的自然鍵。移動號碼不是一個不好的鑰匙,因爲用戶偶爾會更改他們的號碼 – Strawberry

+0

@Strawberry:最佳做法是提供獨特的自然鑰匙和代用品嗎?你能引用一些權威嗎? – eggyal

+2

不,沒有具體的規則來做到這一點。取決於你的數據模型。但是,如果用戶的手機號碼可以更改,那麼這可能不適合PK,並且您需要一個單獨的ID。 – OldProgrammer

回答

2

不,這不是必要的,但對於任何缺少關聯表的建議。

這個Identity列提供了一個唯一的,不變的數據標識符,它使設置外鍵關係變得非常簡單。

關聯表不會有這些標識列之一,因爲它本身沒有數據,它們通常由2個或更多外鍵列組成。

1

只要密鑰是唯一的 - 它可以用作主密鑰。如果沒有可用作主鍵的列,則應使用附加的ID列,因爲它不是唯一的或可以具有NULL值。整數列也是首選。所以電話號碼的作品。

0

創建SQL時,它必須具有唯一的可識別密鑰,這意味着當您需要查詢特定表中的記錄時,必須有唯一的列以便於識別。

主鍵是分配給表中特定行的特殊唯一 值的數據庫術語。

在一些相當特殊的情況下,您甚至可以從多個列中創建主鍵而不是一個。他們將其稱爲複合鍵。簡而言之,創建你的桌子,並將你的主鍵設置爲手機號碼,如果他們每個人都是唯一的,我認爲是這種情況。

讓我舉個例子。社會安全號碼也被設置爲美國和歐洲的表格中的主鍵;它不是一個增量鍵。

1

如果你想使用手機號碼作爲主鍵,你可以

create table MyData(
phonenumber int not null primary key, 
fname varchar(25), 
lname varchar(25) 
... 
) 

但是這未必是最好的做法。因爲電話號碼可能會改變。一旦它屬於客戶A現在屬於客戶B.使用此模型,最終可能會遇到一個問題,您無法僅根據電話號碼提供您的唯一客戶。如果您將自增指數添加爲主鍵,則您始終可以通過該ID引用唯一客戶。 這是更安全,更清潔,更直觀,易於編碼的。它尤其。當您添加外鍵等時會有所幫助。通過在開始時選擇一個錯誤的主鍵,您可能會讓自己陷入重大困境,可能會持續一兩年。

你還可以做的是添加一個自增指數作爲主鍵,並將一個UNIQUE約束放在電話號碼上,這樣電話號碼必須是唯一的才能被輸入到數據庫中。這主要是爲了數據完整性而完成的,例如,如果有人輸錯某些東西,現在又匹配另一個數字,它會立即被捕獲。我仍然不會推薦這個,因爲你可能會遇到一個問題,這個限制可能會引發一個有效的情況。

所以我會用自己的遞增指數作爲主鍵,使事情簡單,並添加電話號碼字段,它不能爲空(這將是另一個約束:))

相關問題