2017-04-20 99 views
0

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

+------------+---------------------+------+-----+---------+-------+ 
| 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. | 
+---------+----------+------------+------------+ 

正如你可以看到WEEK_DAY = 0(星期一)保姆可用于两个时隙。
我的问题是:
1)有没有更好的方式来存储这些信息?
2)var_char(10)为hour_start和hour_end列的格式是否正确?
3)是否有一些好处,如果我添加一个ID主列(我不认为我会永远查询)?
4)是它更好,如果我存储用于列WEEK_DAYhour_starthour_end以序列化阵列中的所有数据?

+0

hour_start和hour_end应该是timestamp数据类型或浮点数,因此查询更容易。 hour_start和hour_end也可以是从午夜起数秒或数分钟内的整数。根据约定星期一是第一天,星期日可以是第0天或第7天。 – Shiping

+0

是的。不,不。没有。 – Strawberry

+0

MUL?嗯???????? – Strawberry

回答

0

您的问题:

  1. 有没有更好的方式来存储信息这个?
  2. var_char(10)为hour_start和hour_end列的正确格式?
  3. 是否有一些好处,如果我添加一个ID主列(我不认为我会永远查询)?
  4. 如果我将列week_day,hour_start,hour_end的所有数据存储在序列化数组中,是否更好?

答案:

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