c# - 使用C#在SQL表中创建 "monthly timetable/schedule calender"

标签 c# sql-server

作为上下文,我正在为 vert 诊所创建一个数据库。

我在 Microsoft SQL Server Management studio 2014 中有一个 SQL 表,其关系模型(架构)如下:ScheduleSlot(s̲l̲o̲t̲I̲D̲, room, date, startTime, endTime, Appointment_id, Staff_id)喜欢部分预填充。

  • appointment_id 和 Staff_id 是 foeign_key,对于此“空日历”来说,它们可以而且应该为 null
  • 通风诊所每周仅开放 6 天,周日休息。
  • 每次可能的预约时间为半小时。
  • 工作时间为上午 8:00 至下午 5:00。

我想创建一个日记结构,让您可以每天定义 vert 可能有空的时间段。

例如,我想为 2016 年 5 月的所有 26 天(非周日)制作这样的内容:

slotId  date        startTime   endTime room    appointment_id  staff_id
1       5/2/2016    8:00        8:30    1       null            null
2       5/2/2016    8:00        8:30    2       null            null
3       5/2/2016    8:00        8:30    3       null            null
4       5/2/2016    8:00        8:30    4       null            null
5       5/2/2016    8:30        9:00    1       null            null
6       5/2/2016    8:30        9:00    2       null            null
7       5/2/2016    8:30        9:00    3       null            null
8       5/2/2016    8:30        9:00    4       null            null
9       5/2/2016    9:00        9:30    1       null            null
10      5/2/2016    9:00        9:30    2       null            null
11      5/2/2016    9:00        9:30    3       null            null
12      5/2/2016    9:30        9:30    4       null            null
...     ...         ...         ...     ...     ...             ...

作为引用,任何月份每天应该有 72 个(18 个间隔 x 4 个房间)的空位,2016 年 5 月大约有 1872 个空位 (72 x 26)。


我可能的解决方案是使用模数(循环)来检查 i % 7 == 0 是否并跳过它? - for 循环可以传递一个参数作为第一个日期,并一直工作到月底。

最佳答案

不要这样做

只要有一个约会表来存储安排约会的时间即可。

SQL 通常不应该负责业务规则。

在将业务逻辑交给数据库进行存储之前,请在中间层或处理业务逻辑的任何位置执行此操作。

如果在任何一天,您只有 2 个约会,那么当天您应该只有 2 行。不是一堆包含所有可用时隙和 NULL 的行。这是浪费空间和不必要的开销。

如果您想从数据库端强制实现完整性,以确保数据访问层不会传递任何无效内容(例如工作时间之外的约会或重叠约会),您可以使用触发器并检查约束检查有效逻辑,或通过执行相同操作的存储过程发送所有内容。

关于c# - 使用C#在SQL表中创建 "monthly timetable/schedule calender",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36977713/

相关文章:

c# bitarray 索引的正位

c# - 获取 "cannot assign to ' 回复'因为在 Outlook 加载项中添加事件时方法组

sql-server - T-SQL 组跳过并采取

php - Codeigniter:基于选择的查询

sql-server - TSQL 中的 IF 之后的 DECLARE - SQL Server 何时分配资源?

c# - 自定义用户控件在 WinForm 表单上托管时会自动调整大小

c# - 按类型调用类的实例

c# - 必须在使用 DataView 之前设置 DataTable

Java SQL 结果到 InputStream

mysql - 如何将 SQL 更新查询迁移到 MySQL?