軟體工程師的小事:到底要不要 Close

問與答:開發階段(甚至是上線後)不應在資料表中建立關聯 | 2019 鐵人賽

論點

影響開發進度

開發階段若資料表有建立關聯
在整理資料表內容的時候會因為關聯而綁手綁腳
拖慢開發速度

影響資料處理

為何要建立關聯
這樣子進行資料匯入的時候會有問題
為何要多做這種事情來限制自己的行為

首先要回到原點
為何資料表與資料表之間要有關聯
關聯可以保持資料的完整性
讓資料表不會出現沒有意義的資料內容(髒資料)
朝向最佳化的資料庫設計邁進

通常在開發階段不建立關聯
上線後基本上都不會補上去
到時資料產生異常時就會耗費更多的成本進行整理

資料表間有設定關聯
能讓接手或是日後再訓練開發人員時
更快了解資料表間的相依關係

不過實務上
小心設定外來鍵參考為ON DELETE CASCADE
當相依性關係龐大時
若不小心將主要資料刪除時
其他相依的資料列就會自動刪除

沒有關聯的資料表示可以被 TRUNCATE
然而 TRUNCATEDELETE 一個重要的差異
TRUNCATE 是不會進事件紀錄
故無法使用事件紀錄來還原到最近的時間點
當然這個指令可透過權限設定等方式進行限制
有設定關聯的資料表變相可避免無心或惡意情況下對資料表執行 TRUNCATE 指令

留言