【问题标题】:Multiple boolean columns or a new table多个布尔列或一个新表
【发布时间】:2018-05-13 08:50:31
【问题描述】:

我想存储医生及其日程安排(他们可用的时间)。日程安排可以是医生在一周中的特定日子有空(例如:医生只在周二和周四工作)。

我需要查询某个日期范围内的可用医生,并查询特定医生的时间安排。

我的问题是:

我是否应该在 schedules 表中创建 7 个布尔列,或者创建一个表 schedule_days,其中包含 schedule_idday 列。 day 列将是一个从 0 到 6 的整数,代表一周中的第 7 天。

哪种实现方式的读取速度更快?

【问题讨论】:

    标签: mysql sql database-schema


    【解决方案1】:

    我认为这里没有任何一个“正确”的答案,即使将问题限制为“读取速度更快”,因为提交的 sql 在这里会有所不同(这是否会加入其他表,多久一次,以及如何等)。

    我会考虑未来的范围。

    doctor_id | day_of_week 
    

    将允许您在将来添加两个新列,您的客户将不可避免地要求

    doctor_id | day_of_week | time_in | time_out
    

    doctor_id | m | tu | w | th | f | sa | su 不会。

    但是,如果阅读是最重要的,那么请考虑

    doctor_id | day_of_week_bitmask
    

    然后只存储一个整数值,表示一周中 7 天的位掩码。它将适合TINYINT,因此它的占用空间也很小。读取位掩码显然会产生一些开销,但计算机处理这类事情的速度很快。

    【讨论】:

    【解决方案2】:

    使用带有医生 ID 和日期的单独表。不过,这一天应该与 MySQL 的 DAYOFWEEK 结果匹配,即 1 代表星期日,2 代表星期一,等等。

    然后查询数据将很容易。例如

    select *
    from doctors
    where doc_id in
    (
      select doc_id
      from doc_workingdays
      where day = dayofweek(current_date)
    );
    

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2020-04-05
      相关资源
      最近更新 更多