2014-04-18 130 views
0

我想知道是否有一種有效的方法來統計m:n關係中某一個實體的排列次數。希望下一個例子能夠正確地說明我的意思:

讓我們來想象一個有某種人和事件的基地。人們可以組織多個活動,活動可以由多人組織。我想要指出的是某個人的某個元組是否已經組織了一個活動,或者這是他們的第一次。我的第一個想法是爲m:n關係添加一個屬性計算m:n關係中元組的出現次數

PeopleID | EventID | TimesOrganized 
100  1   1 
200  1   1 
300  2   1 
400  3   1 

現在,有一個事件no。 4再次由200人和100人組織(假設他們應該按照順序添加)。新表應該是這樣的:

PeopleID | EventID | TimesOrganized 
100  1   2 
200  1   2 
300  2   1 
400  3   1 
200  4   2 
100  4   2 

現在,如果我說的人200和300舉辦的活動就應該是這樣的:

PeopleID | EventID | TimesOrganized 
100  1   2 
200  1   2 
300  2   1 
400  3   1 
200  4   2 
100  4   2 
200  5   1 
300  5   1 

我怎麼會去及時更新的第三列正確和我的選擇是什麼?



我還要補充一點,這個大項目的一部分,我們對其中的一個類,我們將實現一個使用數據庫以某種方式的應用程序,所以我還不如移動這應用程序邏輯,如果沒有簡單的方法。

回答

0

我不會推薦跟蹤TimesOrganized列。

您可以使用COUNT(EventId).. GROUP BY PeopleID根據需要簡單地查詢它。

如果你確實覺得你需要在某個地方維護這個值,那麼它可能會更好地歸一化到(推測的)表People。就像People.TimesOrganized。但是,您必須隨時增加它,而不是僅根據需要重新計算。

0

如果要計算某人組織事件多少次,問題不是m:n,而是1:m。只要計算由人羣分組的事件,就是這樣,如果不需要很多時間,您並不需要在表格中包含該列。

這就是說我發現你的表有點混亂,有細節和聚合混合,第三個徹頭徹尾的錯誤:PeopleID 200組織了3個事件,300個有2個事件。