多个来源的订单管理数据库设计

时间:2015-05-29 18:31:25

标签: sql database database-design

我想知道建立订单管理数据库的最佳方法是什么,其中有多个商店,每个商店都有自己的产品和价格清单。

我当前的设计

Product
------
name
image
price_per_item


Shop
------
name
product_list - Manytomany field 


Order
------
order_id    primary key
shop 


Order Content
------
order_id    foreign key to Order
product
quantity

我预见到的问题是,每个商店可能有相同的商品,但可能会以不同的price_per_item销售该商品。

我究竟如何构建一个数据库,商店可以设法为每件商品设置不同的价格但是还有多件商品可供出售?

1 个答案:

答案 0 :(得分:3)

你太担心这些关系了,对桌子并不担心。

首先,让我们构建一个商店表。

Shop
----
Shop ID
Shop Number
Shop Name
Shop Address
...

通常,表具有单数名称和自动递增整数作为主键。这也称为盲密钥。这就是为什么我有商店ID和商店号码的原因。商店ID是主键,商店编号是数据。可以更改商店编号,而无需更改我们将要构建的任何关系。

现在,让我们构建一个产品表。

Product
-------
Product ID
Product Name
Product Manufacturer ID
...

产品ID是主键。产品制造商ID是Product Manufacturer表的外键。我将把“产品制造商”表的创建作为练习留给您。

现在,商店可以拥有许多产品,并且可以在许多商店中携带产品。这是一种多对多的关系。我们使用联结表对此关系进行建模。

ShopProduct
-----------
Shop ID
Product ID
Product Cost
Product Price
Product Count
...

主键是(商店ID,产品ID)。您还有一个唯一索引(产品ID,商店ID)。产品价格和产品计数值属于多对多关系,而不是商店或产品。

您可以通过主键获取商店的产品列表。您还可以通过唯一索引获取产品商店列表,总库存以及平均价格。

现在,我们可以谈谈订单。您遇到的问题是订单只能发送给一个制造商。您还希望合并商店的订单,以便为所有商店订购正确的数量。

让我们构建订单表。

Order
-----
Order ID
Product Manufacturer ID
Order Time Stamp
Order Delivery Date
...

订单ID是主键。产品制造商ID是外键。

接下来,让我们构建 OrderItem 表。这是订单中商品的标准名称。

OrderItem
---------
OrderItem ID
Order ID
Store ID
Product ID
...

OrderItem ID是主键。订单ID是外键。商店ID是外键。产品ID是外键。

您可以使用订单ID从订单表中的产品制造商ID获取制造商信息。

您可以从订单ID

获取订单信息

您可以从商店ID获取商店信息。订单不需要此信息。在制造商发货后,有必要知道产品的交付地点。

您可以从产品ID获取产品信息。

我希望这足以让你开始解释。首先,您对对象进行建模,例如存储产品。然后,您可以对对象之间的关系进行建模,例如 ShopProduct