一套系統的兩個數據庫合並經歷以及反思


緣由

一個客戶有兩個工廠(總部和分廠),使用的是同樣的eHR系統(Electronic Human Resources),兩個工廠的eHR系統分別用了3年多。

因為多種原因,兩個工廠合並成一個,員工也合並在一起,所以2個HR系統也要合並成一個HR系統,其實就是把2個數據庫合並成一個,數據必須保證正常使用。

數據庫設置

使用的數據庫是SQL Server,相關表設置如下:

人事檔案表  Employee

ID:自增ID,該ID貫穿整個考勤系統,例如:人事異動記錄、獎懲記錄、考勤打卡記錄、考勤明細表、考勤匯總表、調薪記錄、薪資結果表等

Code:工號

Name:姓名

Department:部門編碼,Department 表中的Code

Position:職位編碼,Position 表中的Code

 

部門表  Department

Code:部門編碼

Name:部門名稱

TreeLevel:級別

UpCode:上級部門編碼

 

職位表  Position 

Code:職位編碼

Name:職位名稱

 

考勤明細表 AttendanceDetail

Hdate:考勤日期

EmployeeID:人事檔案表ID

 

合並問題以及解決思路

初步一看合並很簡單,如果重復的時候使用轉換一下就好,但是實際情況會很復雜,工作量也很大,具體要根據實際情況來處理,見招拆招。使用過的sql腳本可以保存起來,下次碰到合並可以直接復用,下面是簡單記錄

首先備份數據庫(最重要)

 

部門合並

因為有4個核心字段,所以不能隨便合並,而且存在編碼重復或者名稱重復的情況,而且離職的人比較多,重復的部門編碼也多

  • 最后和客戶商量,離職的部門都不要了,只要合並在職的部門就好,刪除離職部門前,把離職時的部門記錄在人事檔案表的備注中
  • 在職部門編碼重復的就不多了,手工添加重復編碼的部門,然后給重復部門編碼的人員重新分配部門
  • 在職重復名稱的部門,要刪掉重復名稱的部門,然后給重復部門編碼的人員重新分配部門

 

職位、職級等合並

職位名稱重復的:

  • 在分廠職位表中增加字段NewCode,根據職位名稱從總部職位中獲取職位編碼NewCode,然后分廠人事檔案表的職位字段Position更新為NewCode
  • 然后刪除職位名稱重復的記錄,不用插入到總部職位表中

職位編碼重復的:

  • 手工在NewCode字段中寫入新的職位編碼,然后插入總部時使用NewCode作為部門編碼
  • 人事檔案表的職位字段Position更新為NewCode

不存在的部門編碼:

  • 直接插入到總部的職位表中就好

 

人事檔案合並后

所有使用過EmployeeID的表都要更新為合並后的EmployeeID,例如考勤明細表、異動記錄表、薪資表等,步驟如下:

  • 把分廠的人事檔案表記錄插入到總部的人事檔案表,這在分廠的人員就有了合並后的ID,然后在分廠的人事表中增加一個合並后的ID,NewID。
  • 分廠中勤明細表、異動記錄表、薪資等表的EmployeeID都更新為NewID,然后在插入到總部的數據庫中,這樣歷史數據就能正常查詢了

 

考勤明細表合並

  • 分廠數據庫的考勤明細表的EmployeeID根據更新為人事表的NewID,然后再插入到總部的考勤明細表

 

一些反思

  1. 表的ID換成Guid,因為使用Guid就不會存在重復的情況,在數據庫合並時就直接合並就好,可以方便很多

    1. 例如人事檔案表 Employee的ID

    2. 職位表、職級表等不使用編碼,直接使用Guid,就不存在重復編碼,名稱重復的使用轉換,根據名稱獲取編碼,然后刪除重復部分名稱的記錄
  2. 分區表
    1. 打卡記錄表可以使用分區表功能,打卡時間按年來分區。因為打卡記錄都是按照時間順序存儲的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM