Database design 如何加上「;“升级”;实体到产品订单数据库设计?

Database design 如何加上「;“升级”;实体到产品订单数据库设计?,database-design,e-commerce,data-modeling,Database Design,E Commerce,Data Modeling,我正在为一个电子商务web应用程序进行数据库设计。对于这个问题,我简化了设计,只展示了与我的问题相关的部分 在这个场景中,我感兴趣的东西(实体)是产品,升级,以及订单 对于这种类型的数据库设计,产品和订单以一种典型的方式相互关联,通过一个订单项表来创建多对多关系: Products -------- ProductID (pk) Name Description Price Orders ------ OrderID (pk) DateOrderPlaced OrderItems -----

我正在为一个电子商务web应用程序进行数据库设计。对于这个问题,我简化了设计,只展示了与我的问题相关的部分

在这个场景中,我感兴趣的东西(实体)是
产品
升级
,以及
订单

对于这种类型的数据库设计,
产品
订单
以一种典型的方式相互关联,通过一个
订单项
表来创建多对多关系:

Products
--------
ProductID (pk)
Name
Description
Price

Orders
------
OrderID (pk)
DateOrderPlaced

OrderItems
----------
OrderID (fk, cpk)
ProductID (fk, cpk)
Quantity
现在我想知道如何将
升级
添加到组合中:

  • 升级可以对一个或多个
    产品有效
  • OrderItem
    可以包含零个或多个有效的
    升级
例如,假设我在
OrderItems
making Order#1中有这些记录:

我想将升级1应用于产品1和产品2

我可以想象添加一个
Upgrades
表和一个
OrderItemUpgrades
表,这将允许我对给定的
OrderItem
应用任意数量的
升级

我认为这是对
升级
产品
订单
的“应用程序”建模

Upgrades
--------
UpgradeID (pk)
Name
Description
Price

OrderItemUpgrades
-----------------
OrderID (fk, cpk)
ProductID (fk, cpk)
UpgradeID (fk, cpk)

我的问题是,对于给定的
产品
,我在哪里对给定的
升级
的“有效性”建模?我是否应该添加一个与升级和产品(或其他数据库层解决方案)相关的
ValidProductUpgrades
表?或者,该业务逻辑属于应用程序层吗?

我将完全按照您在上面的最后一个代码块中所显示的那样做。在这种情况下,添加一个单独的表是有意义的,该表将实际将升级连接到特定订单,同时记住产品

因为升级可以对一个或多个产品有效,并且考虑到这一点,可以对单个产品应用多个升级;拥有ValidProductUpgrades表也很有意义,然后可以查询该表以确保仅当产品的升级能够应用于所述产品时,才会显示该产品的升级

我认为你上面的假设是完整的,并且可能是处理这个问题的最好方法


希望这有帮助

我将完全按照您在上面的最后一个代码块中所显示的操作。在这种情况下,添加一个单独的表是有意义的,该表将实际将升级连接到特定订单,同时记住产品

因为升级可以对一个或多个产品有效,并且考虑到这一点,可以对单个产品应用多个升级;拥有ValidProductUpgrades表也很有意义,然后可以查询该表以确保仅当产品的升级能够应用于所述产品时,才会显示该产品的升级

我认为你上面的假设是完整的,并且可能是处理这个问题的最好方法


希望这有帮助

谢谢韦德,这是很有帮助的,因为第三方确认我的做法是正确的!谢谢韦德,这是很有帮助的,因为第三方确认我的做法是正确的!
Upgrades
--------
UpgradeID (pk)
Name
Description
Price

OrderItemUpgrades
-----------------
OrderID (fk, cpk)
ProductID (fk, cpk)
UpgradeID (fk, cpk)