购物车的建模项目和选项

时间:2011-09-19 16:53:22

标签: mysql database-design data-modeling

我正在开发一个购物车应用程序,我对如何根据以下要求对项目和选项进行建模感到非常困惑:

  1. 每个项目可能有零个或多个选项(颜色,大小等)
  2. 每个选项可能有几个不同的值(例如绿色,蓝色,红色和橙色)
  3. 具有相同选项的两个项目可能具有该选项的不同值(例如,您可以订购绿色或橙色的T恤,并且您可以订购蓝色或红色的球帽)
  4. 我确信这是一种有点常见的情况,但它不是我以前遇到过的情况。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

item表(包含项目)

item_id
name

options表(包含所有选项)

option_id
name
type -- color, front_color, back_color, size, shoe_size etc.

option_value表(存储每个选项的所有可用值)

option_value_id
option_id
value

item_available_option(存储每个项目的所有可用选项)

item_id
option_id

item_available_option_value(每个选项的每个项目存储所有可用选项值)

item_id
option_id -- not required, but I added since it's easier to figure it out
option_value_id

orders表(存储订单)

order_id
customer_id
order_date
billing_address
delivery_address

order_position表(包含订单位置)

order_pos_id
order_id
item_id
quantity

order_pos_option表(包含每个订单位置的选项)

order_pos_id
option_id
option_value_id

这是一种非常通用的方法,允许在每个项目的基础上定义未定义数量的选项和选项值。

如果没有那么多的选择,另一种选择就是具体,如下:


colors表(包含所有颜色)

color_id
name

item_available_colors(每个item_id的可用颜色)

item_id
color_id

sizes表(包含所有尺寸)

size_id
name

item_available_sizes(每个item_id的可用尺寸)

item_id
size_id

order_position表(包含订单位置)

order_pos_id
order_id
item_id
quantity
color_id
size_id

itemorders表保持不变,不再需要所有其他表。

还有很多其他可能的变化,这是为了给你提供一个起点。