我有2种方式让用户在我的网站上创建帐户。
一个。正常登记表(电子邮件,密码) 湾通过Facebook Connect注册(fb_userid,电子邮件)
使用MySQL(InnoDB引擎)实现此操作的最佳做法是什么?
我的方法:
[USER]
user_id
user_type (normal/facebook)
[USER_NORMAL]
user_normal_id
user_id
email
password
[USER_FACEBOOK]
user_facebook_id
user_id
email
fb_userid
你有什么建议?
答案 0 :(得分:4)
这张单表会更简单(在我看来):
用户(user_id,user_email,user_password,user_fbid)
您不需要“类型”,因为您可以使用CASE
来确定user_fbid
是否为NULL
,然后是“普通”帐户,否则{{1}是user_password
然后它是一个Facebook帐户。
答案 1 :(得分:3)
我会有两张桌子。
一个表应包含基本用户信息:
用户(user_id,user_email,user_password)
另一个表应该是通用的,并将第三方帐户链接到这些用户。例如:
user_ext (type,user_id,uid)
类型字段应包含服务类型(在本例中为Facebook),以及服务的唯一标识符(在本例中为Facebook用户ID)。然后它应该链接回user_id。
此策略将允许您添加用户可以在以后进行身份验证的其他服务。
答案 2 :(得分:1)
如果他们有Facebook ID,我会将所有内容保存在一张桌子上并区分它们。
答案 3 :(得分:0)
我可能更愿意将所有用户保留在1个表中。如果该用户的类型没有该字段,则可以包含null的字段。例如,如果用户正常,则fb_userid可以为null。
[USER]
user_id
user_type (normal/facebook)
email
password
fb_userid (can be null: yess)
答案 4 :(得分:0)
如果这些是唯一的字段,那么将所有字段放在一个表中并且适当地使用NULL可能是最容易的。
但是,如果你想要一个标准化设计,你会选择这样的东西:
[USER]
user_id (PK)
email
(Other fields common to both)
[USER_NORMAL]
user_id (PK, FK to USER.user_id)
password
(Other fields specific to 'normal')
[USER_FACEBOOK]
user_id (PK, FK to USER.user_id)
fb_userid
(Other fields specific to FB)
如果'password'是唯一特定于'普通'用户的字段,并且有许多特定于FB用户的字段,那么折衷可能是有两个表:USER(如上所述,但包含'password')和USER_FACEBOOK