【问题标题】:Food item options database design食品选项数据库设计
【发布时间】:2014-03-15 05:28:17
【问题描述】:

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

*/----------------*
* 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

但是我不知道如何存储菜单项的选项(变化)。例如,一个菜单项配以不同种类的酱汁和肉类,而肉类只会影响项目的价格。 一个好的数据库表会是什么样子。感谢您的帮助,谢谢。

【问题讨论】:

  • 我想说你需要一个options 表和一个items_options 表,这样你就可以将许多选项与许多项目联系起来。即:chicken_breast -> bbq_saucechicken_breast -> honey_mustardsirloin -> bbq_sauce
  • @rawk 你能给我一个例子吗,我是否必须从items 表中删除价格字段?

标签: php sql database


【解决方案1】:

我会创建一个名为 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
....

【讨论】:

    【解决方案2】:

    将我的评论转换为答案:我会说您需要一个选项表和一个 items_options 表,因此您可以将许多选项与许多项目联系起来。即:chicken_breast -> bbq_saucechicken_breast -> honey_mustardsirloin -> bbq_sauce

    */----------------* * options *-----------------* id name price? ...

    */----------------* * items_options *-----------------* id_item id_option price? ...

    price 可以是这两个表中任何一个的一部分,具体取决于您的实现(如果您希望选项的成本始终相同,或者根据项目的不同而不同)

    【讨论】:

      【解决方案3】:

      您应该创建另一个名为 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-29
        • 2014-09-28
        • 2011-03-14
        • 2011-10-24
        • 1970-01-01
        • 2011-01-18
        • 2014-03-06
        相关资源
        最近更新 更多