Schema
如何儲存來自不同來源的外部 ID?
我有一張帶有 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 的傳統連結表應該足夠了。關於是否需要復合鍵來辨識來自一個系統的客戶,您可以通過以下幾種方式解決:
- 如您所述,序列化複合鍵
- 有一系列可為空的 VARCHAR 欄位(CompositeKey1、CompositeKey1、CompositeKey2、CompositeKey3 等),如果你想要一些人類可讀的東西,你可以有一個連接它們的計算列
- 如果您想要一個更加規範化的表,您可以為客戶提供一個標識符欄位,但不要將其作為表的主鍵,而是使用替代主鍵(例如標識符值加上唯一生成的值) customer),並為複合鍵中的每個標識符插入一行。然後在該表的頂部有一個視圖,它將同一客戶的所有行連接在一起。
每種解決方案都有其自身的優點和缺點。