2010-03-01 101 views
3

例如,我有三個表,用不同的數據存儲不同類型的用戶。但現在我想存儲他們的聯繫信息。存儲聯繫人信息的表格將適合存儲所有用戶表的數據。對於與同一個表具有1對1關係的多個表,最佳數據庫設計是什麼?

問題是我在不同的用戶表之間有不同的或可能重複的ID,所以它不可能創建與我的聯繫人表的關係。一種解決方案是爲每個用戶類型創建一個聯繫表,但這看起來很浪費,因爲唯一的區別就是ID。

此外,我想存儲在用戶表中的聯繫人ID,但這似乎不太理想,因爲我們可能沒有用戶聯繫信息,直到後來,如果有的話。

我錯過了其他選項嗎?

+0

有沒有什麼理由在表中沒有相同的用戶標識符? – Sagi 2010-03-01 21:19:10

+0

是的,因爲用戶表之間沒有關係,只是在每個用戶表和聯繫人表之間。 – bender 2010-03-01 21:40:33

回答

5

這是我會怎麼做:

table Users 
UserID     -PK auto number 
UserLogin 
UserName 

table UserSpecialType1 
UserSpecialType1ID  -PK auto number 
UserID     -FK 
SpecialInfoA 
SpecialInfoB 

table UserSpecialType2 
UserSpecialType2ID  -PK auto number 
UserID     -FK 
SpecialInfoC 
SpecialInfoD 

table UserContactInfo 
UserContactInfoID  -PK auto number 
UserID     -FK 
EmailAddress 
PhoneNumber 
Address 
+0

我差點輸入這個相同的答案。但是,需要明確的重要事項是UserSpecialType1.UserId不是現有的ID,而是表Users中新的自動編號的ID。該設計創建了一個新的ID系統,但它修復了原始DB設計中的一個主要缺陷。 (如果正確完成,舊ID仍然可以用於舊代碼。) – 2010-03-01 21:29:27

+0

考慮到問題,這看起來是最好的解決方案..謝謝! – bender 2010-03-01 21:43:03

+0

@KM當您必須在UserSpecialType1與僅與UserSpecialType1相關的實體類型之間創建關係時,您會做什麼。您使用UserSpecialType1ID或UserID? – 2012-12-14 16:14:40

0

您可以使用在聯繫表,例如複合鍵用戶類型ID,用戶ID

+0

這將允許一個主鍵,但不允許一個外鍵。 – 2010-03-01 21:32:33

1

關閉我的頭頂,我會把所有的用戶放到一個帶有類型差異表的同一個表中。

TABLE User 
Id 
Value1 
Value2 
UserTypeCode 

TABLE UserType 
TypeCode 

TABLE Contact 
UserId 
ContactInfo 

TABLE UserTypeAttribute 
UserType 
AttributeTypeCode 

TABLE AttributeType 
AttributeTypeCode 

TABLE UserAttributeTypeValue 
UserId 
AttributeTypeCode 
Value 
+0

我對'Type differentiator'的想法是一樣的,但我確信在某些時候,某些用戶會希望是兩種類型,這會導致模型出現問題。在我工作的地方,用戶總是拿出這樣的瘋狂東西來破壞事物! – 2010-03-01 21:27:55

+0

總是很有可能發生。在這種情況下,我會將其拆分爲用戶/類型連接表。我不喜歡每個用戶類型模型的唯一表的原因是,作爲一名開發人員,如果我只有一個Id,每次需要用戶時都會查詢n表。 – 2010-03-01 21:35:51

+0

基於查詢的上下文,您可能不需要查詢每個查詢。在Farm屏幕上工作時,查詢特殊的FarmUser表,但在Factory屏幕上查詢FactoryUser表。處理通用屏幕,您只使用用戶表 – 2010-03-01 21:45:31

相關問題