4

我正在为 .net 平台开发一个项目,并希望支持多种数据库类型。我想以通用格式将 DDL 置于源代码控制之下,然后将其转换为特定于数据库的 DDL 以进行部署。

因此,我正在寻找将通用 DDL 转换为特定于数据库的 DDL 的实用程序。理想情况下,它将支持 MSSQL 05/08、MySQL、Oracle、Postgres 和 DB2 开箱即用。

以下是我到目前为止找到的工具:

  1. XML 到 DDL
    • 没有对 MSSQL 的内置支持。
  2. DdlUtils
    • 没有命令行实用程序。必须从 java 或 ant 脚本调用。
  3. ActiveRecord::迁移
    • 不支持外键
    • 不确定如何与 .net 项目集成。

有没有人有我提到的或认识其他人的经验?

4

9 回答 9

2

NHibernate 的SchemaExport 工具可以为任何 NHibernate 支持的 DBMS 方言从 OR 映射生成适当的 DDL。但是,正如其他人所暗示的那样,如果您在该级别上工作,那么您实际上会受到 DBMS 之间相当薄的共同点的限制。

于 2009-01-10T23:00:08.647 回答
1

我所知道的唯一支持 SQL Server 的是SQLFairy。它是用 Perl 编写的,功能非常丰富。XML2DDL 也相当不错,但如果它不支持您选择的 DBMS,它就不是真正可行的。

于 2009-01-10T22:47:35.613 回答
1

我已经在 Oracle、SQL Server 2005、MySQL 和 SQLite 上成功使用了Ruby / Rails的 ActiveRecord迁移。我想我可能也设法在 Access 上使用它,但这可能是一个错误的记忆。它还支持我所知道的 PostgreSQL 和 db2,无论是“开箱即用”还是通过额外下载。如果你想要更奇特的东西并且渴望一个真正自我鞭挞的 DIY 项目,你总是可以编写自己的适配器......

它工作得非常好,但您必须接受这是一个限制您访问特定平台功能的概念。不仅使用 AR,而且很可能使用任何不需要花费数十亿美元的跨平台工具:例如,如果您的目标平台不支持触发器,您会怎么做?还是存储过程?(例如 MySQL 4.0 或 SQLite)。任何跨平台系统都必须处理这样的问题(例如,在与尝试在 SQL Server 查询中应用 Oracle 外连接运算符的版本进行了一场灾难性的搏斗之后,我对 Crystal Reports 产生了终生的仇恨)。

如果您坚持使用表、索引和更简单的约束,我希望您可以使用各种各样的平台。有一个论点建议您通常应该在数据库之外寻找任何进一步处理的东西。我不会在这里更进一步 - 这是一个有点宗教性的辩论......

于 2009-01-11T11:28:58.870 回答
1

我相信Liquibase会做你想做的,并且还会随着时间的推移管理数据库的变化。

于 2010-01-29T16:52:54.203 回答
0

您的应用程序完全与数据库无关是必备功能吗?相信您需要投入这么多工作来支持这么多数据库,这似乎有些牵强。最重要的是,您的数据层将非常复杂,因为每个 RDBMS 中存在细微差别。

于 2009-01-10T22:49:44.393 回答
0

您可能成功地获得了表及其关系的抽象表示 - 但是您如何处理视图、存储过程、触发器等?

于 2009-01-10T23:35:56.517 回答
0

DDLUtils似乎是正确的选择。效果很好,即使这些天该项目并不真正活跃。

编码很好,我没有任何问题(在 MySQL、Oracle、H2DB 上工作......)。

确实现在没有内置命令行,但是您可以从命令行启动 ant 任务,或者编写自己的命令行包装器(这真的不那么难……我是在我身边做的,实际上)。

于 2009-12-16T23:12:59.500 回答
0

我已经用 DDLUtils 做了基本的实验。我尝试了 Mysql、MSSql 和 oracle,它工作正常。检查表创建、约束和索引。拒绝使用它,因为它不活跃,并且很长一段时间都打开了阻止程序错误。

于 2010-01-21T08:29:58.737 回答
0

jOOQ 可以在方言之间翻译任意 SQL,而不仅仅是 DDL。可以在此处找到可能的在线版本:https ://www.jooq.org/translate ,并且还提供CLI 版本

免责声明:我为 jOOQ 背后的公司工作

于 2021-08-23T18:35:58.180 回答