簡體   English   中英

如何在兩個表中具有唯一的主鍵?

[英]How to have unique primary key in two tables?

我的系統EMPLOYEEEMPLOYEE_FORECAST有兩個表。 兩者具有相同的列,整個結構相同。 我還有另一個具有相同結構的存檔表,稱為EMPLOYEE_ARCHIVE表。

我需要將兩個表中的數據放入此存檔表。 由於EMPLOYEEEMPLOYEE_FORECAST記錄可能具有相同的主鍵,例如EMPLOYEE一條記錄將具有100的pk值,而EMPLOYEE_FORECAST另一條記錄也將具有100的pk值,這肯定會發生,因此當將它們插入存檔表時,我將擁有重復的主鍵。

問題是我還將有一些關系表,例如employee_productsemployee_forecast_products以及employee_archive_products 這些表將具有emp_idproduct_id 因此,使用相同的emp_id我將無法找出確切的員工。

因此,有沒有辦法使EMPLOYEEEMPLOYEE_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM