【问题标题】:Entity relation实体关系
【发布时间】:2012-06-23 03:03:40
【问题描述】:

以下实体关系是否正确?我正在尝试链接员工、时间表和审批者表。

几乎没有其他表格和字段,但对于这个问题,我主要关心的是三个表格。一名员工可以拥有多个时间表审批者。

Employee
--------
EmpID pk
Name
TimeSheet
------------
TSHEET_ID PK
FK_EmpID FK
Approved_By
Timesheet_Approver (one employee can have more than one approver
                    but only one will be approving the timesheet)
------------------
EmpID
Approver_EmpID 

员工表数据:

EmpID Name
----- -----
1     john
2     david
3     mark

时间表批准人数据:

EmpID Approver
----- --------
1     2
1     3
2     3

时间表

TSID EMPID APPROVED_BY
---- ----- -----------
101  1     2
102  1     3
103  2     3



或者这看起来不错?

【问题讨论】:

  • 看起来是一个好的开始。您可能想考虑随着时间的推移您将如何处理问题,例如员工离职,例如您(可能)仍然需要跟踪他们批准的所有时间表,但要防止他们进行其他更改。
  • 可能不需要从批准人表中删除员工数据,但如果需要,可以通过在员工表上添加触发器来处理,当员工表列 'Is_Active' 设置为' N',它将从批准者表中删除行。
  • 我应该创建单独的时间表审批者表,并让所有可以批准时间表的员工都在其中,然后有一个表,该表将具有多对多关系 b/w empid 和 aprroverid?
  • Approvers 批准EmployeesTimesheets?看起来他们批准了员工的这种设计。
  • 而且您还没有提供 FK,只提供了 PK。

标签: sql-server database-design normalization rdbms erd


【解决方案1】:

我的建议

为什么要将Approver 作为单独的表?你能在 Employee 表中保留一个 Bit 字段,如 IsApprover 吗?否则你正在创建redundancy

【讨论】:

  • 感谢您的回复。正如我在问题中提到的,这不是一个完整的数据库结构。时间表和员工表有许多其他字段,部门表已经与员工表链接,但我的问题中没有显示。好的,如果我在员工表中保留批准者,那么我如何为一名员工定义多个批准者? Employeeid 是时间表表中的 FK
【解决方案2】:

我觉得设计有问题。这是我的想法。

员工

EmpID pk

名字

时间表

TSHEET_ID PK

FK_EmpID

Approved_By

第三张表是不必要的。

【讨论】:

  • 第二张表包含第三张表中的所有细节。所以它微不足道。
  • 不知何故系统需要知道谁可以批准某些员工的时间表。可以有多个审批人审批一名员工的时间表,并且不同部门的不同审批人可以审批不同人员的时间表。
【解决方案3】:

如果有多个批准,我们无法将名为 Approved_by 的列添加到 TimeSheet 表。 然后我们可以再添加两个关系。一个是审批者列表。

批准者

审批人ID

部门

名字

TimeSheetApproves

时间表ID

Department1ApproverID

Department2ApproverID

.............等等

不要忘记将 Approved_by 删除到 TimeSheet 中。

【讨论】:

  • Aprroved_by 将拥有批准此时间表的员工 ID。即使有两个审批人,一次也只有一个人可以审批时间表。基本上,我们是在告诉系统员工 XYZ 的时间表可以由“A”人和“B”人批准,因此“A”人或“B”人都会批准它。
  • " 一个员工的时间表可以有多个审批者审批,不同部门的不同审批者可以审批不同人员的时间表。" 那是什么?你说有更多的人批准这张纸。现在告诉对方
  • 检查我 2 小时前为“ypercube”发布的 cmets。它说...审批者只批准时间表,一旦员工提交了他的时间表,那么相关的审批者将批准时间表,并且该时间表可以有多个审批者。如果第一个不存在,那么第二个将执行此操作。但不知何故,系统需要知道谁可以批准某些员工的时间表。
  • 在检查了你的最后一个答案后,我把 cmets.部门不需要与批准者或时间表链接,因为批准是已与部门链接的员工和员工表,正如我在我的问题中提到的那样,还有更多表和字段,但这里主要关注的是员工和批准者。请检查我的问题的时间表数据。
【解决方案4】:

员工

EmpID - Pk

名字

时间表

TSHEET_ID - PK

EmpID - FK

ApproverID - FK

批准者

ApproverID -PK

部门

好的,这是我的最终答案。如果不适合您可以尝试自己的。我没有时间阅读所有这些 cmets。我试图帮助你。 使用审批者关系,您可以获得部门和其他事物的审批者。检查 sql 查询以获取这些数据。

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 2012-05-21
    • 2011-12-29
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多