mysql存储food_mysql - Pizza&Food - 数据库设计 - 堆栈内存溢出

我想创建一个网站,允许客户从网站订购食物。

有两种食物类型:

常规食品/饮料(例如:汉堡,烤肉串,薯片,可乐,百事可乐等)

比萨食品(例如:Margherita Pizza,肉类比萨饼等)

如果他们从列表中选择披萨 - 他们可能需要选择Base(薄皮,脱壳),Extras和披萨大小/选项。

在这种情况下如何设计表格?

注意 :每个项目都有1个或更多选项。 一个选项可能有额外的(1或更多)或没有额外的。 如果项目是披萨类型 - 那么它可能有基地(地壳)

截图原型

看到我试图实现的两个截图,我在数据库设计的正确路径上或者哪些可以做得更好?

比萨定制:

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS94STIzeC5qcGc=

牛肉汉堡定制:

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8xOGZENi5qcGc=

额外功能(下拉/复选框)

在附加内容上,有时我需要为下拉列表添加多个额外内容而不是tickbox。 这意味着客户只能从1个,2个或3个下拉菜单中选择1个。

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9VdlowSy5qcGc=

数据库设计

您将如何设置数据库模式以实现上述自定义选项? 这是我想出的:

类别表:

+----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+----------------+

| cat_id | int(11) | NO | PRI | NULL | auto_increment |

| cat_name | varchar(100) | NO | | NULL | |

+----------+--------------+------+-----+---------+----------------+

物品表:

+-----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+--------------+------+-----+---------+----------------+

| item_id | int(11) | NO | PRI | NULL | auto_increment |

| cat_id | int(11) | NO | | NULL | |

| item_name | varchar(100) | NO | | NULL | |

| item_type | int(11) | NO | | NULL | |

+-----------+--------------+------+-----+---------+----------------+

- item_type(0 =正常,1 =披萨,2 =套餐)

item_options表:

+-------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------------+--------------+------+-----+---------+----------------+

| option_id | int(11) | NO | PRI | NULL | auto_increment |

| item_id | int(11) | NO | | NULL | |

| option_name | varchar(100) | NO | | NULL | |

| price | decimal(6,2) | NO | | NULL | |

+-------------+--------------+------+-----+---------+----------------+

item_extras表:(您认为应该有单独的表来进行披萨toppin和extras?)

+-----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+--------------+------+-----+---------+----------------+

| extra_id | int(11) | NO | PRI | NULL | auto_increment |

| option_id | int(11) | NO | | NULL | |

| name | varchar(50) | NO | | NULL | |

| cost | decimal(6,2) | NO | | NULL | |

+-----------+--------------+------+-----+---------+----------------+

item_pizza_base表:

+-----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+--------------+------+-----+---------+----------------+

| base_id | int(11) | NO | PRI | NULL | auto_increment |

| option_id | int(11) | NO | | NULL | |

| base_name | varchar(50) | NO | | NULL | |

| cost | decimal(6,2) | NO | | NULL | |

+-----------+--------------+------+-----+---------+----------------+

SQL结果:

mysql> select * from categories;

+--------+----------+

| cat_id | cat_name |

+--------+----------+

| 1 | Pizzas |

| 2 | Burgers |

mysql> select * from items;

+---------+--------+------------------+-----------+

| item_id | cat_id | item_name | item_type |

+---------+--------+------------------+-----------+

| 1 | 1 | Vegetarian Pizza | 1 |

| 2 | 2 | Beef Burger | 0 |

mysql> select * from item_options;

+-----------+---------+-------------+-------+

| option_id | item_id | option_name | price |

+-----------+---------+-------------+-------+

| 1 | 1 | 12 Inches | 5.60 |

| 2 | 1 | 14 Inches | 7.20 |

| 3 | 2 | 1/4lb | 1.80 |

| 4 | 2 | 1/2lb | 2.50 |

mysql> select * from item_extras;

+----------+-----------+-----------+------+

| extra_id | option_id | name | cost |

+----------+-----------+-----------+------+

| 1 | 1 | Mushroom | 1.00 |

| 2 | 1 | Pepperoni | 1.00 |

| 3 | 2 | Mushroom | 1.00 |

| 4 | 2 | Pepperoni | 1.00 |

| 5 | 3 | Chips | 0.50 |

| 6 | 4 | Chips | 0.50 |

正如你可以在1张桌子上看到汉堡包和披萨的额外内容......它应该分开吗?

mysql> select * from item_pizza_base;

+---------+-----------+------------+------+

| base_id | option_id | base_name | cost |

+---------+-----------+------------+------+

| 1 | 1 | Thin Crust | 0.00 |

| 2 | 1 | Deep Crust | 0.00 |

| 3 | 2 | Thin Crust | 0.00 |

| 4 | 2 | Deep Crust | 0.00 |

+---------+-----------+------------+------+

请记住,每个项目的额外费用并不总是相同。 例如:比萨尺寸10“每增加1美元,但12英寸比萨增加0.50美元。 还有一个案例,每个披萨将有不同的额外费用。

数据库设计是正确的还是可以改进的?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值