Java Web項目設計數據庫時是否需要在表中加備用字段?


  • 背景:

最近在做一個Java Web項目,SSH框架,MySQL數據庫。項目的數據庫沒有設備用字段。在開發過程中,因數據庫設計者未考慮周到,業務實體有一個屬性沒有對應的字段,因此需要在數據庫表加一個字段。又由於此字段要求不可為空,並且在開發階段,測試數據不多。於是我在drop掉了原來的表,增加了一個字段再重新建了一張表。 按照通常的做法,設計數據庫都會在后面加幾個類型為varchar的預留字段,也沒有具體思考過為什么要這么做,這么做的好處是什么。在遇到這個問題之后引起我思考:預留字段這個通用的做法是否能減少開發階段由於考慮不周到,或后續維護階段因為需求變更或者擴展改造而需要增加字段而造成的麻煩。就此與同事進行了討論,大家意見不一,以下是正反方的一些意見和看法。希望大家能根據以往的項目經驗和設計原則給出一些解答,怎樣的設計能確保數據庫健壯,可擴展。

分割線

  • 反方觀點:不需要

原因:數據庫設置備用字段無法在字段名上體現其意義,不規范,后期維護麻煩。在需要增加字段的時候如果直接add column,也不會有太大工作,但能保證數據庫字段的規范。雖然在啟用備用字段的時候可以文檔說明,但在POJO上對應其屬性為attribute1,attribute2等,代碼的可讀性不強。而且,預留字段全部統一varchar,也不太合適。另外有人說加了預留字段會影響性能(這點已經確定不會影響性能,因為其實預留字段未啟用前在數據庫里面都是一個null值)。

  • 我的觀點:需要

原因:持久層的設計,數據庫表結構不應輕易變更。因此應設置備用字段。啟用備用字段后,只修改代碼,在代碼中增加注釋和並文檔說明即可,不需要改動數據庫結構,更方便

  • 我對反方的反駁:就這個問題我咨詢了一個做DBA的朋友,據他所說:如果沒有備用字段,如果后期要加字段,用add column的方法會改變原先的數據庫存儲結構,造成數據移動,移動需要時間,而且會移動到其他數據塊。(很專業的數據庫知識,不是很懂)總之意思是add column會影響數據庫性能,造成一些不可預知的錯誤
  • 一個疑問:假如項目已經在實施階段,數據庫里存儲的已經是一些生產數據,不可輕易刪除,但需要加的字段是不可為空的字段,在有備用字段和沒有備用字段這兩種情況下,分別應該怎么處理那些前期已有的數據。

 


免責聲明!

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



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