Schema

如何儲存來自不同來源的外部 ID?

  • December 23, 2021

我有一張帶有 PK 的客戶表,我們可以將其用作內部系統的標識符。這些客戶可能屬於不同的公司,每個公司都可能有一個任意結構的外部 ID 來辨識客戶。此外,客戶和公司之間存在多對多關係。

我的困境是我應該將外部 ID 儲存在連結表本身還是通過某個外部表(因為外部 ID 可能是任意形式)。我們需要能夠通過內部或外部 ID 為特定公司找到客戶。

採用任意格式這一事實ExternalID不應影響模式的設計。由於它是多對多關係,因此您可以使用以下內容:

Customer
- ID
- Name
- etc...

CustomerCompany
- CustomerID (PK, FK to Customer)
- ExternalID 
- CompanyID (PK, FK to Company) 

Company
- ID
- Name
- etc...

ExternalID根據業務邏輯,包含在表的主鍵中也可能有意義CustomerCompany

@Rob 正如 LowlyDBA 提到的 CustomerCompany 的傳統連結表應該足夠了。關於是否需要復合鍵來辨識來自一個系統的客戶,您可以通過以下幾種方式解決:

  1. 如您所述,序列化複合鍵
  2. 有一系列可為空的 VARCHAR 欄位(CompositeKey1、CompositeKey1、CompositeKey2、CompositeKey3 等),如果你想要一些人類可讀的東西,你可以有一個連接它們的計算列
  3. 如果您想要一個更加規範化的表,您可以為客戶提供一個標識符欄位,但不要將其作為表的主鍵,而是使用替代主鍵(例如標識符值加上唯一生成的值) customer),並為複合鍵中的每個標識符插入一行。然後在該表的頂部有一個視圖,它將同一客戶的所有行連接在一起。

每種解決方案都有其自身的優點和缺點。

引用自:https://dba.stackexchange.com/questions/82492