記一次數據導入的想法

需求

項目於5月份上線支持。但是從3月份開始,公司就開展了實踐,用Excel和文檔來記錄了兩個月的相關數據。而且數據庫的表之間是有關聯關係的,並且是以數據庫表自增的主鍵關聯起來。現在需要把這兩個月的數據導入到生產環境數據庫,生產環境數據庫只能運維的同事維護,不能自己做改動。

具體情況描述(以用戶角色爲例)

  • 業務部門給的excel表格如下:
    在這裏插入圖片描述
  • 數據庫表結構如下
    在這裏插入圖片描述
  • 要求:
    根據excel的信息將用戶信息以及用戶角色信息導入到數據庫中。

解決方案

1、藉助於java代碼和臨時表來實現,適用於大規模多次的導入。

方案流程圖:
在這裏插入圖片描述

  1. 在開發數據庫中創建一個與Excel表格中字段一直的excel_temp臨時表用來存儲從excel中讀取的數據。因爲excel中的數據會比較雜亂,這一層起到了過濾的作用。不要讀Excel後直接存儲到開發環境的user和user_role表中,這樣不好處理,出了問題難以定位。
  2. 通過java代碼寫邏輯,將數據從excel_temp表中獲取,然後將數據根據用戶角色規則插入到user和user_role表中。
  3. 數據已經存儲到兩張表中了。由於user_role和user是用主鍵進行關聯的,那麼如果直接用本來的主鍵,到生產中就很有可能與生產環境中原本數據的主鍵衝突。
  4. 於是,我們在生產環境中多建了1:1的兩張臨時表user_temp,user_role_temp,這樣以便將我們上述步驟生成的數據輸入到生產環境數據庫中。
  5. 然後通過java代碼,將數據轉移到user和user_role表中。這樣就不會出現主鍵重複的問題了。

2、方法較爲簡單,適合關聯關係較簡單的數據庫

  1. 筆者依舊使用了java代碼獲取了excel數據並存儲到excel_temp臨時表中。
  2. 還是用excel_temp表的數據注入到開發環境數據庫的user表中。
  3. user表的數據是初始值,所以只要插入user信息後續通過唯一的user_account就可以獲取主鍵user_id。
  4. 於是就可以導出user數據,手動將主鍵字段去掉,直接可以插入到生產環境中。
  5. 而通過java代碼查詢excel_temp表就可以批量生成添加數據到user_role的sql語句。
INSERT INTO user_role(user_id,role_id,role_name)VALUES((SELECT user_id FROM user WHERE user_account = '10061***'),1,'管理員');
  1. 這樣比上一種方法較爲簡單,也符合需求。

其實該項目的表應該直接以user_account這個唯一值來關聯上述的兩張表,這樣的設計才合理。吸取教訓。


劃重點(∩_∩)



本人程序媛一枚,因爲離港澳較近,週末兼職港澳人肉代購。

歡迎各位大佬添加本人微信,還會經常有點贊活動送價值不菲的小禮品哦。

即使現在不需要代購,等以後有了女(男)朋友、有了寶寶就肯定會需要的嘍。

動動手指頭,掃碼一下,就當是對本博文的支持嘛,也是對一個平凡、勤勞、勇敢、秀外慧中等等優點的程序媛莫大的支持哈。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章