我正在開發一個系統,使用國家ID「識別記錄」之一是在所有表中嵌入nat_id是一個好主意,使查詢更容易?這樣做有什麼缺點?我只是想從這裏的人那裏得到意見,因爲我可能會錯過重要的事情。使用國家ID作爲主鍵
回答
正如@Oded所暗示的那樣,可能存在法律和隱私問題(這很大程度上取決於您的國家/地區)。
隱私問題的一個例子是,在一些國家,該人的出生日期 - 以及在某些國家的性別 - 是其國內身份證號碼的一部分。將其複製到模式中的每個表中可能不是一個好主意,因爲這會限制對此信息的訪問。
最重要的是,有幾個純粹的技術問題:
- 並非所有國家都擁有國民身份證制度,而那些做的,使用不同的格式。當您需要適應新格式時,您是否真的想要更改架構中的每個表?
- 我可以想象一個人可能沒有國民身份證的情況(一個訪客?尋求庇護者?一個無國籍人?)你打算如何將它們輸入數據庫?
- 在某些國家,與國民身份證最接近的是身份證上的身份證號碼,並且身份證重新簽發時該身份證號碼會發生變化。換句話說,同一個人在他們的生活中可能會有不同的身份證號碼。
我會使用代理主鍵,並將國家ID作爲屬性存儲。
代理人如何讓你識別人?它不會,也不會取代像國家身份證號碼這樣的自然鑰匙。 – sqlvogel 2011-12-22 09:25:51
@aix申請將嚴格限於公民。雖然不太可能,但格式的改變是我們將討論的問題。我現在傾向於使用代理鍵,但我喜歡使用國家ID直接查詢的想法。 – 2011-12-22 11:47:50
@dportas我不得不承認我從不使用自然鑰匙,因爲我很少有機會使用它們。這可能就是這種情況。但我需要確定第一。 – 2011-12-22 11:52:57
國家身份證是否會成爲一把好鑰匙很大程度上取決於您的要求。是否需要將國家ID作爲業務流程的一部分進行記錄,以及用戶/員工/誰是以這種方式唯一標識的?您是否有權要求人們提供這些信息?他們有義務向你透露他們的國民身份證嗎?如果對所有這些都是肯定的,那麼將它作爲數據庫中的關鍵字可能是很有意義的。
請確保您瞭解您需要支持的國家ID的任何標準。例如。長度,數據類型,任何校驗數字以及是否有遺留代碼或其他正在使用的特殊用途代碼可能與預期規則不匹配。
如果存在隱私問題並且您不需要從數據庫中檢索實際ID,那麼您可以存儲國家ID的安全散列。
它是要求的一部分,因爲這是一個電子政務應用程序,並且該國有許多類似的大型在線應用程序。我喜歡安全的哈希想法謝謝。 – 2011-12-22 11:58:29
- 1. 使用國家名稱amcharts爲特定國家上色
- 2. 幫助使用JS下拉列表爲國家/國家與PHP
- 3. 使用oid作爲主鍵
- 4. 級聯爲什麼沒有在國家和國家工作
- 5. 主義的國家實體
- 6. 重複使用現有的產品ID作爲主鍵
- 7. 爲什麼使用多列作爲主鍵(複合主鍵)
- 8. g:country選擇國家名稱作爲值
- 9. 如何從家鄉ID獲取用戶的國家?
- 10. JQuery AJAX使用VALUE作爲鍵/ ID
- 11. 使用ISO 3166-1-alpha-2作爲權威的國家名單?
- 12. 從topoJSON(D3)中選擇國家ID
- 13. 按國家篩選客戶集合ID
- 14. 使用「rowversion」作爲主鍵列
- 15. Rails:如何使用BIGINT作爲主鍵
- 16. MySQL - 使用字符串作爲主鍵
- 17. 國家PARAMS正確工作
- 18. 無法訪問從美國作爲國家的網頁
- 19. Grails:外鍵作爲主鍵?
- 20. guid作爲主鍵?
- 21. Sitecore的,基於國家或鍵盤
- 22. PHP鍵和值capitols和國家
- 23. 奇怪的國家行爲
- 24. iOS TestFlight爲其他國家?
- 25. magento自定義國家爲
- 26. 轉換國家代碼國家名稱
- 27. 選擇國家和國家代碼?
- 28. Ember.js findRecord()使用ID爲null調用替代主鍵的模型
- 29. 使用id作爲鍵和名稱作爲數組
- 30. 動態更新的數據地圖填充顏色不工作使用變量作爲國家的關鍵
有法律影響以及隱私問題。 – Oded 2011-12-22 08:28:33
您是否知道在美國有重複SSN的情況?除此之外,它不是*非常神奇的獨特編號... – 2011-12-22 08:42:18
@Oded這將是一個在東南亞國家的電子政務應用程序,這種國家ID的使用非常普遍。 – 2011-12-22 11:34:13