2010-03-26 37 views
0

在什麼情況下(如果有)您會允許應用程序更改其基礎數據庫模式嗎?即添加新列。修改其基礎數據庫模式的應用程序

編輯:一點點的闡述是什麼促使我灰燼這個問題。我的系統從其他系統接收raport文件,並將提取的數據保存在「報告」表中。報告包括幾個現在被硬編碼的「參數」:日期,金額,單位價格。這些參數在「報告」表中保存在適當的列中。 我們需要引入動態(通過網頁界面)添加新的參數的可能性,這些參數可以從報告文件中讀取並插入到數據庫中。

一種方法是以某種序列化格式保存報告,但存在性能問題。每天將有數千個報告,並且需要按參數的值查詢「報告」表。

回答

2

初次裝入新版本時。這對於將數據庫分配給每個唯一實例的系統特別相關。數據寫入應標有一個系統變量,並與一些更新之前測試樣

show columns from test like 'new_column'; 
if (! new_column) 
    alter table add column new_column after some_column 

至於其他職位,如果你是在同一個數據庫模式(但不同的實例中運行增量版本的系統這些模式)管理這種變化的唯一方法是以編程方式更新數據庫 - 否則在應用程序版本(即1.0和1.1)與模式之間會出現不一致 - 無法在數據庫中的所有數據庫上應用數據庫更改同時在這種情況下。

+0

+1好點(雖然我會嘗試隔離應用程序代碼本身的任何更新步驟,但我知道這可能是分裂的頭髮!) – davek 2010-03-26 14:15:05

1

簡而言之,從不。更改數據庫結構應該是受控的更改 - 允許應用程序(例如,旨在將數據庫從一個版本升級到另一個版本的應用程序除外)正在打破此控制。

也許你可以詳細說明爲什麼你認爲這是一個好主意,或者是什麼促使你問這個問題。

1

我不會 - 永遠。我知道可以對POJO進行更改,並允許Hibernate傳播數據庫所需的任何更改,但這是恕我直言,這是一個壞主意,因爲它消除了對模式進行適當配置管理的能力。

編輯:可能的例外:看到Andy的回答(雖然我仍然嘗試從應用程序本身中分離更新步驟)。

相關問題