在什么情况下(如果有),您会允许应用程序更改其底层数据库模式?即添加新列。
编辑:稍微详细说明一下是什么促使我提出这个问题。我的系统从其他系统接收raport文件,并将获取的数据保存在"reports“表中。报告包括几个“参数”,这些参数现在是硬编码的:日期、金额、unit_price。此参数保存在"reports“表的适当列中。我们需要引入动态(通过web界面)添加新参数的可能性,这些参数可以从报告文件中读取并插入到数据库中。
一种选择是以某种序列化形式保存报告,但存在性能问题。每天将有数千个报告,并且需要通过参数值查询" reports“表。
发布于 2010-03-26 22:09:47
在第一次加载新版本时。这与为每个唯一实例分配一个数据库的系统特别相关。数据写入应使用系统变量进行标记,并在更新前使用以下命令进行测试
show columns from test like 'new_column';
if ( ! new_column )
alter table add column new_column after some_column至于其他文章,如果你运行的系统对相同的数据库模式(但这些模式的不同实例)进行了增量版本控制,那么管理该更改的唯一方法就是以编程方式更新数据库-否则您将在应用程序版本(即1.0和1.1)与模式之间存在不一致-在这种情况下,不可能在所有数据库中同时应用数据库更改。
发布于 2010-03-26 22:06:26
简单地说,永远不会。更改数据库结构应该是受控更改-允许应用程序(例如,设计用于将数据库从一个版本升级到另一个版本的应用程序除外)正在打破这种控制。
也许你可以更详细地说明为什么你认为这是一个好主意,或者是什么促使你提出这个问题。
发布于 2010-03-26 22:09:06
我不会-永远不会。我知道有可能对POJO进行更改并允许Hibernate,例如,传播对数据库所需的任何更改,但这不是一个好主意,因为它移除了对模式进行适当配置管理的能力。
编辑:可能的异常:参见Andy的回答(尽管我仍然会尝试将更新步骤与应用程序本身分开)。
https://stackoverflow.com/questions/2523789
复制相似问题