[英]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.