2014-09-18 53 views
0

在我的領域層,我有以下兩個實體MongoDB的集合MongoDB的關係

public class League 
{ 
    public ObjectId Id { get; set; } 
    public string LeagueName { get; set; } 
    public List<ObjectId> Teams { get; set; } 
} 

public class Team 
{ 
    public ObjectId Id { get; set; } 
    public string UserId { get; set; } 
    public string Teamname { get; set; } 
    public int Rating { get; set; } 
} 

服務層

因此,每個聯賽都有球隊的名單,參考使用的ObjectId。但這意味着我的服務層需要知道ObjectId,因此我必須在那裏有一個mongoDb引用。所以我的問題是,你是否需要將關係引用存儲爲ObjectId類型,MongoDB中關係的正常標準是什麼?在C#內

回答

2

Yoe需要首先分析你將要在數據庫中寫入的數據。

一些基本規則:

如果您將執行更多的讀比寫,然後嵌入儘可能多的,你可以,這將提高讀取性能,並允許在該數據庫中的單個調用來讀取數據。嵌入與否的選擇通常取決於數據如何增長,隨時間變化以及如何查詢。

考慮用於快速查詢的數據的非標準化,有時在其他集合上重複的名稱不會那麼糟,只要您避免對數據庫執行多重查詢即可。

其他注意事項:

非規範化隨時添加一些開銷來寫,但增加的讀取速度。對於你的情況,我認爲將比寫入更多的讀取和大量使用的非規範化。

在讀取數據時,考慮在不需要它們的情況下從對象中排除字段,但對於使用linq的c#而言,proyections不能很好地工作,但是對於此特定問題有一些解決方法,所以請注意它。

編輯:如果你計劃有更多的 讀比寫大概可以有一個單一的集合所有的imofrmation。

public class League 
{ 
    public ObjectId Id { get; set; } 
    public string LeagueName { get; set; } 
    public List<Team> Teams { get; set; } 
} 

編輯:

對象之間建立引用的最佳數據類型是的ObjectId,但是我會非常適合您檢查數據modeling的escenarios的情況下,你還沒有看着它。

+0

好的,在這個例子中,我有聯盟包含球隊,現在球隊名稱可以隨時間變化,所以球隊需要成爲一個自己的權利?所以有兩個聯賽和球隊。球隊可以是許多聯盟的一部分,或者沒有聯盟,聯盟總是有球隊名單。什麼樣的數據類型以及我如何設置這種關係? – Luke 2014-09-18 20:04:51

+0

如果你有更多的閱讀而不是寫作,那麼在聯盟中有一個團隊名單更方便。 – 2014-09-18 20:39:19

+0

這是有道理的,但我想知道的是當我有一個關係,什麼樣的數據類型是最好的做法,現在一個聯盟屬於一個賽季。每個賽季都有一些球隊加入的聯賽。所以團隊需要成爲一個擁有自己權利的集合,聯盟需要包含一個id列表,我需要用什麼樣的數據類型和列表(array,Ienumerable,List,Collection)來表示聯盟有一個列表團隊 – Luke 2014-09-19 09:03:36