我需要知道使用非规范化表与使用两个单独的表并使用连接访问数据的权衡。我正在使用Entity Framework 4。
在我的情况下,我有两个表Order
和OrderCategoryDetails
。
我在考虑是否将这两个表合并为一个表更好?
OrderCategory
和OrderSubcategory
将是稀疏的(可能100%为空。将始终至少50%为空)Order
时,我都需要来自OrderCategoryDetails
的信息太目前,我已对表格进行了规范化并使用了导航属性:
从OrderItem实例
访问订单类别信息OrderItem orderItem = _context.OrderItems.Where(...).FirstOrDefault();
if(2 == orderItem.SalesOrder.Category.OrderCategory){ ...}
从订单实例
访问订单类别信息Order order = _context.Orders.Where(...).FirstOrDefault();
if(2 == order.Category.OrderCategory){ ...}
这是我的架构:
表:订单
ID
(主键)OrderCategoryInfo
(FK - 与[{1}}上的OrderCategoryDetails
加入)表:OrderCategoryDetails
OrderCategoryDetails.ID
(主键)表:OrderItem
ID
(主键)OrderItem ID
)使用的数据库:SQL Server 2008 R2
答案 0 :(得分:5)
我的一般建议是问自己以下问题;第一个表中的每一行都需要第二个表中的一行吗?如果答案是是,那么可能最好不要对数据进行反规范化。如果答案是不,那么最好将其保留为单独的表格。
只要在两个表之间设置外键关联,就不应该关注执行连接的性能影响。它只会成为病态情况下的一个问题。
根据您在评论主题中的答案,我建议您将表格分开并在两者之间建立外键关系。
如果您确实遇到任何性能问题,请在有问题的SQL上运行探查器并添加探查器推荐的任何索引,但只对经常使用的查询执行此操作。索引非常适合加速查询,但代价是插入性能,所以要小心它们。