员工可用性的数据库设计
Database design for employee availability
我正在尝试设计一个系统,让员工声明他们的可用性,然后我就可以搜索这些数据并找出是否存在任何冲突。
员工可以这样设置他们的一般可用性:我从 5 月 1 日到 7 月 22 日从 10:00 到 16:00 有空。
然后他们可以设置例外,例如:我从 5 月 5 日到 5 月 7 日从 14:00 到 16:00 不可用。
我正在考虑将这些声明转换为特定的 10 分钟时间段,为每天和每次创建记录,然后删除声明为不可用的时间段。但是我不确定如何保持数据的一致性。
存储和查询此数据的有效方法是什么?
假设您现有的 Employee
table 定义了 EmployeeID
,您将创建两个 table,GeneralAvailability
和 Exemption
.
GeneralAvailability
-------------------
GeneralAvailabilityID
EmployeeID
StartDate
EndDate
StartTime
EndTime
其中 GeneralAvailabilityID
是递增整数默认主键。您还可以在 (EmployeID, StartDate desc) 上创建索引。
您可以使用 SELECT
语句查询此 table。
SELECT *
FROM GeneralAvailability
WHERE EmployeeID = 'some id'
AND StartDate <= current date
ORDER BY EmployeeID, StartDate desc
现在,您可能会检索多行。第一行是包含日期和时间的最新公开发布行。
为了打字方便,我使用了SELECT *
。在您的代码中,您将指定要按名称检索的所有列。
Exemption
table 将具有相同的结构和略有不同的查询。您的应用程序将为一名员工处理多项豁免。
SELECT *
FROM Exemption
WHERE EmployeeID = 'some id'
AND StartDate >= current date
ORDER BY EmployeeID, StartDate
我正在尝试设计一个系统,让员工声明他们的可用性,然后我就可以搜索这些数据并找出是否存在任何冲突。
员工可以这样设置他们的一般可用性:我从 5 月 1 日到 7 月 22 日从 10:00 到 16:00 有空。
然后他们可以设置例外,例如:我从 5 月 5 日到 5 月 7 日从 14:00 到 16:00 不可用。
我正在考虑将这些声明转换为特定的 10 分钟时间段,为每天和每次创建记录,然后删除声明为不可用的时间段。但是我不确定如何保持数据的一致性。
存储和查询此数据的有效方法是什么?
假设您现有的 Employee
table 定义了 EmployeeID
,您将创建两个 table,GeneralAvailability
和 Exemption
.
GeneralAvailability
-------------------
GeneralAvailabilityID
EmployeeID
StartDate
EndDate
StartTime
EndTime
其中 GeneralAvailabilityID
是递增整数默认主键。您还可以在 (EmployeID, StartDate desc) 上创建索引。
您可以使用 SELECT
语句查询此 table。
SELECT *
FROM GeneralAvailability
WHERE EmployeeID = 'some id'
AND StartDate <= current date
ORDER BY EmployeeID, StartDate desc
现在,您可能会检索多行。第一行是包含日期和时间的最新公开发布行。
为了打字方便,我使用了SELECT *
。在您的代码中,您将指定要按名称检索的所有列。
Exemption
table 将具有相同的结构和略有不同的查询。您的应用程序将为一名员工处理多项豁免。
SELECT *
FROM Exemption
WHERE EmployeeID = 'some id'
AND StartDate >= current date
ORDER BY EmployeeID, StartDate