繁体   English   中英

Mysql自动增量ID或字母数字ID作为外键

[英]Mysql autoincrement id or alphanumeric id as Foreign Key

我有一个users表,其中有一个自动递增的id和一个唯一的字母数字pid 只有pid是公开的,因为我不希望黑客通过在id运行for循环并提取所有用户数据来对系统进行游戏。

问题是,我是否首先需要存储自动增量id 我需要为其他与用户相关的表(如user_detailsuser_orders等)选择一个外键。我应该将pid或数字id用作fk吗?

一些问题:

  • 联接 -使用id 联接会比pid更有效吗?
  • 索引 -索引id是否比索引pid快?
  • Transactions-使用pid作为foreign_key时,涉及多个原子插入的事务是否可行?

基本上,答案是“是”,“是”和“是”。

大概,一个字母数字键将是许多字节,而一个整数将仅是4个字节(对于bigint,则为8个字节)。 外键值存储在定义它们的任何索引中,因此短值是好的。 同样,拥有始终相同长度的密钥也很好。

您没有提及pid来源。 例如,UUID(仅是位字符串)为16个字节,而字符串为4个字节。 尽管可以使用它,但它将在任何索引中占用更多空间。

更重要的是,您在这里所关心的是安全性。 我认为,一个面向用户的id和另一个面向数据库的id提供了额外的安全性。 例如,您可以在从PID到ID(加密,记录的安全接口)的转换方面具有较高的安全性。

PID永远不会出现在实际数据中,因此,假设您遵循表内容的良好做法,那么获取许多表的完整副本可能仍无法识别用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM