3

是否有任何快速数据库原型制作工具不需要我声明数据库模式,而是根据我使用实体的方式创建它。

例如,假设一个空数据库(伪代码):

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

由于在动态创建模式时可以做出逻辑假设,并且您始终可以通过使用数据库工具稍后对其进行调整来覆盖其选择。

此外,您可以通过这种方式对其进行单元测试来生成您的模式。

显然这仅用于原型设计。

外面有这样的东西吗?

4

6 回答 6

2

谷歌的应用引擎就是这样工作的。当您下载工具包时,您将获得用于测试的数据库引擎的本地副本。

于 2008-08-28T13:39:17.120 回答
1

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"}

}

保存文件会自动更改架构。同样,如果您使用脚手架,它会被更新。原型过程变为运行应用程序、在浏览器中查看页面、修改域、刷新浏览器并查看更改。

于 2008-08-28T14:46:07.413 回答
1

我同意 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();
于 2008-09-09T14:57:35.243 回答
0

可能不完全回答您的一般问题,但如果您使用(N)Hibernate,那么您可以从您的 hbm 映射文件自动生成数据库模式。

它不是像您想要的那样直接从您的代码中完成,但是 Hibernate Schema 生成似乎对我们很有效

于 2008-08-28T13:40:26.493 回答
0

你想要模式,但生成它,还是你真的想要没有模式

对于前者,我会像@tom-carter 所说的那样选择 nhibernate。让它为你生成你的模式,你都很好(至少在你推出你的应用程序之前,然后看看像 Tarantino 和 RedGate SQL Diff 之类的东西或者它被称为生成更新脚本的任何东西)

如果你想要后者......谷歌应用引擎会这样做,正如我今天下午发现的那样,它非常好。如果您想坚持使用您控制的代码,我建议您查看 CouchDB,尽管设置它需要一些前期工作。但是一旦你拥有它,它就是一个完全 100% 无模式的数据库。好吧,您有一个 ID 和一个版本,但仅此而已 - 其余的由您决定。http://incubator.apache.org/couchdb/

但是听上去,(N)hibernate 是最适合的,但我可能是错的。

于 2008-08-30T20:08:01.977 回答
0

您可以使用对象数据库。

于 2008-09-09T14:43:31.127 回答