非正規化テーブルを使用することと、2つの別々のテーブルを使用して結合を使用してデータにアクセスすることのトレードオフを知る必要があります。EntityFramework4を使用しています。
私の場合、2つのテーブルOrder
とOrderCategoryDetails
。これらの2つのテーブルを1つのテーブルにマージする方が良いかどうかを考えていますか?
- 非正規化されている場合、追加された列はスパースになります( 100%空
OrderCategory
にOrderSubcategory
なる可能性があります。常に少なくとも50%空になります) - 一方、そのままにしておくと、頻繁に結合操作が実行されるのではないかと心配です(つまり、特定
Order
の情報を照会するときはいつでも、そこからの情報が必要になりOrderCategoryDetails
ます。
現在、私はテーブルを正規化し、ナビゲーションプロパティを使用しています。
OrderItemインスタンスから注文カテゴリ情報にアクセスするには
OrderItem orderItem = _context.OrderItems.Where(...).FirstOrDefault(); if(2 == orderItem.SalesOrder.Category.OrderCategory){ ...}
OrderインスタンスからOrderCategory情報にアクセスするには
Order order = _context.Orders.Where(...).FirstOrDefault(); if(2 == order.Category.OrderCategory){ ...}
これは私のスキーマです:
表:注文
ID
(主キー)- 日にち
- 額
- ItemCount
OrderCategoryInfo
(FK-にOrderCategoryDetails
参加OrderCategoryDetails.ID
)
表:OrderCategoryDetails
ID
(主キー)- OrderCategory
- OrderSubCategory
テーブル:OrderItem
OrderItem ID
(主キー)- 注文ID(FK-参加
Order
)
使用したデータベース:SQL Server 2008 R2