gpt4 book ai didi

sql - 数据库模式

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:23 24 4
gpt4 key购买 nike

我有 2 个实体 Office 和 Employee,我想为 WorkingHours 设计数据库架构。有些办公室的员工有默认的工作时间,但有些员工可能有不同的工作时间。

建模的最佳方式是什么?我在两个表中都有工作时间吗?

最佳答案

您可以做的是创建一个类似于下面的架构。当然,您需要添加额外的列来保存额外的数据(如果有的话),并且还需要使用特定于您正在使用的 RDBMS 的数据类型调整查询。

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 表中,您添加一列以指定该行是否包含办公室的默认工作时间,并借助另一个 bool 列,在本例中为 OfficeDefaultWorkingHours .

您可以查询此架构以获取员工的工作时间,查询类似于以下查询:

SELECT
E.EmployeeName
, W.StartTime
, W.EndTime
FROM Employee E
INNER JOIN WorkingHours W ON E.OfficeID = WorkingHours.OfficeID
AND E.UseOfficeDefaultWorkingHours = W.OfficeDefaultWorkingHours
AND W.ID = CASE
WHEN E.WorkingHoursID IS NOT NULL
THEN E.WorkingHoursID
ELSE W.ID
END
WHERE E.EmployeeID = 1

此查询可以在 SQL Server RDBMS 下运行,但我不确定它是否可以在其他 RDBMS 产品上运行,您可能需要相应地进行调整。

关于sql - 数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com