Pergunta

Eu estou trabalhando em um projeto para a plataforma .net e gostaria de suportar vários tipos de banco de dados. Gostaria de manter o DDL sob controle de origem em um formato genérico, em seguida, convertê-lo em banco de dados específico DDL para implantação.

Então, eu estou procurando utilitários que irá converter DDL genérica para DDL banco de dados específico. Idealmente, deveria apoiar MSSQL 05/08, MySQL, Oracle, PostgreSQL, DB2 e fora da caixa.

Aqui estão as ferramentas que eu encontrei até agora:

  1. XML para DDL
    • Sem suporte embutido para MSSQL.
  2. DdlUtils
    • linha de comando Sem utilidade. Deve ser chamado de Java ou scripts ant.
  3. ActiveRecord :: Migration
    • Não há suporte para as chaves estrangeiras
    • Não tenho certeza como integrar com projecto .net.

Alguém tem experiência com aqueles que eu mencionei ou sabe de outros?

Foi útil?

Solução

O único que eu conheço que tem suporte para SQL Server é SQLFairy . Ele é escrito em Perl e é bastante rico em recursos. XML2DDL é muito bom também, mas se ele não suporta seu DBMS de escolha não é realmente viável.

Outras dicas

ferramenta SchemaExport do NHibernate pode gerar um DDL apropriado a partir da OU mapeamentos para qualquer um dos dialetos DBMS suportados do NHibernate. No entanto, como outros têm implícita, se você está trabalhando nesse nível você está realmente restrita ao denominador comum em vez fina entre DBMSes.

Eu tenho usado com sucesso Rubi / Rails ' ActiveRecord Migrações em Oracle, SQL Server 2005, MySQL e SQLite. Eu acho que pode ter conseguido usá-lo em Acesso também, mas isso pode a memória falha. Ele também suporta PostgreSQL e DB2 que eu saiba, ou "fora da caixa" ou através de download adicional. E você sempre pode escrever o seu próprio adaptador se você quiser algo mais exótico e têm um desejo para um projeto DIY realmente auto-flagellatory ...

Ele funciona muito bem, mas você tem que aceitar que este é um conceito que vai limitar o seu acesso a recursos específicos da plataforma. Não apenas com AR, mas com - com toda a probabilidade - qualquer ferramenta multi-plataforma que não custa zilhões: por exemplo, o que você faria se sua plataforma de destino não suporta gatilhos? Ou procedimentos armazenados? (MySQL 4.0, por exemplo, ou SQLite). Qualquer sistema multi-plataforma tem de lidar com questões como esta (I adquiriu um ódio vida de Crystal Reports, por exemplo, depois de lutar com uma versão que tentou - catastroficamente - para aplicar um Oracle outer-operador de junção em uma consulta SQL Server).

Se você ficar com tabelas, índices e as restrições mais simples, eu esperaria uma ampla variedade de plataformas para estar disponível para você. Há um argumento para sugerir que talvez geralmente deve estar à procura de mais nada a ser tratado fora do seu DB. Eu não vou ir mais longe do que aqui - é um debate um tanto religiosa ...

Eu acredito que Liquibase vai fazer o que quiser, e também irá gerenciar as alterações de banco de dados ao longo do tempo.

É uma característica must-have que sua aplicação é completamente agnóstico banco de dados? Parece um trecho longe de acreditar que você precisa colocar este muito trabalho para apoiar isso muitos bancos de dados. Em cima do fato de sua camada de dados vai ser extremamente complexa, pois há diferenças sutis em cada RDBMS.

Você pode ter sucesso na obtenção de uma representação abstrata de tabelas e seus relacionamentos - mas como você lida com vistas, procedimentos armazenados, gatilhos etc

DDLUtils parece ser a escolha certa. Funciona muito bem, mesmo que o projeto não é realmente ativo nestes dias.

A codificação é bom, e eu não tive problemas com ele (trabalhando em MySQL, Oracle, H2DB, ...).

Na verdade, existe para o agora nenhuma linha de comando embutido, mas você pode iniciar as tarefas de formiga partir de linha de comando, ou escreve sua própria embalagem de linha de comando (não é realmente tão difícil ... eu fiz isso em meu lado, na verdade).

Eu fiz experimentos básicos com DDLUtils. Tentei por Mysql, MSSql e Oracle, ele funciona bem. marcada para criação de tabelas, restrições e índices. Recusou-se a usá-lo, pois não é ativo e erros bloqueador estão abertos de longo tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top