C-Sharp

遷移數據庫問題

  • December 6, 2013

我需要將舊數據庫的數據遷移到具有新設計的新數據庫。對我來說,一個主要問題是舊數據庫出於某種原因使用 nvarchar 類型作為其表中的主鍵。在新設計中,我們將整數作為具有自動增量的鍵。到目前為止一切順利,但是當我應該讀取舊數據並保持關係正確時,我的問題就來了。

假設我從一個表 old_A 中讀取數據並將其插入到帶有 int 鍵的新數據庫表 new_A 中。如果然後我從表 old_B 中讀取數據並希望將其中的一些數據插入到表 new_B 中,那麼如果表 new_A 和 new_B 之間應該存在關係,我的問題就來了。我現在不知道“哪些行屬於”彼此,因為鍵已經改變。

我希望你能明白我在這裡的意思,否則我需要更好地解釋。但是對於如何解決這樣的問題有什麼建議嗎?我不確定如何完成此遷移並將數據及其關係保持在正確狀態。我是否需要在遷移期間將舊的 nvarchar 鍵保留為額外的列,然後在遷移完成後將其刪除以使其正常工作?

現在我試圖從 C# 程序中的程式碼進行遷移。

我做過這樣的工作。您需要在新表中保留一個額外的列以保留舊的鍵值

表A:id | 姓名 | 價值

然後在新數據庫中它會像

新表A:id | 姓名 | 價值 | old_id

這樣您就可以跟踪所有表,但您還需要更改一些查詢以檢查old_id列。

希望能幫助到你

也許您可以嘗試一種字典方法,在該方法中,為舊鍵到新鍵的每個映射儲存一個 KeyValuePair。嘗試一次轉換一張桌子。從不包含任何外鍵的表開始(即對錶相互依賴關係進行偏序(http://en.wikipedia.org/wiki/Partially_ordered_set))

然後您可以從第一個舊表中一次讀取一行,獲取密鑰,將該行插入到新表中,並從 SQL 插入命令(SQL Server 中的 SELECT SCOPE_IDENTITY() )中獲取插入的 ID。然後將舊鍵到新鍵的映射作為 KeyValuePair 放入字典中。您使用此字典查找下一個表。

每張桌子有一本字典。您也可以將字典放入從表名到舊 id/新 id 對的字典映射中。

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