在这种情况下,为1:1可选数据建模的最佳方法是什么?

时间:2011-07-22 20:55:51

标签: database-design

我想创建一个类似于Stackoverflow的身份验证系统。

用户可以使用我网站上的帐户创建/登录,也可以使用各种提供商的openid创建/登录。

典型的架构可能类似于:

Table: users
====================

id
email
password
date_created

Table: users_openids
====================

id
user_id
openid_url

此架构的问题是电子邮件/密码仅适用于我的网站帐户。

我建议的架构是否采用最佳方式进行此操作?

Table: users
====================
id
account_type_id
date_created

Table: account_types
====================
id
account (enum('mine','openid'))

Table: users_openids
====================
id
account_type_id
user_id
openid_url

Table: user_mine
====================
id
account_type_id
user_id
username
password

Table: user_attributes
====================
id
user_id
email
nickname
full_name
dob
gender

对我来说似乎有点奇怪,任何想法/批评/优化/建议都会受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

可选数据可以作为父表中的可空字段存在,或者如果多个列一起是可选的,那么您应该创建第二个表,其中主键也是引用父表的外键。