2012-03-25 89 views
0

我想了解如何設計一個數據庫,可以容納每個用戶不確定數量的字段。設計數據庫以適應不定數量的用戶的最佳方式?

例如,用戶1涉及項目A,B和C.用戶2涉及項目A,C,E和G,而用戶3涉及項目A,B,C,D,E,F和G.

一張表格列出用戶列表中,然後再列出7列記錄他們參與的項目將非常好的...直到我不得不容納User4參與100個項目,其中我的模型,需要100列保持跟蹤。

最終沒有辦法事先知道要定義多少列。

我可以將其翻轉並將用戶1與項目B相關聯,但隨後進一步沿着道路行進,在有10,000個項目後,我必須查看每個項目記錄以生成項目的完整列表一個特定的用戶已經參與了,這似乎非常低效。

那麼...如何跟蹤?只是不能把我的頭圍繞在這個上面。

我是新手,所以請原諒,如果這是說不清或基本上。

感謝,

回答

4

這聽起來像你可能試圖將這兩個實體(userproject)混合到一個表中,這實際上不是最好的方法。

一種不同的方法是在在projectuser表,項目信息的用戶信息,而另一個「鏈接」表像user_projects,這將只包含從userproject表ID字段,一個條目爲每個項目中的每個用戶。

的示例模式:

user (userID, firstName, lastName) 

project (projectID, projectTitle) 

user_projects (userID, projectID) 

要選擇項目名稱爲用戶3,你可以這樣做:

SELECT p.projectTitle 
FROM project p INNER JOIN user_projects up ON p.projectID = up.projectID 
WHERE up.userID = 3 

user_projects表的一點是要包含在信息鏈接userproject表,就是這樣。

+0

啊是的。項目僅限於20個貢獻者,因此ProjID爲20行(潛在)貢獻者UserID。這是否意味着我辭職到SELECT ProjID WHERE column_1 = UserID或column_2 = UserID OR ... column_20 = UserID?或者我可以更有效地做到這一點? – 2012-03-25 03:05:19

+0

更有效率,我會編輯我的答案更清晰 – kaveman 2012-03-25 03:14:12

+0

感謝TON爲你在這裏的努力,卡夫曼。我將不得不嘗試它,然後才能完全掌握它,但讓我重新說明我的理解,如果你閱讀了這篇文章,告訴我是否得到它:當用戶對項目做出貢獻時, ProjID和UserID被添加到user_projects表中。然後,我可以很容易地獲得ProjID的任何地方,即所討論的用戶的ID也存在。這似乎很容易說。合理?再次感謝... – 2012-03-25 03:32:50

3

衆多典型的一對多的關係。

您需要創建一個表格,其中每個條目將是一個關係:user_id,project_id。 如果某些用戶(ID = uid)是參與項目(ID = pid),然後才把有該表一對(2列記錄):user_idproject_id

是的,這可能聽起來很奇怪,以人沒見過這一點,但這是製造的原理無處不在和DB都OK這樣的表的處理速度。

如果後來你決定,每個用戶應該在項目中有一些角色,你可以添加其他字段到該表。

+0

這有幫助。我沒有意識到我所期待的「多對多」術語。 Google的一個快速搜索表明,這可能正是我試圖矇蔽的貓。謝謝。 – 2012-03-25 03:18:03

相關問題