我有一个users
表,其中包含自动增量id
以及唯一的字母数字pid
。只有pid
被公开曝光,因为我不希望黑客通过在for
上运行id
循环并提取所有用户数据来游戏系统。
问题是,我是否甚至需要首先存储自动增量id
?我需要为其他用户相关的表选择一个外键,例如user_details
,user_orders
等。我应该使用pid
还是数字id
作为fk?
一些担忧:
id
加入是否会比pid
效率更高?id
的速度是否会快于索引pid
?pid
用作foreign_key
时,涉及多个原子插入的交易是否可行?答案 0 :(得分:1)
基本上,答案是“是”,“是”和“是”。
据推测,字母数字键将是许多字节,整数将只有4个字节(或bigint为8)。外键值存储在定义它们的任何索引中,因此短值很好。此外,拥有一个总长度相同的密钥是好的。
您没有提到pid
来自哪里。例如,UUID(只是一个位串)是16个字节,而字符串是4个字节。这会在任何索引中占用更多空间,尽管可以使用它。
更重要的是,您关注的是安全性。我认为有一个id面向用户而另一个id在数据库中提供了额外的安全层。例如,您可以围绕从PID到ID(加密,记录,安全的接口)的转换具有高级别的安全性。
PID永远不会出现在实际数据中,因此,假设您遵循表格内容的良好实践,获取许多表格的完整副本可能仍然无法识别用户。