2011-12-22 94 views
2

我正在開發一個系統,使用國家ID「識別記錄」之一是在所有表中嵌入nat_id是一個好主意,使查詢更容易?這樣做有什麼缺點?我只是想從這裏的人那裏得到意見,因爲我可能會錯過重要的事情。使用國家ID作爲主鍵

+5

有法律影響以及隱私問題。 – Oded 2011-12-22 08:28:33

+1

您是否知道在美國有重複SSN的情況?除此之外,它不是*非常神奇的獨特編號... – 2011-12-22 08:42:18

+0

@Oded這將是一個在東南亞國家的電子政務應用程序,這種國家ID的使用非常普遍。 – 2011-12-22 11:34:13

回答

8

正如@Oded所暗示的那樣,可能存在法律和隱私問題(這很大程度上取決於您的國家/地區)。

隱私問題的一個例子是,在一些國家,該人的出生日期 - 以及在某些國家的性別 - 是其國內身份證號碼的一部分。將其複製到模式中的每個表中可能不是一個好主意,因爲這會限制對此信息的訪問。

最重要的是,有幾個純粹的技術問題:

  1. 並非所有國家都擁有國民身份證制度,而那些做的,使用不同的格式。當您需要適應新格式時,您是否真的想要更改架構中的每個表?
  2. 我可以想象一個人可能沒有國民身份證的情況(一個訪客?尋求庇護者?一個無國籍人?)你打算如何將它們輸入數據庫?
  3. 在某些國家,與國民身份證最接近的是身份證上的身份證號碼,並且身份證重新簽發時該身份證號碼會發生變化。換句話說,同一個人在他們的生活中可能會有不同的身份證號碼。

我會使用代理主鍵,並將國家ID作爲屬性存儲。

+0

代理人如何讓你識別人?它不會,也不會取代像國家身份證號碼這樣的自然鑰匙。 – sqlvogel 2011-12-22 09:25:51

+0

@aix申請將嚴格限於公民。雖然不太可能,但格式的改變是我們將討論的問題。我現在傾向於使用代理鍵,但我喜歡使用國家ID直接查詢的想法。 – 2011-12-22 11:47:50

+0

@dportas我不得不承認我從不使用自然鑰匙,因爲我很少有機會使用它們。這可能就是這種情況。但我需要確定第一。 – 2011-12-22 11:52:57

2

國家身份證是否會成爲一把好鑰匙很大程度上取決於您的要求。是否需要將國家ID作爲業務流程的一部分進行記錄,以及用戶/員工/誰是以這種方式唯一標識的?您是否有權要求人們提供這些信息?他們有義務向你透露他們的國民身份證嗎?如果對所有這些都是肯定的,那麼將它作爲數據庫中的關鍵字可能是很有意義的。

請確保您瞭解您需要支持的國家ID的任何標準。例如。長度,數據類型,任何校驗數字以及是否有遺留代碼或其他正在使用的特殊用途代碼可能與預期規則不匹配。

如果存在隱私問題並且您不需要從數據庫中檢索實際ID,那麼您可以存儲國家ID的安全散列。

+1

它是要求的一部分,因爲這是一個電子政務應用程序,並且該國有許多類似的大型在線應用程序。我喜歡安全的哈希想法謝謝。 – 2011-12-22 11:58:29