2011-01-13 41 views
0

我在我的系統中有3種類型的用戶。每種類型都有不同的信息 我創建以下表:表中的繼承 - 結構問題

BaseUser(base_user_id, username, password, additional common data) 

base_user_id是PK和身份

UserType1(user_id, data related to type1 only) 

user_id是PK和FK到base_user_id

UserType2(user_id, data related to type2 only) 

user_id是PK和FK to base_user_id

UserType3(user_id, data related to type3 only) 

user_id是PK和FK base_user_id

現在我有從每種類型的用戶到倉庫表的關係。來自type1和type2的用戶應該只有warehouse_id,來自type3的用戶應該有warehouse_id和customer_id。

我想了解這個結構:

WarehouseOfUser(base_user_id,warehouse_id) 

base_user_id是FK在BaseUser base_user_id

WarehouseOfTyp3User(base_user_id,warehouse_id, customer_id) 

base_user_id是FK在BaseUser到base_user_id

的問題是,這樣的結構允許2我想要防止的事情: 1.從type2或type1添加到用戶的WarehouseOfTyp3User數據。 2.從type3添加到WarehouseOfUser用戶的數據。

什麼是這種情況下的最佳結構?

更新:我必須爲所有用戶類型使用相同的id範圍。我無法爲每個用戶創建單獨的表,因爲我需要爲每個表使用相同的user_id。

回答

0

看起來很容易爲user3解決 - 只需在user3表中添加一個新的標識字段,從warehouse3表中刪除base_user_id,改爲添加user3Id,並使用user3id添加與user3表的外鍵。所以沒有baseUser表參考。解決問題1.

同樣,將user1id和user2id添加到其他用戶表中,從倉庫表中刪除base_user_id,只添加userid並添加2個外鍵以鏈接到user1和user2表。這應該解決問題2.

或者,您可以嘗試使用觸發器,但我不特別喜歡觸發器。

+0

請參閱我的更新。我需要把所有的用戶類型ID放在同一個表中。 – Naor 2011-01-13 05:18:29

1

這是第二個答案,但它是非常不同的。我建議以這種方式重組您的數據:

table BaseUser(baseUserId, password,...) 
table User1(user1Id -> PK, baseUserId -> FK to BaseUser, warehouse1id -> FK to warehouse1 table) 
table User2(user2Id -> PK, baseUserId -> FK to BaseUser, warehouse1id -> FK to warehouse1 table) 
table User3(user3Id -> PK, baseUserId -> FK to BaseUser, warehouse3id -> FK to warehouse3 table, customerId) 
table Warehouse1(warehouse1id...) 
table Warehouse3(warehouse3id...) 
+0

我有一個倉庫表,每個用戶有1:m - >一個倉庫可能有許多用戶。 – Naor 2011-01-13 05:34:56