2012-02-08 29 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模式。這意味着可以在運行時動態選擇和處理正確的模式版本。所以我們可以構建一個解析模式並實例化適當類的通用方式。

相關問題