sql - SQL 表操作设计时间

标签 sql database-design data-modeling

我正在设计一个 SQL 表来存储商店的营业时间。

一些商店的营业时间非常简单:周一至周日上午 9:30 至晚上 10:00

其他的稍微复杂一点。请考虑以下场景:

Monday:  Open All Day
Tuesday: 7:30AM – 2:30PM & 4:15PM – 11:00 PM 
Wednesday: 7:00PM – 12:30 AM (technically closing on Thursday morning)
Thursday: 9:00AM – 6:00PM
Friday: closed.

你会如何设计 table ?

编辑

营业时间将用于显示商店是否在用户选择的时间营业。

不同的表可能可以处理任何异常,例如假期。

商店营业时间不会每周更改。

最佳答案

像这样的表格对于您发布的输出来说都很容易,而且只是稍微回击一下(打开?是/否):

Store | Day | Open | Closed
---------------------------
1     | 1   | 0000 | 2400
1     | 2   | 0730 | 1430
1     | 2   | 1615 | 2300
...

特征:
  • 使用 24 小时不是必需的,但会使数学更容易。
  • 商店 ID 可能会加入您存储商店信息的查找表
  • 日 ID 将转换为星期几(1 = 星期日,2 = 星期一等)

  • 要查询您的数据集,只需:SELECT Day, Open, Close... (你显然想格式化打开/关闭)

    要查询 IsOpen?,只需:
    SELECT CASE WHEN @desiredtime BETWEEN Open AND Closed THEN 1 ELSE 0 END 
    FROM table 
    WHERE store = @Store
    

    关于sql - SQL 表操作设计时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265190/

    相关文章:

    mysql - bool 字段作为唯一索引

    database-design - 映射或单独属性之间的 DynamoDB 性能/成本差异

    database-design - ERD - 如何将两个实体与第三个实体之间的关系建模为 "attribute"

    sql - 我应该使用 nvarchar(max) 代替 nvarchar(64) 列还是作为附加列?

    sql - 为什么此查询返回货币值?

    sql - 如何选择不匹配的行

    sql - 使用 MAX 或 MIN 聚合函数时如何从一组记录中选择适当的记录

    MySQL 数据库设计问题 - 存储索引列表/数组

    具有过时数据删除可能性的 Cassandra 数据模型

    php - 在 Codeigniter 中使用 $this->db->like() 会返回错误/缺失的结果