【发布时间】:2016-06-27 23:27:42
【问题描述】:
我正在创建用户管理数据库架构。我正在使用 Postgresql 作为数据库。以下是我的方法。如果我使用这种结构,请建议是否存在任何性能问题。
要求:
- 预计未来会有数百万用户。
- 我还必须在其他系统上使用唯一用户 ID,可能是 MongoDB、redis 等。
方法:
- 我使用pseudo_encrypt() 作为唯一的user_id(BIGINT 或BIGSERIAL),所以没有人可以猜到其他ID。例如:3898573529235304961
- 在另一个表中使用 user_id 作为外键。我没有使用用户表的主键作为外键。
有什么建议吗?
- 在其他表中到处都使用唯一键作为外键,我这样做是否正确?
- 在 CRUD 操作和复杂联接期间是否存在任何性能问题?
- 在任何其他数据库中使用唯一键是否正确? (分布式环境下)
【问题讨论】:
-
如果您在这里没有任何吸引力,请考虑 dba.stackexchange.com
-
考虑使用 xtea 而不是
pseudo_encrypt()以获得不可猜测的 64 位密钥。 -
如果用户可以通过猜测的 ID 访问,那么你有问题
-
有安全措施来授权用户防止被猜测的ID访问,这不是本文的内容。如果我们公开/使用任何 3rd 方服务,则有必要在 REST 世界中向消费者公开唯一密钥。例如,尝试在developers.google.com/oauthplayground 上使用任何API,您可以看到googleapis.com/oauth2/v2/userinfo 正在返回类似于此响应的用户信息对象{“name”:“AMREESH”,“id”:“117344186683399370163”}。我说的是这个Id。
-
为什么在表
User中同时需要id和user_id?仅使用user_id。
标签: database postgresql database-design primary-key unique-key