2011-11-07 45 views
3

我正在創建一個網站,其中每個註冊用戶可以存儲聯繫人列表。我想到,不是將聯繫人存儲在帶有user_id,contact_name,contact_email的表格中,最好將其標準化以防止多次存儲相同的名稱/電子郵件。因此,我現在有4個表格:用戶,姓名,電子郵件和聯繫人,其中聯繫人包含user_id,name_id和email_id。我正朝着正確的方向前進,還是我不必要地使事情複雜化?如何構建一個mysql數據庫,其中每個用戶有多個聯繫人

感謝所有對我現在所能看到的有幫助的迴應是一個非常模糊的問題。解釋我的推理可能是個好主意。 在一個示例場景中,如果有100個用戶,其中大多數用戶已通過其他用戶的推薦加入,則每個用戶聯繫人列表將共享大量的常用電子郵件地址。然而,[email protected]可能被不同的用戶稱爲John,J Smith,Johnny boy等。如果我正確理解了規範化的原則(不太可能),將用戶,聯繫人姓名和電子郵件地址分隔到不同的表中,可以顯着減少重複條目並提高數據庫的效率。在下面的示例中,「聯繫人」表可以多次包含相同的電子郵件地址。 因此,簡而言之,在一張表或幾張小表中沒有重複條目的情況下,是否有更多的條目比必要條件更好?

+1

它可以工作,但除非特別要求,它是有點未來的證明。 [今天的XKCD](http://xkcd.com/974/)在這裏非常合適。 – Konerak

+0

如果每個名稱都必須與電子郵件相對應,則可能需要將名稱表與電子郵件表合併。 – apokryfos

回答

4

你可能會不必要地使事情複雜化:我推薦一個用戶表,一個用於聯繫人和一個連接表,以允許兩者之間的多對多關係。如果用戶之間不共享聯繫人,則可以將用戶ID作爲聯繫人表中的外鍵。

希望這有助於

2

你可以這樣做

1] USER_INFO表

USER_ID |命名

2]聯繫人表

CONTACT_ID |聯繫人姓名| CONTACT_EMAIL

3] User_Contact表

USER_ID | Contact_Id

0

聯繫人可以具有相同的電子郵件但名稱不同,反之亦然?如果沒有,我建議兩個由關聯表的鏈接表(用戶和聯繫人):

USERS 
- userId 
- userName 

CONTACTS_USERS 
- userId 
- contactId 

CONTACTS 
- contactId 
- contactName 
- contactEmail 

隨着帳戶及使用ContactID外鍵約束就可以實現兩個表,其中可用於每個聯繫人之間建立起強大的聯繫由不同的用戶和每個用戶可能有不同的聯繫人。

相關問題