代码之家  ›  专栏  ›  技术社区  ›  mgamer

修改其基础数据库架构的应用程序

  •  0
  • mgamer  · 技术社区  · 14 年前

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

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

    一个选项是以某种序列化的形式保存报表,但存在性能问题。每天将有成千上万的报告,并且需要根据参数值查询“报告”表。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Andy    14 年前

    第一次加载新版本时。这与为每个唯一实例分配数据库的系统特别相关。数据写入应该用系统变量标记,并在更新之前用类似的

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

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

        2
  •  1
  •   Andy Shellam    14 年前

    简单地说,从来没有。更改数据库结构应该是一个可控的更改—允许应用程序(而不是设计用于将数据库从一个版本升级到另一个版本的应用程序)破坏此控件。

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

        3
  •  1
  •   davek    14 年前

    我永远不会。我知道可以对pojo进行更改,并允许hibernate对数据库进行任何必要的更改,但这是一个糟糕的主意,因为它消除了对架构进行正确配置管理的能力。

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