1

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

在这种情况下,我感兴趣的事物(实体)是ProductsUpgradesOrders

ProductsOrders以这种类型的数据库设计的典型方式相关,并使用一个表OrderItems来创建多对多关系:

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

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

OrderItems
----------
OrderID (fk, cpk)
ProductID (fk, cpk)
Quantity

现在我想知道如何添加Upgrades到组合中:

  • anUpgrade可以对一个或多个有效Products
  • anOrderItem可以涉及零个或多个有效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与升级和产品(或其他数据库层解决方案)相关的表吗?还是该业务逻辑属于应用层?

4

1 回答 1

1

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

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

我认为您上面的假设是完整的,并且可能是处理此问题的最佳方法!

希望这可以帮助!

于 2009-09-08T20:42:50.340 回答