我正在尝试创建一个需要使用数小时操作并允许用户通过它进行搜索的应用程序(想想 Yelp 是如何做到这一点的)。
我正在争论什么是一个好的设计。我唯一能想到的是有一个数据库表,其中包含一个“公司”表的外键,该表列出了一周中的一天以及打开和关闭时间。
Tbl_Hours_Operation
- day_of_week
- open_time
- close_time
- company_id
有没有其他方法可以工作并且更有效?
我正在尝试创建一个需要使用数小时操作并允许用户通过它进行搜索的应用程序(想想 Yelp 是如何做到这一点的)。
我正在争论什么是一个好的设计。我唯一能想到的是有一个数据库表,其中包含一个“公司”表的外键,该表列出了一周中的一天以及打开和关闭时间。
Tbl_Hours_Operation
- day_of_week
- open_time
- close_time
- company_id
有没有其他方法可以工作并且更有效?
有两张桌子:
运营小时(公司 ID、星期天、开放时间、关闭时间)
operation_hours_special (company_id, date, open_time, close_time)
您需要加入这两个表以检查特殊时间。
你们的公司是否会因早餐、午餐、晚餐、午睡而关闭?如果是这样,我会补充:
operation_hours_closed (company_id, day_of_week, close_time, open_time)
更有趣JOIN
!
你的方法似乎很合理。只需要注意一些小事情:
确保在 Company_Id 和 DayOfWeek_Id 上(并按该顺序)索引此表。它还应该(可能)支持一周中每天的多个条目,以防公司在白天关闭或在夜间开放。
CompanyDayOfWeek
----------------
Company_Id INT/BIGINT FK->Company table
DayOfWeek_Id INT (this can be a FK or just a hard coded list of IDs)
Open_Time TIME if your DB supports a dateless time data type
Close_Time TIME