Mysql SQL表中的两个唯一键

Mysql SQL表中的两个唯一键,mysql,sql,json,Mysql,Sql,Json,我有一张桌子 Users (Id, Uid, Name, Sex...). Id是自动递增的,Uid是唯一的,由我的脚本生成(大写和小写的组合,2X4TY) Uid是公共的,我在URL中使用它,通过JSON在客户机-服务器通信中使用它。我创建它也是为了隐藏内部Id,否则它会告诉人们我有多少用户 我发现自己一直在使用Uid,甚至开始在其他表中将其用作FK。这是一个好方法吗?我是否应该通过JSON发送Uid,然后找到内部/自动增量Id并使用它?这是更多的工作,我很困惑 也许我根本不需要任何自动递增

我有一张桌子

Users (Id, Uid, Name, Sex...).
Id
是自动递增的,
Uid
是唯一的,由我的脚本生成(大写和小写的组合,
2X4TY

Uid
是公共的,我在URL中使用它,通过JSON在客户机-服务器通信中使用它。我创建它也是为了隐藏内部
Id
,否则它会告诉人们我有多少用户

我发现自己一直在使用
Uid
,甚至开始在其他表中将其用作FK。这是一个好方法吗?我是否应该通过JSON发送
Uid
,然后找到内部/自动增量
Id
并使用它?这是更多的工作,我很困惑


也许我根本不需要任何自动递增的
Id
,但uni告诉我,最好所有表都有一个代理键。

一般来说,我发现使用自动递增的主键是个好主意

知道“你有多少用户”的问题无关紧要。没有理由在任何外部通信中包含主键。您可以使用自动递增键,但对URL和类似结构使用uid

但是,对于与其他表的外键关系,应该使用主键。主键具有显著的性能优势。你没有提到uid的真正含义。但请记住,随着时间的推移,许多事情都会发生变化。例如,如果您使用电子邮件地址作为用户id,则用户的电子邮件地址可能会更改


如果需要一个非自动递增的唯一键,请使用
uuid()
函数。您可以使用通用标识符来屏蔽用户id和您拥有的用户数。

否。如果uid不是PK的组成部分,则不要在其他表中用作FK。顺便说一句,你被教错了。代理密钥不是“更好”或“更差”。但是,如果您确实选择使用代理键,那么通常情况下,表中的一列或其他列的组合上也有一个唯一的自然键。在我看来,
Uid
也是代理键,不是吗?另外,代理密钥和自然密钥是一场圣战,不清楚哪一个更好,所以不要把太多的想法放在你所学的内容上。我应该删除Id并使用Uid作为PK还是保留Id作为我的PK,在收到客户端的Uid后,找到合适的Id并使用它?如果你没有使用自动递增PK,你可以直接删除它。如果以后需要内部唯一id,可以很容易地将其添加回。将外键从一个唯一的引用键交换到另一个也很容易。