2015-08-18 110 views
1

我有一個users表,自動增加id,也是一個獨特的字母數字pid。只有pid被公開曝光,因爲我不希望黑客通過在id上運行for循環來遊戲系統並提取所有用戶數據。Mysql自動增量ID或字母數字ID作爲外鍵

問題是,我甚至需要在第一位存儲自動增量id?我需要選擇其他用戶相關表的外鍵,如user_details,user_orders等。我應該使用pid還是數字id作爲fk?

有些擔憂:

  • 加入 - 威爾聯接使用idpid更有效率?
  • 索引 - 索引id會比索引pid更快嗎?
  • 交易記錄 - 當pid被用作foreign_key時,涉及多個原子插入的交易是否可行?
+1

這可能是有趣的:http://stackoverflow.com/questions/332300/is-there-a-real-performance-difference-between-int-and-varchar-primary-keys – PaulF

回答

1

基本上,答案是「是」,「是」和「是」。

推測,字母數字鍵可能會有很多字節,整數只會是4個字節(對於bigint來說可能是8個字節)。外鍵值存儲在定義它們的任何索引中,所以短值很好。而且,擁有一個長度相同的密鑰是很好的。

你沒有提及你的pid來自哪裏。例如,一個UUID(只是一個位串)是16個字節,而一個字符串是4個字節。儘管可以使用,但這會佔用更多空間。

更重要的是,您關心的是安全。我認爲有一個ID面向用戶,另一個數據庫內部提供了一個額外的安全層。例如,您可以在從PID到ID(加密的,記錄的,安全的接口)的轉換中具有高級安全性。

PID將永遠不會出現在實際數據中,因此假設您遵循表格內容的良好做法,獲取許多表的完整副本可能仍然無法識別用戶。