大家好我在書或博客的某個地方閱讀過,在SQL中有經驗法則,我們必須在PRIMARY KEY和AUTO-INCREMENT屬性的每個表中創建ID列。如果我在我的表格中使用手機號碼作爲用戶ID,該怎麼辦?我應該在我的表中創建ID列還是手機號碼是我的表中的主鍵足夠了?是否有必要在SQL表中創建ID列?
回答
不,這不是必要的,但對於任何缺少關聯表的建議。
這個Identity列提供了一個唯一的,不變的數據標識符,它使設置外鍵關係變得非常簡單。
關聯表不會有這些標識列之一,因爲它本身沒有數據,它們通常由2個或更多外鍵列組成。
只要密鑰是唯一的 - 它可以用作主密鑰。如果沒有可用作主鍵的列,則應使用附加的ID列,因爲它不是唯一的或可以具有NULL值。整數列也是首選。所以電話號碼的作品。
創建SQL時,它必須具有唯一的可識別密鑰,這意味着當您需要查詢特定表中的記錄時,必須有唯一的列以便於識別。
主鍵是分配給表中特定行的特殊唯一 值的數據庫術語。
在一些相當特殊的情況下,您甚至可以從多個列中創建主鍵而不是一個。他們將其稱爲複合鍵。簡而言之,創建你的桌子,並將你的主鍵設置爲手機號碼,如果他們每個人都是唯一的,我認爲是這種情況。
讓我舉個例子。社會安全號碼也被設置爲美國和歐洲的表格中的主鍵;它不是一個增量鍵。
如果你想使用手機號碼作爲主鍵,你可以
create table MyData(
phonenumber int not null primary key,
fname varchar(25),
lname varchar(25)
...
)
但是這未必是最好的做法。因爲電話號碼可能會改變。一旦它屬於客戶A現在屬於客戶B.使用此模型,最終可能會遇到一個問題,您無法僅根據電話號碼提供您的唯一客戶。如果您將自增指數添加爲主鍵,則您始終可以通過該ID引用唯一客戶。 這是更安全,更清潔,更直觀,易於編碼的。它尤其。當您添加外鍵等時會有所幫助。通過在開始時選擇一個錯誤的主鍵,您可能會讓自己陷入重大困境,可能會持續一兩年。
你還可以做的是添加一個自增指數作爲主鍵,並將一個UNIQUE約束放在電話號碼上,這樣電話號碼必須是唯一的才能被輸入到數據庫中。這主要是爲了數據完整性而完成的,例如,如果有人輸錯某些東西,現在又匹配另一個數字,它會立即被捕獲。我仍然不會推薦這個,因爲你可能會遇到一個問題,這個限制可能會引發一個有效的情況。
所以我會用自己的遞增指數作爲主鍵,使事情簡單,並添加電話號碼字段,它不能爲空(這將是另一個約束:))
- 1. 是否有必要使用@在sql server中創建表變量?
- 2. SQL表拆分 - 是否有必要
- 3. 您是否需要在Hibernate表的@id列上創建索引
- 4. SQL主鍵 - 是否有必要?
- 5. 是否有必要在電子商務創建會話
- 6. 是否需要使用#來在SQL Server中創建臨時表?
- 7. 是否有必要有base64_encode
- 8. Postgres - 是否有必要在我的情況下創建表空間?
- 9. 我必須創建一個96列的表格。它是否有效?但96列必須在表
- 10. 是否有必要在Linq中使用連接到SQL
- 11. 是否有必要在foriegn表中有一個主鍵?
- 12. Wunderlist中是否有「ALL」的列表ID?
- 13. 是否有必要在一個ID內有一個ID的CSS選擇器?
- 14. 我是否需要在Rails遷移中顯式創建ID?
- 15. SQL表格是否有益於或需要具有唯一的ID列?
- 16. 是否有必要在java函數中創建兩個時間日曆實例?
- 17. 是否總是需要創建Dim表?
- 18. 是否有必要使用PHP來創建網頁的自動錶單?
- 19. 您是否必須在VB.NET中顯式創建表單實例?
- 20. 是否有必要在Zend Framework 2中的每個PHPUnit測試方法中爲所有表類創建模擬?
- 21. 是否有必要在mysql中刪除臨時表?
- 22. 在php中驗證一堆表單數據 - 是否有必要?
- 23. 是否有可能在Dart中創建地圖列表?
- 24. 是否可以在HTML中創建多級有序列表?
- 25. 在軌道上的紅寶石是否有必要創建後保存?
- 26. 是否有必要在GCD的ARC下創建自動釋放池?
- 27. Cordova.js是否必要?
- 28. _mmServerScripts是否必要?
- 29. KillTimer是否必要?
- 30. 帶有self.view.frame的initWithFrame:是否有必要?
有沒有這樣的經驗法則。是的,代理鍵是可以的,但它們不是必需的,而且它們被用於何處,最好的做法是提供一個唯一的自然鍵。移動號碼不是一個不好的鑰匙,因爲用戶偶爾會更改他們的號碼 – Strawberry
@Strawberry:最佳做法是提供獨特的自然鑰匙和代用品嗎?你能引用一些權威嗎? – eggyal
不,沒有具體的規則來做到這一點。取決於你的數據模型。但是,如果用戶的手機號碼可以更改,那麼這可能不適合PK,並且您需要一個單獨的ID。 – OldProgrammer