需创建哪些数据库表以编写查询获取营业中的门店
数据库表设计方案:查询门店是否营业
为了能高效查询正在营业的门店,需要拆分原有的字符串格式营业时间,设计两个关联表:
1. 门店基础信息表(stores)
存储门店核心基础信息,字段包括:
store_id:门店ID(主键,对应原表的StoreId)store_name:门店名称(可选,按需补充)address:门店地址(可选,按需补充)
2. 门店营业时间表(store_hours)
单独存储每个门店的每日营业时间,是实现查询的核心表,字段包括:
id:自增主键store_id:关联门店ID(外键,关联stores表的store_id)week_day:星期标识(建议用数字或枚举值,比如0=周日、1=周一…6=周六,或'SUN'/'MON'等,方便匹配日期函数)open_time:当日开门时间(TIME类型,如09:00:00)close_time:当日关门时间(TIME类型,如15:00:00)
数据导入示例
以原表StoreId=153为例,拆分后在store_hours中插入三条记录:
| store_id | week_day | open_time | close_time |
|---|---|---|---|
| 153 | 0 | 09:00:00 | 15:00:00 |
| 153 | 1 | 08:00:00 | 12:00:00 |
| 153 | 2 | 07:00:00 | 10:00:00 |
查询正在营业的门店SQL示例
假设当前时间为周一10:00,对应SQL(注意:不同数据库星期函数返回值有差异,需匹配week_day存储规则):
SELECT s.store_id, s.store_name FROM stores s JOIN store_hours sh ON s.store_id = sh.store_id WHERE sh.week_day = WEEKDAY(CURRENT_DATE) + 1 -- 适配MySQL的WEEKDAY函数(周一返回0) AND CURRENT_TIME BETWEEN sh.open_time AND sh.close_time;
设计原因
原表的OpeningHours是字符串格式,无法直接用日期/时间函数做条件筛选。拆分后用结构化时间字段存储,能快速匹配当前日期和时间,实现高效查询。
内容的提问来源于stack exchange,提问作者OneProgrammer2022
相关产品推荐
相关产品推荐

