[英]How to have unique primary key in two tables?
我的系统EMPLOYEE
和EMPLOYEE_FORECAST
有两个表。 两者具有相同的列,整个结构相同。 我还有另一个具有相同结构的存档表,称为EMPLOYEE_ARCHIVE
表。
我需要将两个表中的数据放入此存档表。 由于EMPLOYEE
和EMPLOYEE_FORECAST
记录可能具有相同的主键,例如EMPLOYEE
一条记录将具有100的pk值,而EMPLOYEE_FORECAST
另一条记录也将具有100的pk值,这肯定会发生,因此当将它们插入存档表时,我将拥有重复的主键。
问题是我还将有一些关系表,例如employee_products
, employee_forecast_products
以及employee_archive_products
。 这些表将具有emp_id
和product_id
。 因此,使用相同的emp_id
我将无法找出确切的员工。
因此,有没有办法使EMPLOYEE
和EMPLOYEE_FORECAST
表都具有唯一的主键。
因此,您不能将EMPLOYEE表的PK列用作存档表的PK列。
您可以将新的PK列添加到存档表中。
如果出于某种原因,如果您希望EMPLOYEE表的PK列成为存档表中的PK,则可以将一个标志列添加到存档表中,以指示记录来自哪个表。 而且您可以在存档表中包含一个复合PK,其中包含原始PK和标志列。 (通常,我不建议使用复合PK-s,因此,即使您希望拥有此标志列,也可以在归档文件中再添加一个普通的PK列。)
要扩展我的评论,请将存档表设置为:
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列,因此它将对所有数据保持唯一。
显然,这只是一个示例,您可以使用要在归档表中强制唯一性的任何派生列。
希望能帮助到你...
创建一个公共超级表。 仅使用主键制作另一个表EMPLOYEE_ID。 让EMPLOYEE,EMPLOYEE_FORECAST和EMPLOYEE_ARCHIVE都引用它。
您的数据模型似乎有点困惑。 如果EMPLOYEE和EMPLOYEE_FORECAST具有相同的结构,为什么要有两个表? 这里的业务规则是什么?
如果应该将它们作为两个单独的表,为什么要将它们存储在一个公共的归档表中? 为什么不为每个表单独归档?
我同意@Ollie。 您需要重新考虑数据模型,以便清楚地表达您的业务运作方式。 如果您在此处发布业务规则,我相信我们可以帮助您解决问题。 但是,这可能是一个关键的问题:以下密钥可以识别一个员工(即现实世界中的一个人)还是两个?
employee.emp_id = 100
employee_forecast.emp_id = 100
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.