gpt4 book ai didi

sql-server - 员工表(主表和明细表)

转载 作者:行者123 更新时间:2023-12-02 17:48:54 29 4
gpt4 key购买 nike

我想知道员工有主表和明细表是否可以?

根据要求,数据可以按部门按国家/地区过滤,也可以在报告级别按员工代码过滤。

如果员工的部门或国家/地区代码更改,则更改将进入详细信息表,旧记录将设置为 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。
  • 如果用户移动到新的位置更改部门,则在详细信息表中插入一个新行,其中包含新的部门代码和相同的员工编号。
  • 更新旧行并设置结束日期字段,这样如果他更改了位置或部门,则需要更新结束日期字段。

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

最佳答案

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

这些事情很重要,因为大多数时候您只需要当前的详细信息,而查询历史记录的情况相对较少。因此,您阻碍了最常见用例的实现,以使其更容易实现较少使用的用例。 (当然,我是在假设您的业务需求,也许您的应用程序不是普通的员工应用程序...)

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


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

关于sql-server - 员工表(主表和明细表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082186/

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