強烈建議除了ID序號跟時間戳記的欄位一率都用VARCHAR2。
會有這樣的建議是因為今年接了個把舊系統重構的需求,這種需求很常見的,不是什麼新鮮的事情,但是那一個系統是在2000年的時候建置的距今約25年的時間,使用的是Oracle 8 的資料庫系統,真的是一個讓人很震驚的狀態。
再來更炸裂的是在資料庫中有大量了stored procedure 這玩意就是一個超大的雷坑,基本上看到這個東西就知道這一個系統之前是經過多麼慘烈的維護狀態,也是很佩服這一個系統可以維護了25 年的時間。
而且讓這一個系統會需要重構的原因還不是這個驚人的使用時間,而是因爲使用VB6 開發的功能只能在win xp 的主機上運作,嚴重的資安issue 讓這套系統不是有安全隱患而是根本在一個裸奔的狀態,總算在有任看不下去的狀況下開始了重構的作業。
應該是當初他完全使用stored procedure 處理他的商業邏輯運算,所以資料欄位的格式相當的多元,再加上他的資料表設計的相當冗長,一個表有超過一百多的欄位的狀況,所以整個移轉的過程出現大量的欄位格式轉換的問題,加上資料表的欄位眾多就需要去計算對應的欄位以及找到對應的欄位項目加上轉換格式處理,所以光是轉一個表大概就會耗上一週的時間。
有人會問說那為什麼不直接整個資料庫複製過來就好,第一:新建的資料庫是Oracle 19 而舊的系統是Oralce 8 這兩個資料庫完全無法對抄,這兩的跨度之大幾乎是你要把秦滅六國時候的文字放到現在的word 系統一樣,第二:我所在的地方dba 是一個恨神奇的存在,只裝資料庫其他都不管了,所有的事情都是要自理。
基於以上的原因寫程式去轉資料,就會我給出的這樣的建議,如果你有機會可以從頭設計的一個資料表,會建議你一率都是用VARCGAR2 ,因為如果你待的地方是一個比較正常一點的組織,每兩到三年系統一個大版本升級是很有可能會遇到,萬一你又還沒離職那吃這一份狗糧的痛苦就可以大大的減少了。












