员工表(主表和详细信息表)

时间:2012-06-18 11:50:24

标签: sql-server oracle database-design schema history

我想知道是否可以为员工提供主表和详细信息表?

根据要求,数据可以按国家/地区和报告级别的员工代码进行过滤。

如果更改了员工的部门或国家/地区代码,则更改将进入详细信息表,旧记录将设置为IS_ACTIVE ='T'。

---------------------主表------------------------ --------------

**EMPLOYEE_CODE**      VARCHAR2(20 BYTE)  NOT NULL, 
EMAIL                  VARCHAR2(100 BYTE)
FIRST_NAME             VARCHAR2(50 BYTE)
LAST_NAME              VARCHAR2(50 BYTE)
WORKING_HOURS          NUMBER

---------------------详情表------------------------ --------------

**PK_USER_DETAIL_ID**     NUMBER,
FK_EMPLOYEE_CODE          VARCHAR2(20 BYTE),
FK_GROUP                  NUMBER,
FK_DEPARTMENT_CODE        NUMBER,
FK_EMPLOYER_COUNTRY_CODE  VARCHAR2(5 BYTE),
FK_MANAGER_ID             VARCHAR2(20 BYTE),
FK_ROLE_CODE              VARCHAR2(6 BYTE),
START_DATE                DATE,
END_DATE                  DATE,
IS_ACTIVE                 VARCHAR2(1 BYTE),
INACTIVE_DATE             DATE

员工表将与时间表表链接,对于时间表报表,数据可按部门,国家和员工代码进行过滤。

选项:我

  • 拥有一个包含一个主键的员工表,并在为员工更新部门或角色时创建新条目。
  • 在时间表表格中添加国家/地区和部门代码。

- >这样我就不需要搜索员工表了。

选项:II

  • 拥有主表和详细信息表。
  • 在时间表表格中添加国家/地区和部门代码。

- >这样我就不需要搜索员工表了,我将拥有主详细信息表

选项:新

  • 拥有主表和详细信息表。
  • 时间表会有EmpCode。
  • 如果用户移至新的位置更改部门,则在详细信息表中使用新的部门代码和相同的Emp No。插入新行。
  • 更新旧行并设置“结束日期”字段,以便更改其位置或部门时,需要更新“结束日期”字段。

哪一个是最佳选择,还有其他更好的选择吗?

2 个答案:

答案 0 :(得分:3)

这是实现此要求的一种方式,这是许多人采用的方法。但是,它有一个主要的缺点:每次查询当前员工状态时,您需要过滤开始和结束日期的详细信息。这似乎是一件微不足道的事情,但你不会相信它会造成多大的混乱,而且它也会产生性能影响。

这些事情很重要,因为大多数时候你只想要当前的细节,对历史的查询是相对罕见的。因此,您正在阻碍最常见用例的实现,以便更容易实现较少使用的用例。 (当然,我正在对您的业务需求做出假设,也许您的工作不是普通的员工申请......)

更好的解决方案是拥有两个表,一个包含所有详细信息列的EMPLOYEES表和一个包含相同列以及开始和结束日期的EMPLOYEES_HISTORY表。当您更改员工的记录时,可能会通过触发器在历史记录表中插入旧记录的副本。您的标准流程只有一个表可供查询,并且您的历史记录需求得到了充分满足。


顺便提一下,您建议的数据模型是错误的。 Working_hours,email_address和last_name绝对是可以改变的东西,甚至可能是名字(例如通过结婚等个人情况的变化)。因此,所有这些列都应保存在您的详细信息名称中

答案 1 :(得分:1)

选项3 - 请注意,此选项仅适用于报告观点。

  1. 无论何时插入数据,都要在新表中创建De-Normalized条目。
  2. 每当条目更新时,De-Normalized条目都会在新表中更新。
  3. New Table将包含Employee的所有De-Normalized列。
  4. 因此,在执行搜索时,这将使您受益,因为结果将在不使用Joins的情况下计算。因此,访问时间将减少。
  5. 新表格中的记录将在“插入/更新触发器”中创建/更新。
  6. 选项-2和选项1的改进

    不要通过添加重复列来创建冗余。