根据对象定义生成数据库表

时间:2020-03-05 18:43:34  来源:igfitidea点击:

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

  • 在Visio中创建/更改表
  • 使用Visio的"更新数据库"创建/更改数据库
  • 将表导入" LINQ to SQL类"对象
  • 相应地更改代码
  • 编译中

从对象/实体定义生成数据库模式的方法怎么样?我似乎找不到像这样的工具的良好参考(我希望至少在某些框架中会有某种内置支持)。

如果我能做到,那将是完美的:

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

解决方案

回答

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

回答

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

回答

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

回答

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

回答

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

回答

我一直在研究一些"主要"框架,而Django似乎完全按照我的意思做。大概从这个截屏视频来看。

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

回答

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

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

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

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

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

回答

是的,Django运行良好。

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

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

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

回答

签出DataObjects.Net旨在支持这种情况。仅编码,别无其他。它的架构升级层可能是我们所能找到的最有特色的一层,它确实完全抽象了架构升级SQL。

观看产品视频,我们将发现没有任何其他内容可以用来同步架构。架构升级示例显示了此功能的预期用法。

回答

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

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

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

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

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