3

我有两种方法让用户在我的网站上创建帐户。

一种。普通登记表(电子邮件、密码) b.通过 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

你有什么建议?

4

5 回答 5

4

这个单表会更简单(在我看来):

用户(user_id、user_email、user_password、user_fbid)

您不需要“类型”,因为您可以使用 aCASE来确定是否user_fbidNULL“普通”帐户,否则user_passwordNULLFacebook 帐户。

于 2012-11-16T20:46:21.840 回答
3

我会有两张桌子。

一张表应包含基本用户信息:

用户(user_id、user_email、user_password)

另一个表应该是通用的,并将第 3 方帐户链接到这些用户。例子:

user_ext(类型,user_id,uid)

type 字段应包含服务的类型(在本例中为 Facebook)和服务的唯一标识符(在本例中为 Facebook 用户 ID)。然后它应该链接回 user_id。

然后,此策略将允许您添加用户将来可以对其进行身份验证的其他服务。

于 2012-11-16T20:51:49.080 回答
1

我会把所有东西都放在一张桌子上,并通过他们是否有 Facebook ID 来区分它们。

于 2012-11-16T20:47:23.013 回答
0

我可能更愿意将所有用户保留在 1 个表中。如果该用户的类型没有该字段,则您可以拥有为空的字段。例如,如果用户正常,fb_userid 可以为空。

[USER]
user_id
user_type (normal/facebook)
email
password    
fb_userid (can be null: yess)
于 2012-11-16T20:46:27.690 回答
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)

如果“密码”是“普通”用户特有的唯一字段,并且有许多 FB 用户特有的字段,那么折衷方案可能是有两个表:USER(如上,但包含“密码”)和 USER_FACEBOOK

于 2012-11-16T20:49:01.457 回答