Я знаю, что существует несколько (автоматических) способов создания уровня доступа к данным для управления существующей базой данных (LINQ to SQL, Hibernate и т. д.). Но я немного устаю (и я считаю, что должен быть лучший способ делать что-то) от таких вещей, как:
Как насчет способа создания схемы базы данных из определения объектов / сущностей? Кажется, я не могу найти хороших ссылок на подобные инструменты (и я ожидал бы какой-то встроенной поддержки, по крайней мере, в некоторых фреймворках).
Было бы идеально, если бы я мог просто:

Возможно, вы ищете База данных объектов.
Я считаю, что это проблема, которую пытается решить Microsofy Entity Framework. Хотя он специально не предназначен для «компиляции (изменения базы данных выполняются автоматически)», он решает проблему обработки изменений в модели предметной области без огромной зависимости от базовой модели данных.
Некоторые действительно большие собаки, такие как ERwin Data Modeler, будут возражать против DB. Однако вам нужно иметь большие деньги, чтобы позволить себе этот продукт.
Как предположил Джейсон, хорошим выбором может быть объект db. Взгляните на db4objects.
загвоздка в том, что это объектная база данных и, следовательно, не основана на более совершенной реляционной модели.
Вы описали ГОРМ. Он является частью структуры Грааль и создан для работы с Hibernate (возможно, JPA в будущем). Когда я впервые использовал Grails, все казалось отсталым. Мне было удобнее использовать рабочий процесс в стиле Rails, когда я создавал таблицы и позволял фреймворку генерировать строительные леса из схемы базы данных. GORM сохраняет объекты вашего домена для вас, поэтому вы создаете и изменяете объекты, он управляет созданием / обновлением базы данных. Теперь, когда я привык к этому, это имеет больше смысла. Извините, что подразнил вас, если вы не ищете новую структуру, но она включена в дорожная карта для выпуска 1.1, чтобы сделать GORM доступным автономно.
Я продолжал копаться в некоторых «основных» фреймворках, и мне кажется, что Django делает именно то, о чем я говорил. Или так кажется из этого скринкаст.
Есть ли у кого-нибудь какие-нибудь замечания по этому поводу? Хорошо ли работает?
Когда мы создали первую версию нашего собственного фреймворка (Инон Датаманагер), я заставил его читать уже существующие таблицы SQL и автоматически генерировать из них объекты Java.
Когда мои коллеги из Smalltalkish создали вторую версию, они начали с объектов, а затем автоматически сгенерировали таблицы.
Фактически, они совсем забыли о части SQL, пока я не вернулся и не добавил ее. Но в настоящее время мы просто запускаем триггер при запуске приложения, который выполняет итерацию по объектной модели, проверяет, существуют ли таблицы и все нужные столбцы, и создает их, если нет. Очень удобно.
Это оказалось намного проще, чем вы могли ожидать - если ваш любимый инструмент не поддерживает подобный процесс, вы, вероятно, могли бы написать его за пару часов - при условии, что реляционное сопоставление объектов относительно просто.
Но суть в том, что, похоже, это зависит от того, являетесь ли вы человеком-объектом или человеком базы данных - вы можете рассматривать любого из них как авторитетный источник.
Да, Django работает хорошо.
да, он сгенерирует ваши таблицы SQL из определений вашей модели данных (написанных на python)
Если вы обновите свою структуру, это не всегда изменит существующие таблицы, возможно, вам придется запустить ALTER table вручную.
Ruby on Rails имеет еще более продвинутую версию этих функций (миграции на Rails), но мне не очень нравится фреймворк, я нахожу Ruby и rails довольно своеобразными.
Обратите внимание на DataObjects.Net - предназначен для поддержки именно этого случая. Только код и ничего больше. Его уровень обновления схемы, вероятно, является наиболее функциональным из тех, что вы можете найти, и он действительно полностью абстрагирует SQL обновления схемы.
Обратите внимание на видео продукта - вы заметите, что для синхронизации схемы ничего не делается. Пример обновления схемы показывает предполагаемое использование этой функции.
Связанный ответ: stackoverflow.com/questions/1143525/…
Между тем продукт действительно позволяет вам почувствовать, что вы имеете дело с объектной базой данных. Более того, он фактически предоставляет один (в настоящее время - только для данных в памяти).
Вроде запоздалый ответ, но вот он:
Я столкнулся с той же проблемой и в итоге написал свое собственное решение для нее, но работал только с .NET и SQL Server. В основном он реализует описанный вами процесс:
CREATE как часть исходного кода.Библиотека, включая базу данных, бесплатна по лицензии LGPL.
Это действительно хороший продукт. Почти хорошо, чтобы быть правдой ... все еще жду улова.