可用性(时间间隔)表的数据库设计

时间:2017-04-20 22:27:26

标签: mysql

在我的网络应用程序中,我有父母和保姆 保姆将声明工作的可用性(时间间隔),该可用性将存储在可用性表中 家长也会在时间间隔内表达他们的需求(此时不需要存储) 所以我设计了这样的可用性表:

+------------+---------------------+------+-----+---------+-------+
| Field      | Type                | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+-------+
| user_id    | bigint(20) unsigned | NO   | MUL | NULL    |       |
| week_day   | tinyint(1)          | NO   |     | NULL    |       |
| hour_start | varchar(10)         | NO   |     | NULL    |       |
| hour_end   | varchar(10)         | NO   |     | NULL    |       |
+------------+---------------------+------+-----+---------+-------+

和数据示例

+---------+----------+------------+------------+
| user_id | week_day | hour_start | hour_end   |
+---------+----------+------------+------------+
|      10 |        0 | 08:00 a.m. | 10:00 a.m  |
|      10 |        0 | 02:00 p.m. | 04:00 p.m. |
|      10 |        1 | 10:00 p.m. | 11:00 p.m. |
|      10 |        2 | 09:00 a.m. | 12:00 a.m. |
|      10 |        3 | 03:00 p.m. | 05:00 p.m. |
|      10 |        4 | 10:00 a.m. | 12:00 a.m. |
|      10 |        5 | 12:30 a.m. | 02:00 p.m. |
|      10 |        6 | 12:30 a.m. | 02:00 p.m. |
+---------+----------+------------+------------+

正如你可以看到的周日= 0(星期一),保姆有两个时段 我的问题是:
1)有更好的方法来存储这些信息吗? 2)对于hour_start和hour_end列,var_char(10)是否为正确的格式?
3)如果我添加一个ID主列(我认为我不会查询)会有什么好处吗? 4)如果我在序列化数组中存储 week_day hour_start hour_end 列的所有数据,会更好吗?

1 个答案:

答案 0 :(得分:0)

您的问题:

  1. 有更好的方法来存储这些信息吗?
  2. 对于hour_start和hour_end列,var_char(10)是否为正确的格式?
  3. 如果我添加ID主列(我认为我不会查询)会有什么好处吗?
  4. 如果我将序列化数组中的week_day,hour_start,hour_end列的所有数据存储起来会更好吗?
  5. 数目:

    1. 是。小时开始和小时结束应该是TIMESTAMP。您只需通过选择日期并将其用于每个日期来忽略日期部分。它们也可以在几分钟内存储为INT。凌晨1点60分,凌晨2点120分等等。
    2. 否。如果您需要与日期时间进行比较,则可能会变得复杂。如果时间以24小时格式(没有上午/下午)存储,它可以工作,但是你在某个日期时间进行字符串比较。
    3. 绝对!如果您需要构建一个编辑器,它允许您指定要编辑的行,以及保存时要更新的行。
    4. 不知道。这实际上取决于它们在您的应用程序中的使用方式。如果您需要构建涉及值的SQL查询(即列出两个日期时间之间可用的所有保姆),那么这不是一个好主意。