从对象定义生成数据库表
Posted
技术标签:
【中文标题】从对象定义生成数据库表【英文标题】:Generating database tables from object definitions 【发布时间】:2010-09-06 22:44:07 【问题描述】:我知道有几种(自动)方法可以创建数据访问层来操作现有数据库(LINQ to SQL、Hibernate 等...)。但是我有点厌倦了(我相信应该有更好的做事方式),比如:
-
在 Visio 中创建/更改表格
使用 Visio 的“更新数据库”创建/更改数据库
将表导入“LINQ to SQL 类”对象
相应地更改代码
编译
从对象/实体定义生成数据库架构的方法怎么样?我似乎无法找到此类工具的良好参考(我希望至少在某些框架中提供某种内置支持)。
如果我能做到就完美了:
-
更改对象定义
更改操作对象的代码
编译(数据库更改自动完成)
【问题讨论】:
【参考方案1】:查看DataObjects.Net - 旨在完全支持这种情况。只有代码,没有别的。它的schema upgrade layer 可能是你能找到的最有特色的一个,它确实完全抽象了模式升级 SQL。
查看product video - 您会注意到没有进行任何额外的同步架构。架构升级示例显示了此功能的预期用途。
【讨论】:
相关答案:***.com/questions/1143525/… 顺便说一句,该产品确实让您感觉自己正在处理对象数据库。此外,它实际上提供了一个(目前 - 仅用于内存数据)。【参考方案2】:您可能正在寻找Object Database。
【讨论】:
【参考方案3】:我相信这是Microsofy Entity Framework 试图解决的问题。虽然不是专门为“编译(数据库更改是自动完成的)”而设计的,但它确实解决了处理域模型更改的问题,而无需大量依赖底层数据模型。
【讨论】:
【参考方案4】:正如 Jason 所建议的,object db 可能是一个不错的选择。看看db4objects。
【讨论】:
这是一款非常好的产品。几乎是真实的......仍在等待捕获。 问题在于它是对象数据库,因此不基于高级关系模型。【参考方案5】:你描述的是GORM。它是Grails 框架的一部分,旨在与Hibernate(将来可能是JPA)一起使用。当我第一次使用 Grails 时,它似乎倒退了。我更喜欢使用 Rails 风格的工作流程来制作表格并让框架从数据库模式生成脚手架。 GORM 为您保留域对象,以便您创建和更改对象,它管理数据库创建/更新。现在我已经习惯了,这更有意义。如果您不是在寻找新框架,很抱歉取笑您,但它位于 roadmap for release 1.1 以使 GORM 可独立使用。
【讨论】:
【参考方案6】:当我们构建自己的框架 (Inon Datamanager) 的第一个版本时,我让它读取预先存在的 SQL 表并从中自动生成 Java 对象。
当我来自 Smalltalkish 背景的同事构建第二个版本时,他们从对象开始,然后自动生成表格。
实际上,他们完全忘记了 SQL 部分,直到我回来添加它。但是现在我们只是在应用程序启动时运行一个触发器,它迭代对象模型,检查表和所有正确的列是否存在,如果不存在则创建它们。很方便。
事实证明,这比您预期的要容易得多 - 如果您最喜欢的工具不支持类似的过程,您可能会在几个小时内编写它 - 假设关系到对象映射相对简单。
但重点是,这似乎取决于您在文化上是对象人还是数据库人 - 您可以将其中任何一个视为权威来源。
【讨论】:
【参考方案7】:一些真正的大狗,例如ERwin Data Modeler,会反对DB。不过,您需要有大笔资金才能买得起该产品。
【讨论】:
【参考方案8】:我一直在研究一些“主要”框架,似乎 Django 完全符合我的要求。或者从这个screencast看来是这样的。
有人对此有何评论吗?效果好吗?
【讨论】:
【参考方案9】:是的,Django 运行良好。
是的,它将根据您的数据模型定义(用 python 编写)生成您的 SQL 表
如果您更新结构,它不会总是更改现有表,您可能需要手动运行 ALTER 表
Ruby on Rails 具有这些功能的更高级版本(Rails 迁移),但我不太喜欢该框架,我发现 ruby 和 rails 非常独特
【讨论】:
【参考方案10】:有点晚的答案,但它是这样的:
我遇到了完全相同的问题,并最终为它编写了自己的解决方案,但仅使用 .NET 和 SQL Server。它基本上确实实现了您描述的过程:
所有 DB 对象都保存为嵌入的CREATE
脚本,作为源代码的一部分
使用数据访问功能时会自动(或根据请求)设置 DB 对象
所有非表格更改也会同时自动(或根据请求)执行
在升级数据库时也可以通过(手动创建的)更改脚本来执行表更改(可能需要特别注意迁移数据)
甚至可以检测到对任何数据库对象进行的手动更改,从而可以验证和纠正架构完整性
可选的轻量级 ORM 可以映射存储过程和对象以及结果集(甚至多个)
命令行应用程序有助于使 SQL 源文件与开发数据库保持同步
包含数据库的库在 LGPL 许可下是免费的。
http://code.google.com/p/bsn-modulestore/
【讨论】:
以上是关于从对象定义生成数据库表的主要内容,如果未能解决你的问题,请参考以下文章