我正在为电子商务 Web 应用程序进行数据库设计。对于这个问题,我正在简化设计,只显示与我的问题相关的部分。
在这种情况下,我感兴趣的事物(实体)是Products、Upgrades和Orders。
Products和Orders以这种类型的数据库设计的典型方式相关,并使用一个表OrderItems来创建多对多关系:
Products
--------
ProductID (pk)
Name
Description
Price
Orders
------
OrderID (pk)
DateOrderPlaced
OrderItems
----------
OrderID (fk, cpk)
ProductID (fk, cpk)
Quantity
现在我想知道如何添加Upgrades到组合中:
- an
Upgrade可以对一个或多个有效Products - an
OrderItem可以涉及零个或多个有效Upgrades 
例如,假设我在OrderItems制作订单 #1 时有这些记录:
OrderID    ProductID
-------    ---------
1          1
1          2
1          3
我想将升级#1 应用到产品#1 和#2...
我可以想象添加一个Upgrades表格和一个OrderItemUpgrades表格,这将允许我将任意数量的应用Upgrades到给定的OrderItem(行中的行Order)。
Upgrades
--------
UpgradeID (pk)
Name
Description
Price
OrderItemUpgrades
-----------------
OrderID (fk, cpk)
ProductID (fk, cpk)
UpgradeID (fk, cpk)
Upgrade我认为这是对 an中的 aProduct的“应用程序”进行建模Order。
我的问题是,我在哪里为给定的给定的“有效性”Upgrade建模Product?我应该添加一个ValidProductUpgrades与升级和产品(或其他数据库层解决方案)相关的表吗?还是该业务逻辑属于应用层?