一千萬個為什麽

搜索

如何建立這種一對一的關系?

我有幾個實體,它們代表了需要能夠登錄特定系統的不同類型的用戶。另外,它們具有與它們相關聯的不同類型的信息。

例如:“普通用戶”,其具有電子郵件地址和“管理員用戶”,其具有工作站編號(請註意,這是假設的情況)。兩個實體還共享公共屬性,如姓名,地址和電話號碼。最後,他們自然需要有一個(唯一的)用戶名和密碼才能登錄。

在應用程序中,用戶只需填寫他的用戶名和密碼,應用程序的功能就會根據用戶的類型略有變化。您可以想象用戶名需要對此工作是唯一的。

我應該如何有效地模擬這個?

我不能只創建兩個表,因為那時我不能在用戶名上強制使用唯一的constaint。

我也不能將它們全部放在一個表中,因為它們具有與之關聯的不同類型的特定信息。

我想我可能需要3個單獨的表,一個用於“用戶”(用戶名和密碼),一個用於“普通用戶”,另一個用於“管理員用戶”,但這些之間的關系如何工作?還是有其他解決方案嗎?

(順便說一下,目標DBMS是MySQL,所以我不認為數據庫系統本身支持泛化)。

最佳答案

你的3桌表示似乎沒問題。 在users表中只有ID,用戶名,密碼,usertype。 一般來說,users表有ID,UserID(來自users表),其他字段。 管理員用戶也是如此。

Usertype字段將告訴您從哪個表中搜索其他信息

if(usertype==admin)
  select * from  admins where userid=:id;
else    
  select * from  general where userid=:id;

轉載註明原文: 如何建立這種一對一的關系?