2011-07-22 31 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

可選的數據可以存在爲父表或者爲空的字段,或者如果多個列是可選在一起,那麼你就應該進行第二次表一中的主鍵,這也是外鍵引用父表。

相關問題