2010-06-08 33 views
0

我想知道什麼是他們公司對聯繫人進行分組的最佳方式。現在,用戶可以按自定義他們的聯繫人創建名單,但我想通過自己的公司以及存儲聯繫人的位置(XYZ公司即項目經理)能夠組聯繫人。數據庫設計按名單和公司分組的聯繫人

數據庫明智的,這是我對聯繫人進行分組到列表

接觸
[id_contact] [INT] PK NOT NULL,
[姓氏] [爲varchar(128)NULL,
[名字] [VARCHAR](128)NULL,
......

CONTACT_LIST
[id_contact] [INT] FK,
[ID_LIST] [INT] FK,

列表
[ID_LIST] [INT] PK
[id_user] [INT] FK
[LIST_NAME] [VARCHAR(128)NOT NULL,
[說明] [TEXT] NULL

我應該實現由公司聯繫人進行分組相似的地方?如果是這樣,我將如何存儲聯繫人在該公司的職位,以及如何防止數據損壞,如果用戶修改聯繫人的公司名稱。例如John Doe改變了公司,但其他同事仍然在舊公司。

我懷疑這會經常發生(甚至可能根本不會發生),但最好是安全,而不是抱歉。我還保留審計線索,以便聯繫人仍然需要與舊公司以及新公司聯繫起來,但不會混淆他目前實際工作的公司。

我希望這是有道理的......有沒有人遇到過這樣的問題?


UPDATE

會像這樣有意義

contact_company
[id_contact_company] [INT] PK
[id_contact] [INT] FK
[ id_company] [int] FK
[CONTACT_TITLE] [VARCHAR](128)

公司
[id_company] [INT] PK NOT NULL,
[COMPANY_NAME] [VARCHAR](128)NULL,
[company_description] [VARCHAR] (300)NULL,
[CREATED_DATE] [日期時間] NOT NULL

這樣的接觸可以爲多家公司和聯繫人工作可以由企業

分組

回答

1

你有什麼隨着更新看起來正確。

所以,我看到它,你有用戶,並且每個用戶都有一個主要的聯繫人列表。用戶還可以在主列表中組織聯繫人列表。每個聯繫人都有他們的名字和聯繫信息以及他們曾經工作過的幾家公司,而且他們必須跟蹤他們當前的公司。

將公司保存在一個單獨的表中是一個好主意。通常情況下,文本字段可以起作用,但由於您計劃將公司更多地用作個體實體,因此單獨的表格效果最佳。

我覺得我正在重複你擁有的東西,但我會把看起來最好的設置。我只是寫我的約定如下(下劃線表示一對多):

*user* 
id [int PK], 
... 

*user_contact* 
id [int PK], 
user [int FK (user)], 
currentCompany [int FK (company)] 
... 

*user_contact_company* 
id [int PK], 
contact [int FK (user_contact)], 
company [int FK (company)], 
startDate [date], 
endDate [date] 
... 

*user_contactList* 
id [int PK], 
user [int FK (user)] 
... 

*user_contactList_contact* 
id [int PK], 
contactList [int FK (user_contactList)], 
contact [int FK (contact)] 
... 

*company* 
id [int PK] 
... 

然後,一個基本的分組:

SELECT * FROM `user_contact` WHERE `user` = <USER_ID> GROUP BY `currentCompany` 

但我不認爲這會工作

SELECT DISTINCT `currentCompany` FROM `user_contact` WHERE `user` = <USER_ID> 

然後每家公司:

SELECT * FROM `user_contact` WHERE `company` = <COMPANY> 
01,你喜歡的話,那麼你可以有兩個查詢方式

有很多其他方法可以做到這一點,具體取決於您計劃如何實現它。例如,你可以做一個ORDER BY,這樣所有的公司都被分組在一起,然後你的代碼顯示公司可以看到現在的公司是否與以前的公司不同,並做出正確的區分。

至於公司職位,您可以考慮做文本或引用另一個表,具體取決於您如何使用它。如果您要進行排序,例如「項目管理器」將與其他「項目管理器」分組,則它應該位於另一個表中,否則有人可能會選擇與項目管理器不同的名稱,或者將名稱命名爲小寫儘管它們在語義上是相同的。

+0

+1因爲你非常接近我的實現,除非我認爲你可能誤解了一個細節(或者我誤解了你的答案) 你正在將用戶鏈接到一個公司(或幾個公司)事實上聯繫人需要與一個或幾個公司聯繫起來。有一個聯繫人主列表,允許用戶創建他們自己的分組。我發佈的更新顯示了默認情況下聯繫人是如何按公司分組的,我基本上使用了相同的表格佈局,但是用於創建列表。 – Serge 2010-08-12 16:13:21

+0

對於公司職位,當你說另一個表時,你的意思是創建一個表並插入諸如「Project Manager」等默認值,或讓用戶在該表中插入值並將它們鏈接到聯繫人? – Serge 2010-08-12 16:14:07

+0

我回答已經有一段時間了,但我想我記得發生了什麼。 這個設置我給公司鏈接了聯繫人,它被稱爲'user_contact_company'的唯一原因是因爲聯繫人與用戶有關,而聯繫人與公司有關。所以用戶不直接聯繫,聯繫是。不過,我可能會誤解你在說什麼,如果我沒有道理,那麼糾正我。 – rovaughn 2010-08-12 22:05:12

相關問題