- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我遇到了新要求的问题,不知道如何最好地构建我的数据库表。情况基本如下:
我将雇员存储在雇员表中。由于产量增加,公司不得不雇用许多临时工。所有这些员工,包括永久员工和临时员工,都必须将数据输入 ERP 系统。因此,从本质上讲,员工将使用具有名为“EnteredBy”的字段的 Orders 表输入“Orders”。在理想情况下,我会将这两种类型的员工都存储在 Employees 表中。
由于公司的不同制度和公司内部的团队之间不互相交流,一些临时雇员确实变成了永久雇员,所以我们需要一种方法来报告"new"永久雇员完成的所有订单而他们是“临时雇员”,并且在技术上将临时雇员处理的数据“合并”到他们新的永久雇员记录中。
并非所有临时雇员都会成为永久雇员。所有订单都必须附加一个“员工”,即保存员工唯一标识符的外键。
我对如何将“临时雇员”的概念纳入此数据模型并仍然维护订单的数据完整性感到困惑。有什么建议吗?
当前数据库表结构:
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/
我是一名优秀的程序员,十分优秀!