我有一张看起来像这样的表
+----+----------+------------
| id | restaurant| ... |
+----+----------+-----------+
| 1 | one | ... |
| 2 | tow | ... |
现在,对于我想在每个小时的操作中添加的餐馆。现在从我所看到的情况来看,有一个新专栏并将其称为小时数然后有一个varchar
并且具有类似
"9:00-22:00,10:00-20:00,10:00-21:00"
然后当我将这些数据提取到我的应用程序中之后,将它分成逗号来制作数组。不是100%肯定为什么这很糟糕,但我知道我不应该这样做吗?
所以我正在考虑制作一个名为“Restaurant_Hours”的新桌子并让它看起来像这样
+----+----------+------------+------------+
| id | restaurant| mon |tue | ect...
+----+----------+------------+------------+
| 1 | one | 9:00-22:00|10:00-22:00 |
| 2 | tow | ect. | ect. |
这种制作新桌子的策略是否像我最好的方式一样?这也不是正确的做事方式。然后餐厅将是我每个人的独特之处,所以我可以获得这样的时间吗?
答案 0 :(得分:0)
我所想的基础是这样的:
CREATE TABLE `restaurant_hours` (
`restaurant_hour_id` INT NOT NULL AUTO_INCREMENT,
`restaurant_id` INT NOT NULL,
`day_of_week` TINYINT NULL,
`opens_at` TIME NOT NULL,
`closes_at` TIME NOT NULL,
`hours_desc` CHAR(16) NOT NULL DEFAULT ''
);
当然,restaurant_id应该是FOREIGN KEY
到restaurants
。id
,而你可能想要UNIQUE
约束(restaurant_id, day_of_week,hours_desc)。如果他们有特殊的假期时间,您可能希望将day_of_week == 0用作“旗帜”。
...或者,如果你真的有野心,还要引用某种“day_descriptions”表,其中1-7对应于周日至周六,而> = 8可以用来表示可能发生的事情。需要按年份(特定节假日)计算。
编辑:hours_desc的目的是“早餐”,“午餐”,“晚餐”等......
即使没有这个,查询“什么时候打开”的查询会是这样的:
SELECT r.restaurant
FROM restaurant_hours AS rh
INNER JOIN restaurants AS r rh.restaurant_id = r.id
WHERE rh.day_of_week = DAYOFWEEK(@theWhen)
AND rh.opens_at < TIME(@theWhen)
AND rh.ends_at > TIME(@theWhen)
;