如何在两个表中使用唯一主键?

时间:2012-04-26 10:04:02

标签: oracle unique primary-key

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

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

问题是我还会有一些关系表,例如employee_productsemployee_forecast_productsemployee_archive_products。这些表格包含emp_idproduct_id。因此,使用相同的emp_id,我无法找出确切的员工。

那么,有没有办法让EMPLOYEEEMPLOYEE_FORECAST表都有唯一的主键。

4 个答案:

答案 0 :(得分:0)

因此,您不能将EMPLOYEE表的PK列用作存档表的PK列。

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

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

答案 1 :(得分: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列,因此它对于您的所有数据都将保持唯一。

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

希望它有所帮助...

答案 2 :(得分:0)

创建一个通用超级表。使用主键创建另一个表EMPLOYEE_ID。让EMPLOYEE,EMPLOYEE_FORECAST和EMPLOYEE_ARCHIVE引用它。

答案 3 :(得分:0)

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

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

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

employee.emp_id = 100
employee_forecast.emp_id = 100