关于orm:从对象定义生成数据库表

关于orm:从对象定义生成数据库表

Generating database tables from object definitions

我知道,有几种(自动)方法可以创建数据访问层来操纵现有数据库(LINQ to SQL,Hibernate等)。但是我有点累了(我相信应该有一种更好的做事方式),例如:

  • 在Visio中创建/更改表
  • 使用Visio的"更新数据库"创建/更改数据库
  • 将表导入" LINQ to SQL类"对象
  • 相应地更改代码
  • 编译中
  • 从对象/实体定义生成数据库模式的方法怎么样?我似乎找不到像这样的工具的良好参考(我希望至少在某些框架中会有某种内置支持)。

    如果可以,那将是完美的:

  • 更改对象定义
  • 更改操纵对象的代码
  • 编译(数据库更改自动完成)

  • 签出DataObjects.Net-旨在支持这种情况。仅代码,无其他。它的模式升级层可能是您所能找到的最有特色的层,它确实完全抽象了模式升级SQL。

    观看产品视频-您不会注意到同步架构的任何额外操作。架构升级样本显示了此功能的预期用法。


    当我们构建自己的框架的第一个版本(Inon Datamanager)时,我让它读取了预先存在的SQL表并从中自动生成Java对象。

    当我来自Smalltalkish背景的同事构建了第二个版本时,他们从对象开始,然后自动生成表格。

    实际上,直到我再次添加它之前,他们完全忘记了SQL部分。但是如今,我们只是在应用程序启动时运行触发器,该触发器遍历对象模型,检查表和所有正确的列是否存在,如果不存在则创建它们。很方便。

    事实证明,这比您预期的要容易得多-如果您最喜欢的工具不支持类似的过程,则可以在几个小时内编写它-假设关系到对象的映射相对简单。

    但问题是,这似乎取决于您是文化对象还是数据库人员-您可以将其中任何一个视为权威来源。


    您描述的是GORM。它是Grails框架的一部分,旨在与Hibernate(将来可能是JPA)一起使用。当我第一次使用Grails时,它似乎倒退了。我对使用Rails样式的工作流程感到更满意,该工作流程包括制作表格并让框架从数据库架构生成支架。 GORM会为您持久保存域对象,以便您创建和更改对象,并管理数据库的创建/更新。现在,我已经习惯了,这更加有意义。很抱歉,如果您不想使用新的框架,但是它在1.1版的路线图上可以使GORM独立可用。


    正如Jason所建议的那样,对象db可能是一个不错的选择。看一下db4objects。


    我相信这是Microsofy实体框架试图解决的问题。尽管没有专门设计为"编译(数据库更改是自动完成的)",但它确实解决了处理对域模型的更改的问题,而无需极大地依赖基础数据模型。


    您可能正在寻找对象数据库。


    有点晚的答案,但是在这里:

    我遇到了完全相同的问题,最终为它编写了自己的解决方案,但是仅使用.NET和SQL Server。它基本上会实现您描述的过程:

    • 所有数据库对象均作为源代码的一部分保留为嵌入式CREATE脚本
    • 使用数据访问功能时,将自动(或应要求)设置数据库对象
    • 所有非表更改也可以同时(或根据要求)自动执行
    • 升级数据库时,还通过(手动创建的)更改脚本执行可能需要特别注意迁移数据的表更改
    • 甚至可以检测到对任何数据库对象进行的手动更改,从而可以验证和纠正模式完整性
    • 可选的轻量级ORM可以映射存储过程和对象以及结果集(甚至多个)
    • 命令行应用程序有助于使SQL源文件与开发数据库保持同步

    根据LGPL许可,包含数据库的库是免费的。

    http://code.google.com/p/bsn-modulestore/


    是的,Django运行良好。

    是的,它将根据您的数据模型定义生成SQL表(用python编写)

    如果您更新结构,它不会总是更改现有表,您可能必须手动运行ALTER表

    Ruby on Rails具有这些功能的更高级版本(Rails迁移),但是我不太喜欢该框架,我发现ruby和rails非常独特


    我一直在研究一些"主要"框架,而Django似乎确实做到了我所说的。大概从这个截屏视频来看。

    有人对此有何评论?它运作良好吗?


    一些真正的大狗,例如ERwin Data Modeler,将成为DB的对象。您需要花大价钱才能负担得起该产品。


    推荐阅读