系統的每個組件都應該被使用,因爲它被設計成使它成爲「最好的」。當他們根據他們的設計工作時,事情會變得更好。嚴格來說,這是我對你的問題的回答。
關係數據庫
關係數據庫的目的首先是執政的你的信息的完整性和第二提供了存儲和檢索系統。 RDMS管理你的真相,然後決定它應該被存儲和檢索的方式。
由於我們難以但不是不可能想象數字討論牆的獨特性以及問題和答案,因此我們將典型地使用用於這些實體的主鍵的代用鍵(即自動生成的數字)。這意味着將課程ID添加到問題,回覆或BadgeAssignments的決定將違反校長關係設計。在這種情況下,你可能會說「沒有什麼大不了」,但它仍然是一種違法行爲,只要它持續下去(雙關語意),就會產生後果。
如果我們對課程,牆,問題,答覆和BadgeAssignments使用了自然鍵,那麼這些表中的每個表的主鍵都是來自這些表的組合。例如,我們會在複合答案的主鍵中包含課程的主鍵,而不會違反任何冗餘或正常化的原則,並且您的生活將「更容易」。
這就是說,這個查詢有什麼難的?
SELECT
D.CourseId, D.CourseName
,A.ReplyId, A.ReplyName
FROM
Replies A
JOIN Questions B On A.QuestionId = B.QuestionId
JOIN Walls C ON B.WallId = C.WallId
JOIN Courses D ON C.CourseId = D.CourseId
實體框架
實體框架(EF)可以配置無論我們把CourseId在回覆還是依靠我們加入,以符合您的設計。但是,當談到SQL性能時,我們通常可以比EF做得更好。
一個選項將是根據您的需要製作一個SQL查詢(從上面的一個開始),它具有最高的優化量,並將其轉換爲View。然後,將C#類映射到View(而不是表),並簡化了交互。我們會讓EF超出提供低麻煩數據訪問和SQL成功檢索數據。
下面是對
var replies = context.RepliesView.Where(x => x.CourseId == 1).ToList();
這是我的信念,在這兩個之間的最佳平衡可能能但如果沒有關於規模,用途或結構的更多具體信息,則難以評估,還是這種假設?在這種情況下不應該是程序員? –
這是我正在開發的應用程序。你能詳細說明你的意思的大小,結構等嗎? @ J-Boss – renakre
好吧,例如,你在Entity Framework中這樣做,你期望或者有多少學生記錄,你總共有多少課程等等。對於使用多少訪問,通過什麼意味着,您可能會得到多少這些高度複雜的聯結?可以通過重新規範化對象框架來解決嗎?按結構我的意思是多少個實體,有多少個類型?例如: –