Лучшая независимая от базы данных утилита SQL DDL? - PullRequest
4 голосов
/ 11 января 2009

Я работаю над проектом для платформы .net и хотел бы поддерживать несколько типов баз данных. Я хотел бы сохранить DDL под контролем исходного кода в общем формате, а затем преобразовать его в специфичный для базы данных DDL для развертывания.

Итак, я ищу утилиты, которые преобразуют универсальный DDL в специфичный для базы данных DDL. В идеале он будет поддерживать MSSQL 05/08, MySQL, Oracle, Postgres и DB2 "из коробки".

Вот инструменты, которые я нашел до сих пор:

  1. XML в DDL
    • Нет встроенной поддержки MSSQL.
  2. DdlUtils
    • Нет утилиты командной строки. Должен быть вызван из сценариев Java или Ant.
  3. ActiveRecord :: Миграция
    • Нет поддержки внешних ключей
    • Не уверен, как интегрироваться с проектом .net.

Кто-нибудь имеет опыт общения с теми, кого я упоминал, или знаком с другими?

Ответы [ 8 ]

2 голосов
/ 11 января 2009

Инструмент SchemaExport от NHibernate может генерировать соответствующий DDL из сопоставлений OR для любого из поддерживаемых диалектов СУБД NHibernate. Однако, как и предполагали другие, если вы работаете на этом уровне, вы действительно ограничены довольно тонким общим знаменателем между СУБД.

1 голос
/ 29 января 2010

Я считаю, что Liquibase будет делать то, что вы хотите, а также будет управлять изменениями базы данных с течением времени.

1 голос
/ 11 января 2009

Я успешно использовал Ruby / Rails 'ActiveRecord Миграции в Oracle, SQL Server 2005, MySQL и SQLite. Я думаю, что мне, возможно, удалось использовать его и в Access, но это может быть неисправная память. Он также поддерживает PostgreSQL и db2, о которых я знаю, либо «из коробки», либо путем дополнительной загрузки. И вы всегда можете написать свой собственный адаптер, если вы хотите что-то более экзотическое и хотите действительно саморекламирующийся проект DIY ...

Это работает очень хорошо, но вы должны признать, что это концепция, которая ограничит ваш доступ к функциям, специфичным для платформы. Не только с AR, но и - по всей вероятности - с любым кроссплатформенным инструментом, который не стоит миллиардов долларов: например, что вы будете делать, если ваша целевая платформа не поддерживает триггеры? Или хранимые процедуры? (MySQL 4.0, например, или SQLite). Любая кроссплатформенная система должна иметь дело с такими проблемами (например, я приобрел ненависть к Crystal Reports на всю жизнь после борьбы с версией, которая пыталась - катастрофически - применить оператор внешнего соединения Oracle в запросе SQL Server).

Если вы будете придерживаться таблиц, индексов и более простых ограничений, я ожидаю, что вам будет доступно большое разнообразие платформ. Есть аргумент в пользу предположения, что вам, возможно, следует искать что-то еще, кроме вашей БД. Я не пойду дальше этого - это несколько религиозные дебаты ...

1 голос
/ 11 января 2009

Единственное, что мне известно о поддержке SQL Server - это SQLFairy . Он написан на Perl и довольно богат. XML2DDL тоже довольно хорош, но если он не поддерживает выбранную вами СУБД, он не очень жизнеспособен.

0 голосов
/ 21 января 2010

Я провел базовые эксперименты с DDLUtils. Я пробовал для Mysql, MSSql и оракула, он отлично работает. проверено на создание таблиц, ограничений и индексов. Отказался использовать его, так как он не активен и ошибки блокировщика открыты долгое время.

0 голосов
/ 17 декабря 2009

DDLUtils кажется правильным выбором. Работает очень хорошо, даже если проект не очень активен в наши дни.

Кодирование в порядке, и у меня не было проблем с ним (работа на MySQL, Oracle, H2DB, ...).

На самом деле пока нет встроенной командной строки, но вы можете либо запустить задачи ant из командной строки, либо написать свой собственный упаковщик командной строки (это действительно не так сложно ... я сделал это моя сторона, на самом деле).

0 голосов
/ 11 января 2009

Возможно, вам удастся получить абстрактное представление таблиц и их взаимосвязей - но как вы справляетесь с представлениями, хранимыми процедурами, триггерами и т. Д.?

0 голосов
/ 11 января 2009

Является ли обязательной функцией, что ваше приложение не зависит от базы данных? Кажется, далеко не верится, что нужно приложить столько усилий для поддержки такого количества баз данных. Кроме того, ваш уровень данных будет невероятно сложным, поскольку в каждой СУБД есть небольшие различия.

...