分享一个便于扩展的用户表结构
用户表可以说是每个项目立项动工时首要考虑的一件事情。用户表结构的设计直接影响着项目的可靠性和扩展性,与其待以后需要满足需求不断改动,倒不如一开始就设计一个易于扩展的用户表,争取一步到位。
基础设计
大部分初学者所学到的,以及不少框架自带的用户表都是类似下面这种结构的。
id
name
password
这是一个相当简单的用户表,只包含了用户ID、名称、密码等必要的信息。假如需要在这基础上加上一些字段,比如生日、住址甚或用户状态等,就只能继续加字段,变成了下面这样。
id
name
password
birthday
address
status
这样做在初期是没有什么大问题的,顶多就是麻烦点。然而,随着越来越多应用开放第三方登录,我们自己的项目也得加上第三方信息表,于是,我们有了第二个表。
socials
-------
id
user_id
type
value
credential
我们用 type
和 value
存放第三方类型以及第三方用户标识,用 credential
来存放密码、Token等信息。
以上这种方式毫无疑问是可以解决问题的,可就是过于麻烦了。
正式内容
users
-------
id
nickname
avatar
status
socials
-------
id
user_id
type
value
credential
union_id
user_auths
-------
id
user_id
type
identifier
credential
user_extends
-------
id
user_id
field
value
users
表仅保存一些必要的用户信息,其他额外信息如生日、住址等存放于 user_extends
表,用户绑定的第三方信息存放于 socials
表。认证信息存放于 user_auths
表,其中的 type
字段是登录的类型,如手机号、邮箱、用户名等,比如手机号登录的时候只要找出 type = 'phone' AND identifier = 123456789
的记录,然后判断密码(或验证码)即可。
结语
我承认,写一半的时候我就不知道自己在说什么了(捂脸)。大佬们轻点喷。
参考资料
可扩展的用户表设计 by franktrue
浅谈数据库用户表结构设计 by 一步一步向上爬
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: