食品选项数据库设计

时间:2014-03-14 21:06:48

标签: php sql database

我正在建立一个网站,餐馆可以将他们的菜单放在网上供人们订购。 我的数据库设计有问题,我一直在设置我的表格

*/----------------*
* 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表对于这个看起来是什么样的。我感谢任何帮助,谢谢。

3 个答案:

答案 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_saucechicken_breast -> honey_mustardsirloin -> 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)