我需要知道使用非规范化表与使用两个单独的表并使用连接访问数据的权衡是什么。我正在使用实体框架 4。
就我而言,我有两张桌子Order
和OrderCategoryDetails
. 我在想将这两个表合并到一个表中是否更好?
- 如果非规范化,添加的列 (
OrderCategory
和OrderSubcategory
将是稀疏的(可能 100% 为空。将始终至少 50% 为空) - 另一方面,如果我保持原样,我担心会频繁执行连接操作(即,每当我查询特定的 时
Order
,我也需要从中获取信息OrderCategoryDetails
。
目前,我已经规范化表格并使用导航属性:
从 OrderItem 实例访问订单类别信息
OrderItem orderItem = _context.OrderItems.Where(...).FirstOrDefault(); if(2 == orderItem.SalesOrder.Category.OrderCategory){ ...}
从 Order 实例访问 Order Category 信息
Order order = _context.Orders.Where(...).FirstOrDefault(); if(2 == order.Category.OrderCategory){ ...}
这是我的架构:
表:订单
ID
(首要的关键)- 日期
- 数量
- 项目计数
OrderCategoryInfo
(FK - 加入OrderCategoryDetails
onOrderCategoryDetails.ID
)
表:OrderCategoryDetails
ID
(首要的关键)- 订单类别
- 订单子类别
表:订单项
OrderItem ID
(首要的关键)- 订单 ID(FK - 加入
Order
)
使用的数据库:SQL Server 2008 R2