2011-07-22 30 views
1

我想创建一个类似于Stackoverflow的认证系统。在这种情况下建模1:1可选数据的最佳方式是什么?

用户可以使用我网站上的帐户创建/登录,或使用来自各个提供商的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

可选的数据可以存在为父表或者为空的字段,或者如果多个列是可选在一起,那么你就应该进行第二次表一中的主键,这也是外键引用父表。

相关问题