关于User表的设计

这几天一直在想,用户表到底应该怎么设计?

现在的登录方式:email、phone、QQ/微博/微信等第三方登录。那么这些账号相关的表应该设计成什么样呢?

拿email和phone来说,他俩应该放一个表吗?用户如果用手机号注册登录,email字段怎么处理呢?

一直很困惑,有经验的兄弟请指点下。

TonyWang

最近还在想,教主可以增加一个有偿问答的功能。有两种思路:

  1. 我提问时,可以设置一个奖赏,回答的被采用就给回答者
  2. 可以对每个回答问题的进行随意打赏
    靠谱不?
ljm5889

不确定别人怎么做,我是把email和mobile放一个表里了,都默认null,在后台做个判断注册时两者必须有一个不为空,登陆的时候就取email和mobile两个字段匹配,任意一个匹配上就放行

ogre222

我个人认为phone、email可以放在一个表,具体的可以参照廖雪峰的设计一个可扩展的用户登录

TonyWang

谢谢。我去好好研读下 @ogre222

TonyWang

的确也是一个很好的思路,有具体按照这种思路实践过吗 @ogre222

ogre222

@TonyWang 嗯 目前就是按照这个方法去做的。像他说的一样,至少需要三张表来实现

TonyWang

如果用laravel,大概是怎么样一个表结构,把email和phone拿出来放到一个表,第三方一个表 @ogre222

ogre222

@TonyWang 嗯,是的。还有一个表存放用户信息就可以了。

TonyWang

兄弟,加个Q吧。307942363 @ogre222

newborn

用一对一的表关联。。。
微博登录查询微博表,微博表关联User表,最终得出用户信息,如果没有用户信息就创建一个信息(之后用户设置界面可以修改嘛)
同理可得:微信,QQ

TonyWang

那一般email和phone也单独一个表,还是直接放用户表里呢 @newborn

newborn

@TonyWang email和phone我是放在users表里面的,登录的时候,先用email,如果失败,再查询phone,如何还是失败,则提示用户:登录失败

snail

用户名,密码,验证方式,放一张表里
其他用户信息放一张表里