Mysql
使用個人號碼作為客戶表的主鍵是個好主意嗎?
我們正在設計一個新系統來處理我們公司的客戶,我和另一個開發人員在我們是否應該使用客戶的個人號碼作為主鍵方面存在分歧。我的偏好是為每個新客戶自動增加一個唯一的 id (int)。
目前,我們添加的所有客戶都有個人號碼,但有沒有很好的例子說明為什麼這可能是一個好的或壞的實施?
一個論點是,使用增量 id 只會添加一個不必要的額外欄位並佔用更多空間。
個人號碼儲存為 varchar,客戶表可容納近百萬客戶。個人號碼或 ID 將作為外鍵添加到訂單和客戶支持請求中。
我怎麼知道這些是好還是壞的實現?我會如何爭論任何一方?
選擇或設計密鑰的一些好的標準是:簡單性、穩定性和熟悉度,但首先您需要了解密鑰應該解決的基本業務需求。問問自己,您打算如何在業務流程中辨識客戶。假設您需要辨識客戶,並且客戶編號是您的業務將用來執行此操作的方法,那麼它作為客戶表中的鍵非常有意義 - 不一定是唯一的鍵,但肯定是該表的鍵。
我們在 BI 世界中所做的就是
Natural Keys
在同時使用數據庫生成的 ID (Surrogate Key
) 的同時保留所有源系統。您的個人編號將是NK
此術語中的。保留它以允許在此數字發生變化時或是否發生變化時進行跟踪和更改跟踪。您保留所有歷史/源系統 ID,同時在您的解決方案中啟用新的和更有效/受控的 PK。使用遞增整數來提高連接的性能、查詢的簡單性和數據庫的一致性。當您控制 ID 時,您可以保證唯一性以及何時/如何分配它。使用外部提供的 ID,您無法控制潛在的更改或衝突。
我認為你不會有空間問題。即使粗略估計在標準磁碟大小(例如 TB)中儲存 100 萬個 8 字節整數所需的空間也是無關緊要的。