非正規化テーブルを使用することと、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