修改其基础数据库模式的应用程序

时间:2010-03-26 14:02:41

标签: schema database

在什么情况下(如果有的话)您是否允许应用程序更改其基础数据库架构?即添加新列。

编辑:关于是什么促使我解决这个问题的一点点阐述。我的系统从其他系统接收raport文件,并将获取的数据保存在“reports”表中。报告包括几个现在硬编码的“参数”:date,amount,unit_price。此参数保存在“报告”表中的适当列中。 我们需要引入动态(通过Web界面)添加新参数的可能性,这些参数可以从报告文件中读取并插入到db中。

一种选择是以某种序列化形式保存报告,但存在性能问题。每天将有数千份报告,并且需要按参数值查询“报告”表。

3 个答案:

答案 0 :(得分:2)

首次加载新版本。这特别适用于为每个唯一实例分配数据库的系统。数据写入应使用系统变量进行标记,并在更新之前使用

等进行测试
show columns from test like 'new_column';
if ( ! new_column )
  alter table add column new_column after some_column

关于其他帖子,如果您在相同的数据库模式上运行具有增量版本控制的系统(但是这些模式的不同实例),管理该更改的唯一方法是以编程方式更新数据库 - 否则您将应用程序版本(即1.0和1.1)与模式之间存在不一致 - 在此实例中,无法同时在所有数据库中应用数据库更改。

答案 1 :(得分:1)

简单地说,永远不要。更改数据库结构应该是受控制的更改 - 允许应用程序(例如,旨在将数据库从一个版本升级到另一个版本的应用程序除外)正在破坏此控制。

也许您可以详细说明为什么您认为这是一个好主意,或者是什么促使您提出问题。

答案 2 :(得分:1)

我不会 - 永远。我知道可以对POJO进行更改,并允许Hibernate传播数据库所需的任何更改,但这是一个坏主意,因为它删除了对模式进行正确配置管理的能力。

编辑:可能的异常:请参阅Andy的回答(尽管我仍然会尝试将更新步骤与应用程序本身分开)。