0

我的系统中有两个表EMPLOYEEEMPLOYEE_FORECAST. 两者都有相同的列,整个结构相同。我有另一个具有相同结构的存档表,称为EMPLOYEE_ARCHIVE表。

我需要将两个表中的数据放到这个存档表中。由于EMPLOYEE和中的记录EMPLOYEE_FORECAST可能具有相同的主键,例如,一条记录EMPLOYEE的 pk 为 100,而另一条记录的EMPLOYEE_FORECASTpk 也可能为 100,这肯定会发生,因此当它们插入存档表时,我将有一个重复的主键.

问题是我也会有一些关系表,比如employee_productsemployee_forecast_products还有employee_archive_products。这些表将具有emp_idproduct_id。因此,emp_id我将无法找出确切的员工。

EMPLOYEE那么,有没有办法让表和表都有唯一的主键EMPLOYEE_FORECAST

4

4 回答 4

0

创建一个通用超级表。创建另一个只有主键的表 EMPLOYEE_ID。让 EMPLOYEE、EMPLOYEE_FORECAST 和 EMPLOYEE_ARCHIVE 都引用它。

于 2012-04-26T10:17:37.913 回答
0

所以不能不使用 EMPLOYEE 表的 PK 列作为归档表的 PK 列。

您可以将新的 PK 列添加到存档表。

如果出于某种原因,您希望 EMPLOYEE 表的 PK 列成为存档表中的 PK,那么您可以在存档表中添加一个标志列,以指示记录来自哪个表。您可以在包含原始 PK 和标志列的存档表中拥有一个复合 PK。(一般来说,我不鼓励复合 PK-s,因此,即使您想拥有此标志列,您也可以在存档中添加一个额外的普通 PK 列。)

于 2012-04-26T10:12:34.333 回答
0

要扩展我的评论,请将存档表设置为:

EMPLOYEE
EMPID   NUMBER PK
EMPNAME VARCHAR2(30)
...

EMPLOYEE_FORECAST
EMPID   NUMBER PK
EMPNAME VARCHAR2(30)
...

EMPLOYEE_ARCHIVE
ORIG_TABLE VARCHAR2(30) PK
EMPID      NUMBER       PK
EMPNAME    VARCHAR2(30)
...

中的数据EMPLOYEE_ARCHIVE

ORIG_TABLE        EMPID      EMPNAME
------------------------------------
EMPLOYEE          100        JO BLOGGS
EMPLOYEE_FORECAST 100        JO BLOGGS

由于存档表 PK 跨越原始表和 empid 列,因此它将对您的所有数据保持唯一性。

显然这只是一个示例,您可以使用任何您想要在存档表中强制执行唯一性的派生列。

希望能帮助到你...

于 2012-04-26T10:12:41.667 回答
0

您的数据模型似乎有点混乱。如果 EMPLOYEE 和 EMPLOYEE_FORECAST 具有相同的结构,为什么要有两个表?这里的商业规则是什么?

如果它们应该是两个单独的表,为什么要将它们存储在一个公共存档表中?为什么不为每张桌子单独存档?

我同意@Ollie。您需要重新考虑您的数据模型,以便它清楚地表达您的业务运作方式。如果您在此处发布您的业务规则,我相信我们可以帮助您解决问题。但这可能是关键问题:以下键是识别一名员工(即现实世界中的一个人)还是两个?

employee.emp_id = 100
employee_forecast.emp_id = 100
于 2012-04-26T10:39:40.157 回答