2013-03-13 128 views
0

我有幾個數據庫,並且需要它們之間的交換數據。當我從數據庫A導入導出到數據庫B時,Id衝突將會發生。我想出兩種方法,沒有人讓我滿意。如何解決數據衝突

  1. select max(id)然後創建新的id以避免衝突,但一列存儲json結構並且包含id太! (歷史原因)。所以我需要創建新的Id(主鍵)並修改該json列中的所有id。

  2. 或者我可以爲每個數據導入添加批處理信息。當我導入數據時,我發現sql中的每個id並在它們之前添加批處理id。如:

原來的DB,如:

ID  COL_JSON 
11  {id:11,name:xx ...} 

我要插入一個新的紀錄:11,插入後,我的ID

現在分貝前添加了一批信息 「1000」貌似

ID  COL_JSON 
11  {id:11,name:xx ...} 
100011 {id:100011,name:xx ...} 

下一批將是1001,1002 1003 ......,所以,如果一個新的11條必須插入數據庫看起來像

ID  COL_JSON 
11  {id:11,name:xx ...} 
100011 {id:100011,name:xx ...} 
100111 {id:100111,name:xx ...} 

儘管這兩種方法可以解決衝突,但我覺得這兩種方法都是愚蠢的。有一些優雅的計劃嗎?

+0

你說的是數據庫同步方法嗎? – 2013-03-13 10:29:04

+0

不同步的問題。我從應用程序A的數據庫和一些文件導出數據,然後導入到應用程序B(db&files) – mandatory 2013-03-13 10:42:55

回答

1

對於遺留系統,沒有更好的方法,除了與它對齊。我們無法在傳統系統上進行更改,因此您的第2種方法看起來不錯。坦率地說,這不是愚蠢的,只是正確的路要走。

+0

謝謝henry leu。你給我信心:D – mandatory 2013-03-13 15:15:59

0

我不完全理解你的數據庫交換。

如果你需要來自兩個數據庫的數據,你可以使用類似於你的批處理的東西,但使用字符 - A11和B11 ID。

這樣你就不會有衝突,即使你的數據庫增長很多。

編輯:您也可以使用兩個字段的主鍵:帶自動增量的整數ID和原始數據庫名稱的varchar。

+0

,謝謝reignerok。我的問題不僅僅是主鍵衝突 – mandatory 2013-03-13 14:07:58

0

當我有需要同步的(而不是在飛)一個表,我用這個辦法:

  • 將被覆蓋主表中有一個大的自動增量(即:自動增量= 100000)
  • 將被合併爲一主一輔表有一個正常的自動增量開始1

唯一的要求是,你能確保主表中有一個足夠大的autocrement成立,那麼二級表格ID無線我永遠不會到達主表第一ID