Sta*_*bie 5 mysql database-design
说我卖了一些product。有时, theproduct实际上是 other 的组合product。例如,假设我正在销售:
我应该如何建模这样的东西?我是否应该有一个product表格来列出单个产品,然后是一个product_combo描述组合的表格,以及另一个与组合中的产品相关联product并product_combo逐项列出产品的表格?这对我来说似乎很简单。
但是,如果我想将所有销售额记录在一张表中怎么办?意思是,我不想要product_sales桌子和product_combo_sales桌子。我希望所有销售都集中在一张桌子上。我有点不确定如何以这样的方式对产品和产品组合进行建模,我以后可以将所有销售额记录在一张表中。
建议?
注意:我想知道是否可以使用父子关系将产品和产品组合放在一张表中。有了一张桌子,记录销售额就不会很难了。我只需要实施一项业务规则,即在已经针对该组合记录销售时编辑产品组合,该编辑实际上会产生一个新条目。不过,可能会变得凌乱。
这取决于您实际需要对系统做什么。需要跟踪库存的系统需要了解“组合餐”需要通过一个热狗和 32 盎司苏打水(或其他)来记入库存借方。然而,一个只跟踪订单和美元的系统并不真正关心组合餐“包含什么”——只关心你卖出一份并获得报酬。
也就是说,我们假设您需要库存系统。您可以通过稍微更改定义来降低复杂性。考虑 (1) 库存项目和 (2) 菜单项目。您的 inventory_items 表包含您购买并作为库存跟踪的商品(热狗、苏打水等)。您的 menu_items 表包含您销售的商品(大狗套餐、热狗(仅限三明治)等)。
您可以有一些菜单项,巧合的是,它们与库存项具有相同的名称,但对于这些菜单项,它们的处理方式与处理组合项的方式相同,并将单个记录粘贴到链接表中:
inventory_items menu_items recipes (menu_item, inventory, qty)
--------------- ------------ ----------
hot dog Hot Dog Hot Dog, hot dog, 1
hot dog bun Hamburger Hot Dog, hot dog bun, 1
hamburger patty (4oz) Big Dog Combo Hamburger, hamburger patty (4oz), 1
hamburger bun Soda (32oz) Hamburger, hamburger bun, 1
cola Big Dog Combo, hot dog, 1
ginger ale Big Dog Combo, hot dog bun, 1
Big Dog Combo, *soda, 32
Soda (32oz), *soda, 32
Run Code Online (Sandbox Code Playgroud)
只要构建这个例子,就会发现即使是低级的热狗也有两个组件(你必须数一下面包),而不仅仅是一个。为了提出最简单的情况(具有单个组件的菜单项),我将苏打水添加到菜单中。但是,请考虑一下,如果您要盘点非食品物品(杯子),那么即使是简单的苏打水也将包含两个组件(如果您要盘点吸管,则为三个组件)。
请注意,通过此设计,将没有用于处理组合项和非组合项的特殊代码路径。所有与菜单相关的功能将仅使用menu_items表格,所有库存和食品准备相关的功能将JOIN menu_items使用recipes和(如果需要其他字段)inventory_items。
您需要对可选组件(酸菜、调味品、辣椒等)以及可以从不同库存项目中选择的组件(在此模型中表示为 * 苏打水)进行特殊处理,但这应该可以帮助您入门。