购物车的建模项目和选项

And*_*rew 1 mysql database-design data-modeling

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

  1. 每个项目可能有零个或多个选项(颜色,大小等)
  2. 每个选项可能有几个不同的值(例如绿色,蓝色,红色和橙色)
  3. 具有相同选项的两个项目可能具有该选项的不同值(例如,您可以订购绿色或橙色的T恤,并且您可以订购蓝色或红色的球帽)

我确信这是一种有点常见的情况,但它不是我以前遇到过的情况.有任何想法吗?

Mar*_*urz 5

item 表(包含项目)

item_id
name
Run Code Online (Sandbox Code Playgroud)

options 表(包含所有选项)

option_id
name
type -- color, front_color, back_color, size, shoe_size etc.
Run Code Online (Sandbox Code Playgroud)

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

option_value_id
option_id
value
Run Code Online (Sandbox Code Playgroud)

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

item_id
option_id
Run Code Online (Sandbox Code Playgroud)

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

item_id
option_id -- not required, but I added since it's easier to figure it out
option_value_id
Run Code Online (Sandbox Code Playgroud)

orders 表(存储订单)

order_id
customer_id
order_date
billing_address
delivery_address
Run Code Online (Sandbox Code Playgroud)

order_position 表(包含订单位置)

order_pos_id
order_id
item_id
quantity
Run Code Online (Sandbox Code Playgroud)

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

order_pos_id
option_id
option_value_id
Run Code Online (Sandbox Code Playgroud)

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

如果没有那么多选项,那么另一种方法就是具体,如下所示:


colors 表(包含所有颜色)

color_id
name
Run Code Online (Sandbox Code Playgroud)

item_available_colors (每个item_id可用的颜色)

item_id
color_id
Run Code Online (Sandbox Code Playgroud)

sizes 表(包含所有尺寸)

size_id
name
Run Code Online (Sandbox Code Playgroud)

item_available_sizes (每个item_id的可用尺寸)

item_id
size_id
Run Code Online (Sandbox Code Playgroud)

order_position 表(包含订单位置)

order_pos_id
order_id
item_id
quantity
color_id
size_id
Run Code Online (Sandbox Code Playgroud)

itemorders表保持不变,不需要其他所有了.

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