2012-02-08 43 views
0

我正在使用的应用程序当前使用MySQL数据库。我们计划改变应用程序的体系结构以XML格式处理数据。所以应用程序的对象模型将由XML模式驱动。现在我们可以使用JAXB等工具来进行XML解析并在内存中创建一个对象结构。 但是我看到的主要问题是: -使用基于XML的建模在应用程序中管理数据库模式的策略

  1. 如何将对象结构映射到关系数据库中。我们可以在这里使用Hibernate。
  2. 另一个问题是XML模式会定期更改,我们需要支持以前版本的模式。

我不确定处理项目2的最佳方式,因为随着模式版本数量的增加,数据库模式可能非常容易开始随着许多表格变得臃肿。

所以我的主要问题是,从对象建模角度和数据库模式角度来看,管理此类版本更改的最佳策略是什么?

+0

你绑定到mySQL吗? – DaveH 2012-02-08 12:04:02

+0

是的。架构的变化是渐进的,所以我们需要支持现有的流程。您是否认为我们应该使用基于XML或基于对象的数据库? – 2012-02-08 12:11:14

+0

可能 - 或者像Postgres那样支持db模式定义中的继承。如果模式的变化相对较小并且主要是添加性的,它可能会提供一些帮助。我不得不说,我完全没有这种使用Postgres的经验。 – DaveH 2012-02-08 12:15:31

回答

0

一个解决办法是:

不断丰富你的模式,但也确保它是落后与以前的架构兼容,使JAXB能够解析和最古老和最新的架构基于XML映射到你的对象。这将意味着您的数据库架构将发生相同的变化,并且具有与您要映射的较旧实体兼容的架构;对于JAXB的所有版本,模式命名空间等也应该是相同的。我想你会有很多可空的列等等。这是未来的风险,但它可以工作,如果做得对。

哦,现在我看到你编辑你的评论,并给了我更多的信息,以便:

由于架构不断变化,我建议跳过JAXB。 JAXB不是用于这种不断变化的。 Smooks(在您的Eclipse中安装JBoss Tools插件)是。它将允许您为每个不同版本的基于模式的XML为您的Hibernate实体类定义不同的映射定义。所以通过这种方式,您将维护Smooks映射,Hibernate实体类和数据库模式。关于数据库架构有办法让它进化没有结构性变化,但你将不得不牺牲参照完整性......我不会

我想有很多的解决方案,您的问题

+0

对不起,我的措辞有点误导。将会有许多版本的XML模式。所以问题是如何处理架构的多个版本以及对数据库的影响。 感谢您提供Smooks的链接,以前没有使用过。 – 2012-02-08 15:01:30

+0

由于您将有一个组件验证XML的模式,这意味着您将能够区分要使用哪个Smooks映射定义,以将特定模式的XML映射到您的Hibernate对象。数据库必须在结构上更新,尽管能够使所有模式都开心,这意味着Hibernate类也将在结构上受到影响。这意味着当然是停机。这使得它避免JAXB变得更加清晰,因为您将为每个模式都有一组新的类,这意味着还需要为VM加载更多的类定义。 – DaTroop 2012-02-08 16:19:59

0

的性质演变XML模式意味着使用JAXB不具有可伸缩性,因为这意味着每次模式更改时都会静态生成一批新的类。系统必须支持所有以前版本的模式。

我决定使用XSOM来解析XML模式。这意味着可以在运行时动态选择和处理正确的模式版本。所以我们可以构建一个解析模式并实例化适当类的通用方式。

相关问题