我正在尝试构建一个系统,允许餐馆创建可根据一天中的时间和星期几显示的菜单。
例如,可能有标准菜单,欢乐时光菜单,特价菜单等,每个菜单都有自己的项目和每个项目的定价。芝士披萨在周五上午10点到下午2点可以是10美元,下午5点到下午5点也是5美元。
设计数据库的好方法是什么,以便项目可以有不同的定价(基于一天中的时间和星期几),以及与各种“菜单”相关联(以便对它们进行分类)?
我目前的系统实际上并不允许这样做(因为当时不需要基于时间的菜单)。
*我需要一个menu_items_times表,其中包含价格,时间开始,时间结束的列吗?*
场地表 - 每个单独的限制(primary_menu_id)与菜单表中的menu_id相关
+------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+----------------+
| venue_id | bigint(20) | NO | PRI | None | auto_increment |
| name | varchar(256) | NO | | None | |
| primary_menu_id | bigint(20) | NO | | NULL | |
+------------------+--------------+------+-----+---------+----------------+
菜单表每个菜单及其所属的地点
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| menu_id | bigint(20) | NO | PRI | None | auto_increment |
| venue_id | bigint(20) | NO | | None |
| name | varchar(256) | NO | | None | |
+----------+--------------+------+-----+---------+----------------+
menu_items表菜单的每个菜单项以及用于对类别进行排序的类别(即“饮品”,“食品”,“特价”类别)和“category_index”。
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| menu_item_id | bigint(20) | NO | PRI | none | auto_increment |
| menu_id | bigint(20) | NO | | none | |
| name | varchar(256) | NO | | none | |
| price | float | NO | | none | |
| category | varchar(64) | NO | | none | |
| category_index| int(11) | NO | | none | |
+---------------+--------------+------+-----+---------+----------------+
menu_items_categories视图
+----------------+--------------+-----------+-------------+------+---------+
| Field | Type | Collation | Attributes | NULL | Extra |
+----------------+--------------+-----------+-------------+------+---------+
| menu_id | bigint(20) | | | No | |
| category | varchar(64) | | | No | |
| category_index | int(11) | | | No | |
+----------------+--------------+-----------+-------------+------+---------+
答案 0 :(得分:0)
我可以看到4种方法......
向time_id
添加menu_items
字段,其中包含包含时间的静态数组的ID ... 1 => morning,2 => evening,3 => ;全天等。
与#1相同,但使字段成为可以在LIKE(%%)查询中搜索的VARCHAR ...因此time_id
变为“.8.9.10.11”。上午8点到11点,'。18.19.20.21。“下午6点到9点......比较麻烦,LIKE查询更加密集,所以可能不太理想。
而不是menu_items
中的字段,添加另一个表格menu_times
...包含menu_item_id
和time_id
s ...这可能比#2快。它甚至可以包含time_description
而不是time_id
,例如“所有早晨”或“欢乐时光”。
您可以将menu_times
放在menus
和menu_items
之间......所以menus
包含menu_times
,其中包含menu_items
。
有关所有这些解决方案的一点需要注意的是,其中一些解决方案需要多个menu_items
以获得不同的价格......这并不理想。但是,使用解决方案1-3,您可以通过将price
移动到menu_times
表中来解决此问题。