質問
データベース スキーマを宣言する必要がなく、エンティティの使用方法に基づいてスキーマを作成する、迅速なデータベース プロトタイピング ツールはありますか。
たとえば、空のデータベース (疑似コード) を想定します。
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
スキーマを動的に作成するときに論理的な仮定が存在するため、後から DB ツールを使用して調整することで、いつでもその選択をオーバーライドできます。
また、この方法で単体テストを行うことでスキーマを生成することもできます。
そして明らかに、これはプロトタイピング専用です。
このようなものはありますか?
解決
Googleのアプリケーションエンジン このように機能します。ツールキットをダウンロードすると、テスト用のデータベース エンジンのローカル コピーが取得されます。
他のヒント
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"}
}
ファイルを保存すると、スキーマが自動的に変更されます。同様に、スキャフォールディングを使用している場合は更新されます。プロトタイプ プロセスでは、アプリケーションを実行し、ブラウザでページを表示し、ドメインを変更し、ブラウザを更新して、変更を確認します。
私は NHibernate のアプローチとデータベースの自動生成に同意します。ただし、構成ファイルの作成を避け、コードの近くに留まりたい場合は、Castle の アクティブレコード. 。「スキーマ」は、via 属性を使用してクラス上で直接宣言します。
[ActiveRecord]
public class User : ActiveRecordBase<User>
{
[PrimaryKey]
public Int32 UserId { get; set; }
[Property]
public String FirstName { get; set; }
}
適用できるさまざまな制約 (検証、境界など) があり、異なるデータ モデル クラス間の関係を宣言できます。これらのオプションのほとんどは、属性に追加されるパラメーターです。それはかなり単純です。
つまり、コードを操作していることになります。コード内で使用法を宣言します。完了したら、ActiveRecord を実行しましょう データベースを作成する.
ActiveRecordStarter.Initialize();
ActiveRecordStarter.CreateSchema();
あなたの質問に正確に応答していない可能性があります 一般的な 質問ですが、使用した場合 (N)休止状態 その後、hbm マッピング ファイルからデータベース スキーマを自動的に生成できます。
あなたが望んでいるように、コードから直接実行されるわけではありませんが、Hibernate スキーマの生成はうまく機能しているようです。
スキーマが必要ですが、生成してもらいますか、それとも実際に必要ですか? スキーマはありません?
前者の場合、@tom-carterが言ったように、nhibernateを使用します。これにスキーマを生成させれば、すべて問題ありません (少なくともアプリを公開するまでは、Tarantino や RedGate SQL Diff など、更新スクリプトを生成するために呼び出されるものを調べてください)。
後者が必要な場合は...今日の午後に発見したのですが、Google アプリ エンジンはこれを実現しており、非常に優れています。自分の制御下にあるコードにこだわりたい場合は、CouchDB を検討することをお勧めします。ただし、それをセットアップするには少し事前の作業が必要です。しかし、一度取得すると、完全に 100% スキーマフリーのデータベースになります。ID とバージョンはありますが、それだけです。残りはあなた次第です。 http://incubator.apache.org/couchdb/
しかし、一見すると (N)hibernate が最適だと思われますが、私は間違っている可能性があります。
オブジェクト データベースを使用することもできます。