MySQL 每日约会计划架构

MySQL Daily Appointment Scheduling Schema

我想创建一个预订系统。一方面,您有一个客户想要预约,另一方面,您有一个提供者有一个时间表,客户可以根据

注册为提供者时,他们可以选择工作日和时间。他们有 html 复选框,表示他们可以 select 的日子,一旦他们 select 一天,就会显示小时数(angular 中的下拉列表)见下文

html schedule form

在 MySQL 方面,我想我可以有一个 table ,其中每一天都有一个列,并在其中有一个以逗号分隔的列表,用于开始时间、结束时间、午餐时间和午餐长度

即提供者 select 周一和周二的工作时间如下

供应商'Schedule'Table

|ScheduleID|ProviderID|Monday  |Tuesday |Wednesday|Thursday|Friday|Saturday|Sunday|
|----------|----------|--------|--------|---------|--------|------|--------|------|
|1         | 2        |09:00am,|10:00am,|         |        |      |        |      |
|          |          |08:30pm,|07:00pm,|         |        |      |        |      |
|          |          |12:00pm,|01:00pm,|         |        |      |        |      |
|          |          |30 min  |60 min  |         |        |      |        |      |
|----------|----------|--------|--------|---------|--------|------|--------|------|

table 将有一个计划 ID 和一个提供商 ID,它们 link 返回到 "provider" table 到 link 他的提供商时间表

还是这样更好?

|-------------|-------------|----------|-----------|----------|------------|--------------|
| schedule_id | provider_id | week_day |start_time | end_time | lunch_time | lunch_length |
|-------------|-------------|----------|-----------|----------|------------|--------------|
| 1           | 1           | Monday   | 06:00 AM  | 08:00 PM | 12:30 PM   | 60           |
|-------------|-------------|----------|-----------|----------|------------|--------------|
| 2           | 1           | Friday   | 06:00 AM  | 08:00 PM | 12:30 PM   | 60           |
|-------------|-------------|----------|-----------|----------|------------|--------------|
| 3           | 2           | Tuesday  | 06:00 AM  | 08:00 PM | 12:30 PM   | 60           |
|-------------|-------------|----------|-----------|----------|------------|--------------|

如果不是post是

在我讨论我认为你应该如何构建你的 Provider 'Schedule' Table 之前,请确保 将来 去除绒毛。

更多关于绒毛的信息here

进行以下更改可能会更好地为您服务:

  • 将所有列 headers 设为小写,因为如果您尝试以其他方式查询数据库,这可能会防止出错
  • scheduleId更改为id
  • 您可以简单地放置一个 weekDay 列来存储该工作日的值,而不是有七列,一列代表一周中的每一天
  • 然后为 startTimeendTimelunchTimelunchLength
  • 创建列
  • 最后,创建一个 scheduleId 列,将某人日程表的所有不同工作日行关联到一个提供商

一些注意事项:

  • 您可以插入 0..6,而不是在 weekDay 列中包含字符串 "Monday""Sunday",其中 0 是星期日,6是星期六以使其与其他语言更兼容
  • 您始终可以只将 scheduleId 保留在此 table 中,然后使用单独的计划日期创建另一个 table,并使用外键 link,但这可能证明造成的问题多于它的价值
  • lunchLength 保持为整数,因为这将使一切变得更容易

尽可能多地拆分数据的原因是,如果您使用另一种语言进行查询,则可能需要完成所有拆分 MondayTuesday 列的额外工作例如,如果您只想要 startTime

希望以上是一个解决方案或允许您考虑另一种方法。

这是一个 Java Android 库,您可以将其转换为 Java 脚本:https://bitbucket.org/warwick/schedule_utils_demo/src/master/

运行客户端语言的代码将减轻服务器的负担,因为调度代码效率非常低。

希望对您有所帮助。