圆形关系的最佳数据库设计

时间:2014-10-01 11:31:59

标签: sql-server database entity-framework database-design entity-framework-5

我有以下类图:


Customer

Id
Name
Email


Packages

Id
Name
ImageUrl
Price
Description
Products (One package may have 1 to many products)


Products

Id
Name
ImageUrl
Price
Description


Orders

Id
CustomerId
Address

如何在订单,产品和包装之间建立关系。我正在使用Entity Framework 6 Code First和MVC 5 webapi。

编辑:

  • 客户可以下多个订单,一个订单只与一个客户相关联
  • 一个订单可以包含多个产品,一个产品可能有多个订单
  • 客户可订购多个包裹,一个包裹可由多个客户订购
  • 感谢

1 个答案:

答案 0 :(得分:1)

  1. Customer - Orders有一对多关系。在CustomerId中需要ForeignKey Orders。所以上面应该这样做。
  2. Orders - Products有很多关系。需要多个表(例如,RelatedOrderProducts),其中包含表OrderIdProductId的外键字段OrdersProducts
  3. CustomerPackages也是多对多的关系。与上面相同,应该有多个表(RelatedPackagesCustomers),分别包含表PackageIdCustomerId的外键字段PackagesCustomers。 / LI>

    我不熟悉实体框架MVC,但这是您可以遵循的数据库设计。

    修改

    我可能误解了第三种关系。根据您希望如何访问数据,有一些修复可能会起作用。一种可能的编辑方式是将RelatedPackagesCustomers表更改为RelatedOrderPackages表,并相应地更改外键。通过这种方式,您将拥有两个关系,订单包和订单产品,这些产品将保存包含产品包和产品组合的订单。

    要保存,您应该添加订单并使用OrderId在其resp中添加产品和包关系。关系表。

    当您需要获取客户订购的所有包裹和产品的清单时,您将使用Order查询CustomerId,并在其上执行两次JOIN将从RelatedOrderPackages获取包的查询以及与特定RelatedOrderProducts相关的OrderId的产品(与客户间接相关)。