我正在建立一个网站,餐馆可以将他们的菜单放在网上供人们订购。 我的数据库设计有问题,我一直在设置我的表格
*/----------------*
* menus
*-----------------*
id
restaurant_id
name
active
created_at
updated_at
*/----------------*
* menu_categories
*-----------------*
id
menu_id
name
created_at
updated_at
*/----------------*
* items
*-----------------*
id
menu_id
menu_category_id
name
price
description
active
created_at
updated_at
但是我无法弄清楚如何存储菜单项的选项(变体)。例如,菜单项与不同种类的酱汁和肉类一起供应,肉类仅影响物品的价格。 一个好的db表对于这个看起来是什么样的。我感谢任何帮助,谢谢。
答案 0 :(得分:2)
我会创建一个名为item_variations
的表,看起来像
id
item_id
name
variation_type
price_variation
active
created_at
updated_at
然后,您可以在此表中使用item_id
链接到该项目的一个或多个条目。该表将包含变体名称,类型和价格差异。典型的记录看起来像
id: 1
item_id: 2
name: Lamb
variation_type: Meat
price_variation: 1.00
active: 1
....
或者
id: 2
item_id: 2
name: Mint sauce
variation_type: Sauce
price_variation: 0.50
active: 1
....
答案 1 :(得分:1)
将我的评论转换为答案:我说您需要一个选项表和一个items_options表,因此您可以将许多选项与多个项目关联起来。 IE:chicken_breast -> bbq_sauce
,chicken_breast -> honey_mustard
,sirloin -> bbq_sauce
*/----------------*
* options
*-----------------*
id
name
price?
...
*/----------------*
* items_options
*-----------------*
id_item
id_option
price?
...
price
可以是两个表中的任何一个的一部分,具体取决于您的实现(如果您希望选项总是花费相同,或者根据项目的不同而花费不同)
答案 2 :(得分:0)
您应该创建另一个名为options_(menuid)的表
创建新菜单时应创建此表
*/----------------*
* options_(menuid)
*-----------------*
id
menu_category_id
menu_item_id
name
price
description
active
created_at
updated_at
基本上,您的脚本应为每个菜单创建一个新表,以便保持群集,因为每个菜单可能会有很多选项。 menu_category_id是类别的ID,menu_item_id将是菜单项的ID。
关于查询的一些想法:
-List Menus (SELECT * FROM menus WHERE restaurant_id='$restaurant' AND active=true)
-List Categories (SELECT * FROM menu_categories WHERE menu_id='$menu')
-List Menu Items (SELECT * FROM items WHERE menu_id='$menu' AND menu_category_id='$menu_category' AND active=true)
-List item options (SELECT * FROM options_id WHERE menu_category_id='$menu_category' AND menu_item_id='$item' AND active=true)