DTS開發記錄(8) 主鍵的影響

2021-08-22 04:20:23 字數 1824 閱讀 6016

[serializable]

public

class

primarykey

}this

.subkeylist.add(subkey);

}#endregion

#region

clear

public

void

clear()

#endregion

#region

isunionpkey

public

bool

isunionpkey

}#endregion

#region

keycolumnlist

public

ilist

<

string

>

keycolumnlist

}#endregion}

在dts開發記錄(5)-- 挑戰增量匯出一文中,我們已經知道,目前獲取增量的方法只有「比對」--即乙個字段乙個欄位的比較。在通過「比對」分析增量的時候,對於insert增量和update增量,通過是非常容易識別的(雖然效率不高,但是仍然可行)。但是對於delete增量了?

1.delete增量對主鍵的要求

2.「資料匯集」對主鍵的要求

我們假設這樣的情況:各個省局需要向國家局定時匯出自己的財政資料(存放於乙個資料表中),所有省局的財政資料表的結構完全一致,而國家局的財政資料表與省局的稍有差別。這是乙個典型的「資料匯集」的例子。

省局的財政資料表中有唯一主鍵id,但是這個主鍵對應的對映目標鍵在國家局的財政資料表中則不再是主鍵了,因為不同的省局的財政資料中很可能存在id相同的記錄。這種」主鍵失效「的情形在「資料匯集」應用中是經常碰到的。

在這種情況中,不僅delete增量無法識別,而且insert增量和update增量也無法識別了。因為無法從目標資料進行反向定位資料來源中的記錄了。

通常,在「資料匯集」的應用中,比如上面的例子,國家局的財政資料表都會有個字段表明對應的記錄來自於哪個省局,這個字段非常重要,正是有了它,我們才能進行增量分析。這個欄位的值對於同乙個省局來說是不變的,所以在資料來源中我們可以虛擬乙個名為「常量值輔助主鍵」的列,這個列並不實際存在,但是它參與對映,並且這個列的值是恆定不變的。

通過「常量值輔助主鍵」和原來的資料來源主鍵的結合,我們則可以解決「資料匯集」應用中主鍵失效的問題。

所以,我們可以加上下面這條對主鍵的要求:

(4)如果需要進行資料匯集,則可能需要設定「常量值輔助主鍵」。

如果啟用了「常量值輔助主鍵」,則要求:

(1)常量值輔助主鍵必須參與對映。

(2)常量值輔助主鍵只能參與乙個對映。

(3)常量值輔助主鍵的匹配目標列必須也是主鍵。

(4)常量值輔助主鍵不得參與合併對映。

(5)常量值輔助主鍵不得參與變形。

2006.07.28 附加:

比對增量要求:

(1)源primarykey中的每個子鍵都參與簡單對映=》才能從目標記錄定位源記錄=》發現delete增量

(2)設定目標primarykey=》從源記錄定位目標記錄=》發現update和add增量。如果是資料匯集,則需要「常量值輔助主鍵」的協助。

觸發器增量要求:

(1)源primarykey(加上「常量值輔助主鍵」)與目標primarykey是一一對應的關係=》通過源primarykey的值能定位目標記錄=》確定delete增量

轉到:dts開發記錄(序)

DTS開發記錄(4) 對映列

在dts開發記錄 1 系統總體結構 一文中,我們介紹到對映列 參與了資料對映的源列或目標列。注意,並不是所有的列都會參與對映,這是常見的情況。1.對映列分為 源對映列和目標對映列。public inte ce string columnname public inte ce public inte ...

DTS開發記錄(4) 對映列

在dts開發記錄 1 系統總體結構 一文中,我們介紹到對映列 參與了資料對映的源列或目標列。注意,並不是所有的列都會參與對映,這是常見的情況。1.對映列分為 源對映列和目標對映列。public inte ce string columnname public inte ce public inte ...

DTS開發記錄(2) 資料管道及外掛程式

通過前面兩篇文章 已於2006 07 03修正 的介紹,我們已經大致明白了系統的目標的總體結構,從這篇文章開始,我們將逐漸深入到系統內部。本文講述資料管道,資料管道是用於在資料來源 資料目標與datatable之間進行資料傳遞的元件,它是與資料庫型別和檔案型別相關的,資料從資料來源經過資料管道後,就...