Php Mysql自动递增id或字母数字id作为外键
我有一个Php Mysql自动递增id或字母数字id作为外键,php,mysql,primary-key,Php,Mysql,Primary Key,我有一个users表,带有一个自动递增的id,还有一个唯一的字母数字pid。只有pid是公开的,因为我不希望黑客通过运行for循环id并提取所有用户数据来对系统进行游戏 问题是,我是否需要首先存储自动增量id?我需要为其他与用户相关的表(如user\u details,user\u orders等)选择外键。我应该使用pid还是数字id作为fk 一些关切: 联接-使用id的联接会比pid更有效吗 索引-索引id会比索引pid快吗 事务-当pid用作外键时,涉及多个原子插入的事务是否可行 基本上
users
表,带有一个自动递增的id
,还有一个唯一的字母数字pid
。只有pid
是公开的,因为我不希望黑客通过运行for
循环id
并提取所有用户数据来对系统进行游戏
问题是,我是否需要首先存储自动增量id
?我需要为其他与用户相关的表(如user\u details
,user\u orders
等)选择外键。我应该使用pid
还是数字id
作为fk
一些关切:
- 联接-使用
的联接会比id
更有效吗pid
- 索引-索引
会比索引id
快吗pid
- 事务-当
用作pid
时,涉及多个原子插入的事务是否可行外键
pid
来自何处。例如,UUID(只是一个位字符串)是16字节,而字符串是4字节。这将在任何索引中占用更多的空间,尽管它可以被使用
更重要的是,你关心的是安全。我认为,一个id面向用户,另一个id位于数据库中,这提供了额外的安全层。例如,在从PID到ID(一个加密、记录、安全的接口)的转换过程中,您可以拥有高级别的安全性
PID永远不会出现在实际数据中,因此获取许多表的完整副本可能仍然无法识别用户,前提是您在表的内容上遵循了良好的做法。这可能很有趣: