gpt4 book ai didi

sql - 如何在0..1实例的数据库表结构中引入新概念?

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

我遇到了新要求的问题,不知道如何最好地构建我的数据库表。情况基本如下:

我将雇员存储在雇员表中。由于产量增加,公司不得不雇用许多临时工。所有这些员工,包括永久员工和临时员工,都必须将数据输入 ERP 系统。因此,从本质上讲,员工将使用具有名为“EnteredBy”的字段的 Orders 表输入“Orders”。在理想情况下,我会将这两种类型的员工都存储在 Employees 表中。

由于公司的不同制度和公司内部的团队之间不互相交流,一些临时雇员确实变成了永久雇员,所以我们需要一种方法来报告"new"永久雇员完成的所有订单而他们是“临时雇员”,并且在技术上将临时雇员处理的数据“合并”到他们新的永久雇员记录中。

并非所有临时雇员都会成为永久雇员。所有订单都必须附加一个“员工”,即保存员工唯一标识符的外键。

我对如何将“临时雇员”的概念纳入此数据模型并仍然维护订单的数据完整性感到困惑。有什么建议吗?

当前数据库表结构:

员工

  • 员工 ID (PK)
  • 名字
  • 姓氏
  • ...其他属性

订单

  • 订单号(PK)
  • 员工 ID(FK)
  • ...其他属性

UPDATE 1:When trying to convey this problem in a database table design was when I decided to seek the advice from the SO experts. In my analysis of a solution via OOP, a design of a [TempEmployee] IS A [Employee], but I wasn't able to wrap my brain on how to convey that into table design and the CRUD operations. FYI, an [Employee] has many fields while a [TempEmployee] has a subset of those fields, thus all of its fields existing in an Employee.

最佳答案

(我假设可以将临时雇员加载为雇员)

继承是建模中相当常见的场景 - 在您的情况下,它似乎可以扩展现有的 Employee 结构,因此您可以按如下方式对临时员工进行建模:

TemporaryEmployee
- EmployeeID (PK and FK to Employee)
- StartDate
- EndDate
- Other temp employee fields here

因为 TemporaryEmployee 也是一个 Employee,它共享 Employee 主键,并且可以通过制作 TemporaryEmployee 来强制执行引用完整性.EmployeeId Employee.EmployeeId 的外键。

Orders 的完整性不受影响,因为现有的 Employees-Orders RI 未更改。扩展而不是更改的另一个好处是您没有更改任何基础模型,因此应该避免因更改 ERP 系统而导致的回归问题(尽管测试仍然是必不可少的)。

编辑,澄清:

现有 ERP 系统表:

CREATE TABLE Employee
(
EmployeeID INT identity(1,1) NOT NULL PRIMARY KEY,
EmployeeTypeId ? -- e.g. might be able to repurpose to identity Temporary employees?
-- Other Employee Fields here ... not all of these will be relevant to TemporaryEmployee
);

CREATE TABLE Orders
(
OrderId INT identity(1,1) NOT NULL PRIMARY KEY,
EmployeeID INT NOT NULL FOREIGN KEY REFERENCES Employee(EmployeeID)
-- etc.
);

现在你用另一个表扩展了 Employee,根本不改变上面的模式:

CREATE TABLE TempEmployee
(
EmployeeID INT NOT NULL PRIMARY KEY,
-- Other extended fields here as per above

CONSTRAINT FK_TempEmployee_Employee REFERENCES Employee(EmployeeID)
);

关于sql - 如何在0..1实例的数据库表结构中引入新概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27499702/

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