SQL表中的两个唯一键

时间:2013-12-02 13:58:14

标签: mysql sql json

我有一张桌子

Users (Id, Uid, Name, Sex...).

Id是自动增量,Uid是唯一的,由我的脚本生成(大写和小号的组合,2X4TY)。

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

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

也许我根本不需要任何自动增量Id,但我在大学教过,所有表都有代理键更好。

1 个答案:

答案 0 :(得分:1)

一般来说,我发现拥有自动递增的主键是一个好主意。

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

但是,您应该使用主键与其他表的外键关系。主键具有显着的性能优势。你没有提到uid到底是什么。但请记住,许多事情会随着时间的推移而改变例如,如果您使用电子邮件地址作为用户ID,则用户的电子邮件地址可能会更改。

如果您想要一个未自动递增的唯一键,请使用uuid()功能。您可以使用通用标识符来屏蔽用户ID和您拥有的用户数。