对于接受来自多个站点的登录(例如facebook connect,google,flickr等)的站点,架构的良好做法是什么?

Dor*_*ron 6 mysql schema database-design database-schema

我在http://dba.stackexchange.com上提出了这个问题,但它已经关闭了,我在这里应该问一下,因为它与设计而不是管理有关.

我正在构建一个站点("站点"),我正在考虑如何为它设计数据库架构.

我有一些会影响结果的场景:

  • 用户可以选择在网站上注册本机帐户,这将使他在将来使用该帐户登录其网站帐户.
  • 用户可以选择通过其他网站(登录"外部网站")(如Facebook连接,谷歌,四方,等..),这将使他使用的登录其帐户上的网站在未来.
  • 无论他选择哪种登录方式(本机帐户或外部网站帐户)并不重要,用户将能够在网站上使用外部网站(例如facebook,twitter,Instagram等)进行身份验证,以便使用他在外部网站上的数据(例如来自Twitter的推文,来自flickr的照片等),在网站上.

我该如何设计数据库的架构?

对于前两种情况,我认为有一个名为表Users有一个idtype领域.类型参考不同的表,例如FacebookUsersGoogleUsers,每个具有user_id场-其具有外国相对于Users.id场-和其他领域,如first_name,profile_picture等.

但这种方法不支持第三种情况.所以我想到了以下内容:为每个外部站点设置
一个名为table Users和table 的基表,我希望允许用户连接到我的站点(即站点). 该表将包含有关用户的基本信息(例如- 所有可选),其中包含一个名称将保存值的列,或者这些值的序列化数组. 的外部站点小号表(例如)将持有的相关数据为外部站点与用户相关的,并以一个参考表" 字段.
Usersfirst name, last name, username, password, emailaccountsnative|facebook|twitter
FlickrUsersUsersuser_id

当用户将其帐户与外部站点(例如flickr,instagram)连接时,我使用该外部站点FlickrUsers的相关数据填充该外部站点表(例如),并将该外部站点的名称作为另一个值添加到该外部站点.accounts中的Users字段.

对于使用多帐户登录的网站,我问这是一般的最佳实践问题.

话虽如此,我不确定以上是否是我上面描述的网站的好方法/设计.我完全清楚,不仅有一个正确的答案,但我知道有更好的解决方案和不那么理想的解决方案.我希望能找到更好的解决方案.

为了讨论起见,我的RDBMS是mysql,我的语言是php.

eva*_*van 3

最简单的方法是建立一个包含不同登录方式的表,该表并不特定于登录方式。如果他们想添加另一种方式,这只会为您带来更多工作。

表用户
ID、姓名等 - 不是密码

表 LoginValidations
id、user_id、类型、validation_data

当他们尝试登录时,将登录类型与validation_data进行匹配。对于您的站点(type=YourSite),validation_data 将是密码(或散列密码)。对于 type=Facebook,validation_data 将是您使用 Facebook 登录等验证您的网站的数据。

当有人想要登录时,您可以根据适当类型的validation_data 验证他们的ID。