我有两个实体Office&员工和我想为WorkingHours设计数据库的模式。有办公室为员工提供默认的工作时间,但有些员工可能有不同的工作时间。
建模的最佳方法是什么?我在两个表中都有工作时间吗?
答案 0 :(得分:3)
您可以做的是创建一个类似于下面的模式。当然,如果有任何数据,则需要添加其他列以保存其他数据,并使用特定于您正在使用的RDBMS的数据类型调整查询。
comments
另外,不要忘记在每个表中的唯一列上实现约束和主键。
在CREATE TABLE Office(OfficeID integer
, OfficeName VARCHAR(10))
CREATE TABLE Employee(EmployeeID integer
, EmployeeName VARCHAR(10)
, OfficeID integer
, WorkingHoursID integer
, UseOfficeDefaultWorkingHours Boolean)
CREATE TABLE WorkingHours(ID integer
, StartTime TIME
, EndTime TIME
, OfficeID integer
, OfficeDefaultWorkingHours Boolean)
表格中添加一列,以指定员工是否在默认办公室工作时间(Employee
)下工作。
在UseOfficeDefaultWorkingHours
表格中添加一列,以指定该行是否包含办公室的默认工作时间,并借助其他布尔列,在本例中为WorkingHours
。
您可以查询此架构,以获得员工的工作时间,其查询类似于下面的查询:
OfficeDefaultWorkingHours
此查询将在SQL Server RDBMS下运行,但我不确定它是否适用于其他RDBMS产品,您可能需要相应地进行调整。
答案 1 :(得分:2)
你可以做一件事就是创建新表WorkingHours,因为它独立于员工
Working hours
Id Working Hours
1 10 - 8
2 12- 9
将id值分配给员工表
Employee
ID WorkingHoursID
1 2
2 2
3 1
答案 2 :(得分:0)
WorkingHours将是一个不同的实体。
办公室有一个默认工作时间(或者可能超过一个?)。 员工有一个工作小时。员工的工作时间数据来自员工办公室的工作时间。员工的工作时间可以在不改变办公室工作时间的情况下改变。
答案 3 :(得分:0)
创建三个表
1.办公室:这应该是办公地点,名称和自己的身份证明
2.时间表:ID,OfficeID,TimeSLot
3.员工:在此表中创建一个列OfficeID,并从他或她正在工作的办公室表中传递办公室ID,其他列使用TimeslotID并传递第二个表的ID。
例如:EmpID,OfficeID,TimeSLotID