系统的每个组件都应该被使用,因为它被设计成使它成为“最好的”。当他们根据他们的设计工作时,事情会变得更好。严格来说,这是我对你的问题的回答。
关系数据库
关系数据库的目的首先是执政的你的信息的完整性和第二提供了存储和检索系统。 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中这样做,你期望或者有多少学生记录,你总共有多少课程等等。对于使用多少访问,通过什么意味着,您可能会得到多少这些高度复杂的联结?可以通过重新规范化对象框架来解决吗?按结构我的意思是多少个实体,有多少个类型?例如: –