2009-01-10 26 views
4

我正在爲.net平臺開發一個項目,並希望支持多種數據庫類型。我想將DDL保持在源代碼控制的通用格式,然後將其轉換爲數據庫特定的DDL進行部署。最佳數據庫獨立SQL DDL實用程序?

所以我正在尋找將通用DDL轉換爲數據庫特定DDL的實用程序。理想情況下,它將支持開箱即用的MSSQL 05/08,MySQL,Oracle,Postgres,&。

下面是我迄今爲止發現的工具:

  1. XML to DDL
    • 沒有內置在MSSQL支持。
  2. DdlUtils
    • 無命令行實用程序。必須從java或ant腳本調用。
  3. ActiveRecord::Migration
    • 沒有支持外鍵
    • 不知道如何與.NET項目集成。

有沒有人有那些我所提到的或知道別人的經驗?

回答

1

我知道的唯一一個支持SQL Server的是SQLFairy。它用Perl編寫,功能非常豐富。 XML2DDL也相當不錯,但如果它不支持您選擇的DBMS,那麼它並不是真正可行的。

+0

的SQLFairy網站是漂亮的粉紅色lol..i不知道爲什麼 – Perpetualcoder 2009-01-10 23:40:55

0

它是一個必須具備的功能,您的應用程序完全是數據庫不可知的?相信你需要將這麼多工作用於支持這麼多的數據庫,似乎還有很長的路要走。除此之外,由於每個RDBMS中存在細微的差異,因此您的數據層將變得非常複雜。

2

NHibernate的SchemaExport tool可以根據任何NHibernate支持的DBMS方言的OR映射生成適當的DDL。但是,正如其他人所暗示的那樣,如果你在這個層次上工作,那麼你真的只限於DBMS之間相當薄的共同點。

0

您可能會成功獲取表及其關係的抽象表示 - 但您如何處理視圖,存儲過程,觸發器等?

+0

好一點。 我會選擇不使用視圖或觸發器。我不確定存儲過程是否會出現問題。我假設避免專有語言功能就足夠了? – 2009-01-11 00:15:23

1

我已成功在Oracle,SQL Server 2005,MySQL和SQLite上使用Ruby/Rails'ActiveRecord Migrations。我想我也可以在Access上使用它,但這可能是錯誤的內存。它還支持我知道的PostgreSQL和db2,「開箱即用」或額外下載。如果你想要一些更具異國情調的東西,並且渴望一個真正自我鞭撻的DIY項目,你可以隨時編寫自己的適配器...

它的工作非常好,但你必須接受這是一個概念,限制您訪問平臺特定的功能。不僅僅是使用AR,而是 - 儘可能 - 使用任何不需花費時間的跨平臺工具:例如,如果您的目標平臺不支持觸發器,您會做什麼?還是存儲過程? (例如MySQL 4.0或SQLite)。任何跨平臺的系統都必須處理這樣的問題(例如,在與一個試圖 - 災難性地嘗試 - 在SQL Server查詢中應用Oracle外連接操作符的版本摔跤後,我獲得了一生對Crystal Reports的仇恨)。

如果你堅持表,索引和更簡單的約束條件,我希望有各種各樣的平臺可供你使用。有一種觀點認爲,你可能通常應該尋找任何進一步在數據庫之外處理的東西。我不會走得比這更遠 - 這是一個有點宗教性的辯論......

0

DDLUtils似乎是正確的選擇。即使該項目近期並不活躍,它也可以很好地工作。

編碼是好的,我沒有問題(工作在MySQL,Oracle,H2DB,...)。

確實存在對內置現在沒有命令行,但您可以通過命令行來啓動Ant任務,或寫自己的命令行包裝(這真的不是那麼難......我做到了在我的身邊,事實上)。

0

我已經完成了DDLUtils的基本實驗。我試過Mysql,MSSql和oracle,它工作正常。檢查表的創建,約束和索引。拒絕使用它,因爲它不是主動的,並且攔截器錯誤是長時間打開的。

1

我相信Liquibase會做你想要什麼,並且還將管理隨着時間的推移數據庫的變化。

相關問題