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

Database design 什么';在这种情况下,建模1:1可选数据的最佳方法是什么?,database-design,Database Design,我想创建一个类似Stackoverflow的身份验证系统 用户可以使用我的站点上的帐户创建/登录,也可以使用各种提供商提供的openid创建/登录 典型的模式可能类似于: Table: users ==================== id email password date_created Table: users_openids ==================== id user_id openid_url 此模式的问题在于,电子邮件/密码仅适用于我的站点帐户 我提议的

我想创建一个类似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

这对我来说似乎有点奇怪,任何想法/批评/优化/建议都将不胜感激。

可选数据可以作为父表中的可空字段存在,或者如果多列同时可选,然后,您应该使用主键创建第二个表,主键也是引用父表的外键。

可选数据可以作为父表中的可空字段存在,或者如果多列同时可选,然后,您应该使用主键创建第二个表,主键也是引用父表的外键