Pregunta

Estoy trabajando en un proyecto para la plataforma .net y me gustaría admitir varios tipos de bases de datos. Me gustaría mantener el DDL bajo control de origen en un formato genérico y luego convertirlo a DDL específico de la base de datos para su implementación.

Así que estoy buscando utilidades que conviertan DDL genérico en DDL específico de la base de datos. Idealmente, sería compatible con MSSQL 05/08, MySQL, Oracle, Postgres y amp; DB2 fuera de la caja.

Estas son las herramientas que he encontrado hasta ahora:

  1. XML a DDL
    • No hay soporte integrado para MSSQL.
  2. DdlUtils
    • Sin utilidad de línea de comando. Debe llamarse desde scripts java o ant.
  3. ActiveRecord :: Migration
    • No hay soporte para claves foráneas
    • No estoy seguro de cómo integrarse con el proyecto .net.

¿Alguien tiene experiencia con los que he mencionado o conozco de otros?

¿Fue útil?

Solución

El único que conozco que tiene soporte para SQL Server es SQLFairy . Está escrito en Perl y tiene muchas funciones. XML2DDL también es bastante bueno, pero si no admite su DBMS de elección, no es realmente viable.

Otros consejos

La herramienta SchemaExport de NHibernate puede generar un DDL apropiado a partir de las asignaciones OR cualquiera de los dialectos DBMS compatibles con NHibernate. Sin embargo, como lo han implicado otros, si está trabajando a ese nivel, está realmente restringido al denominador común bastante delgado entre DBMS.

He utilizado con éxito Ruby / Rails 'ActiveRecord Migraciones en Oracle, SQL Server 2005, MySQL y SQLite. Creo que también pude haberlo usado en Access, pero eso puede ser una memoria defectuosa. También es compatible con PostgreSQL y db2 que conozco, ya sea "fuera de la caja". o por descarga adicional. Y siempre puede escribir su propio adaptador si desea algo más exótico y desea un proyecto de bricolaje realmente autoflagelante ...

Funciona realmente bien, pero debe aceptar que este es un concepto que limitará su acceso a funciones específicas de la plataforma. No solo con AR, sino con, con toda probabilidad, cualquier herramienta multiplataforma que no cueste miles de millones: por ejemplo, ¿qué haces si tu plataforma objetivo no admite disparadores? O procedimientos almacenados? (MySQL 4.0, por ejemplo, o SQLite). Cualquier sistema multiplataforma tiene que lidiar con problemas como este (adquirí un odio de por vida por Crystal Reports, por ejemplo, después de luchar con una versión que intentó, catastróficamente, aplicar un operador de combinación externa de Oracle en una consulta de SQL Server).

Si se apega a tablas, índices y restricciones más simples, esperaría que una amplia variedad de plataformas esté disponible para usted. Existe un argumento para sugerir que, por lo general, debería buscar algo más que manejar fuera de su base de datos. No iré más allá de eso aquí: es un debate algo religioso ...

Creo que Liquibase hará lo que quiera y también gestionará los cambios de la base de datos a lo largo del tiempo.

¿Es una característica imprescindible que su aplicación sea completamente independiente de la base de datos? Parece un poco exagerado creer que necesita poner tanto trabajo para soportar tantas bases de datos. Además, su capa de datos será increíblemente compleja ya que hay diferencias sutiles en cada RDBMS.

Puede tener éxito en obtener una representación abstracta de las tablas y sus relaciones, pero ¿cómo maneja las vistas, los procedimientos almacenados, los desencadenantes, etc.?

DDLUtils parece ser la opción correcta. Funciona muy bien, incluso si el proyecto no está realmente activo en estos días.

La codificación está bien, y no tuve problemas con ella (trabajando en MySQL, Oracle, H2DB, ...).

De hecho, por ahora no hay una línea de comandos incorporada, pero puede iniciar tareas de hormiga desde la línea de comandos o escribir su propio contenedor de línea de comandos (realmente no es tan difícil ... lo hice en mi lado, de hecho).

He realizado experimentos básicos con DDLUtils. Intenté para Mysql, MSSql y Oracle, funciona bien. comprobado la creación de tablas, restricciones e índices. Se negó a usarlo ya que no está activo y los errores de bloqueo están abiertos desde hace mucho tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top