自适应数据库
是否有任何快速的数据库原型制作工具不需要我声明数据库架构,而是根据我使用实体的方式来创建它。
例如,假设数据库为空(伪代码):
user1 = new User() // Creates the user table with a single id column user1.firstName = "Allain" // alters the table to have a firstName column as varchar(255) user2 = new User() // Reuses the table user2.firstName = "Bob" user2.lastName = "Loblaw" // Alters the table to have a last name column
由于在动态创建模式时可以做出逻辑假设,因此我们始终可以通过使用数据库工具稍后对其进行调整来覆盖其选择。
另外,我们可以通过以这种方式进行单元测试来生成模式。
显然,这仅用于原型制作。
那里有这样的东西吗?
解决方案
回答
Google的应用程序引擎就是这样工作的。下载工具箱时,我们将获得数据库引擎的本地副本以进行测试。
回答
可能无法完全回答一般问题,但是如果我们使用(N)Hibernate,则可以从hbm映射文件自动生成数据库架构。
似乎并不需要直接从代码中完成,但是Hibernate Schema的生成似乎对我们来说很好
回答
Grails使用Hibernate来持久化域对象,并产生与我们描述的行为类似的行为。要更改架构,我们只需修改域,在这种简单情况下,文件名为User.groovy。
class User { String userName String firstName String lastName Date dateCreated Date lastUpdated static constraints = { userName(blank: false, unique: true) firstName(blank: false) lastName(blank: false) } String toString() {"$lastName, $firstName"} }
保存文件会自动更改架构。同样,如果我们使用的是脚手架,则会对其进行更新。原型过程变为运行应用程序,在浏览器中查看页面,修改域,刷新浏览器并查看更改。
回答
我们是否需要模式,但已生成,还是实际上不希望模式?
对于前者,我会像@ tom-carter所说的那样使用nhibernate。让它为我们生成模式,一切都很好(至少要等到推出应用程序之后,再看一下Tarantino和RedGate SQL Diff之类的东西,或者所谓的生成更新脚本的东西)
如果我们想要后者,...就像我今天下午发现的那样,谷歌应用程序引擎可以做到这一点,它非常好。如果我们想坚持在控制之下的代码,我建议我们查看CouchDB,这是设置它的一些前期工作。但是一旦有了它,它就是一个完全100%无模式的数据库。好吧,我们有一个ID和一个Version,但这仅由我们自己决定。 http://incubator.apache.org/couchdb/
但是从它的声音来看,冬眠最适合,但是我可能错了。
回答
我们可以使用对象数据库。
回答
我同意NHibernate的方法和自动数据库生成。但是,如果我们要避免编写配置文件并保持靠近代码的位置,请使用Castle的ActiveRecord。我们可以直接在类中通过via属性声明"模式"。
[ActiveRecord] public class User : ActiveRecordBase<User> { [PrimaryKey] public Int32 UserId { get; set; } [Property] public String FirstName { get; set; } }
我们可以应用多种约束(验证,界限等),并且可以声明不同数据模型类之间的关系。这些选项大多数是添加到属性的参数。这很简单。
因此,我们正在使用代码。在代码中声明用法。完成后,让ActiveRecord创建数据库。
ActiveRecordStarter.Initialize(); ActiveRecordStarter.CreateSchema();