Domanda

Sto lavorando a un progetto per la piattaforma .net e vorrei supportare più tipi di database. Vorrei mantenere il DDL sotto il controllo del codice sorgente in un formato generico, quindi convertirlo in DDL specifico del database per la distribuzione.

Quindi sto cercando utility che convertano DDL generico in DDL specifico del database. Idealmente, supporterebbe MSSQL 05/08, MySQL, Oracle, Postgres e amp; DB2 pronto all'uso.

Ecco gli strumenti che ho trovato finora:

  1. XML to DDL
    • Nessun supporto integrato per MSSQL.
  2. DdlUtils
    • Nessuna utilità da riga di comando. Deve essere chiamato da script java o ant.
  3. ActiveRecord :: Migration
    • Nessun supporto per chiavi esterne
    • Non sono sicuro di come integrarlo con il progetto .net.

Qualcuno ha esperienza con quelli che ho citato o conosce altri?

È stato utile?

Soluzione

L'unico che conosco che abbia il supporto per SQL Server è SQLFairy . È scritto in Perl ed è piuttosto ricco di funzionalità. XML2DDL è anche abbastanza buono, ma se non supporta il tuo DBMS preferito non è realmente praticabile.

Altri suggerimenti

Lo strumento SchemaExport di NHibernate può generare un DDL appropriato dalle mappature OR per uno qualsiasi dei dialetti DBMS supportati da NHibernate. Tuttavia, come altri hanno insinuato, se lavori a quel livello sei davvero limitato al comune denominatore piuttosto sottile tra i DBMS.

Ho usato con successo Ruby / Rails 'ActiveRecord Migrazioni su Oracle, SQL Server 2005, MySQL e SQLite. Penso che potrei essere riuscito a usarlo anche su Access, ma potrebbe essere una memoria difettosa. Supporta anche PostgreSQL e db2 di cui sono a conoscenza, "out of the box" o tramite download aggiuntivo. E puoi sempre scrivere il tuo adattatore se vuoi qualcosa di più esotico e hai un desiderio di un progetto fai-da-te davvero auto-flagello ...

Funziona davvero bene, ma devi accettare che questo è un concetto che limiterà il tuo accesso a funzionalità specifiche della piattaforma. Non solo con AR, ma con - con ogni probabilità - qualsiasi strumento multipiattaforma che non costa miliardi di dollari: ad esempio, cosa fai se la tua piattaforma di destinazione non supporta i trigger? O stored procedure? (MySQL 4.0, ad esempio, o SQLite). Qualsiasi sistema multipiattaforma deve affrontare problemi come questo (ho acquisito un odio per la vita di Crystal Reports, ad esempio, dopo aver lottato con una versione che ha cercato - catastroficamente - di applicare un operatore Oracle di join esterno in una query di SQL Server).

Se ti attieni alle tabelle, agli indici e ai vincoli più semplici, mi aspetto che ti sia disponibile un'ampia varietà di piattaforme. C'è un argomento per suggerire che forse dovresti generalmente cercare qualcosa di più da gestire al di fuori del tuo DB. Non andrò oltre questo qui - è un dibattito un po 'religioso ...

Credo che Liquibase farà ciò che desideri e gestirà anche le modifiche al database nel tempo.

È una caratteristica indispensabile che l'applicazione sia completamente indipendente dal database? Sembra di gran lunga credere che sia necessario impegnarsi così tanto per supportare così tanti database. Inoltre, il tuo livello di dati sarà incredibilmente complesso poiché ci sono sottili differenze in ogni RDBMS.

Potresti riuscire a ottenere una rappresentazione astratta delle tabelle e delle loro relazioni, ma come gestisci le viste, le procedure memorizzate, i trigger, ecc.

DDLUtils sembra essere la scelta giusta. Funziona molto bene, anche se il progetto non è realmente attivo in questi giorni.

La codifica va bene e non ho avuto problemi con essa (lavorando su MySQL, Oracle, H2DB, ...).

In effetti non esiste per ora nessuna riga di comando integrata, ma è possibile avviare attività di formica dalla riga di comando o scrivere il proprio wrapper di riga di comando (non è davvero così difficile ... l'ho fatto su dalla mia parte, in effetti).

Ho fatto esperimenti di base con DDLUtils. Ho provato per Mysql, MSSql e Oracle, funziona benissimo. verificato la creazione di tabelle, vincoli e indici. Si è rifiutato di usarlo perché non è attivo e i bug di blocco sono aperti da molto tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top