RDBMSを長くやっている人ほど、app engineのデータストアの概念で混乱する可能性が高いと思います。
自分もまだ時々判らなくなるので、一発整理しておきます。
まず、Entity (エンティティ) と聞くと、Codd博士のERモデルや、IDEF1Xとかの拡張ERモデルを思い浮かべてしまいます。
いわゆるリレーショナル・データモデリングにおける「実態」を表すEntityは、RDB上のスキーマの設計の元になるもの、と刷り込まれているんです。
ですが、app engine の話をするとき、Entityという言葉は文字通り実体のほう、RDBにストアされた個々のインスタンス、つまり行、タプルをイメージするべきの様です。
私だけでしょうか。微妙に混乱します。
このへんの微妙な言葉のニュアンスから、Entity Group と リレーションを混同してしまうという弊害があるんじゃないでしょうか。
実は私もそうでしたので。
Entity Group は Entity (=オブジェクト、≒タプル) を保存するときに決まる(決める)もの。
リレーションはデータクラスで定義し、Entityに保存する時に決めるもの。
エンティティグループはリレーションではない
祖先とか親とか子とかいう単語が出てくるので誤解しがちだけど、エンティティグループは、1:多のようなリレーションを表現するものではない。
トランザクションによりACID特性を保障したいときに設定するもの。
リレーションはkeyをコレクションで持ったり、Slim3のModelRefなどを使って表現する。
あとkindという言葉も、これからGAEを学ぼうとする人には鬼門になるかもしれません。
Google App Engineの本とか記事とかを読んでいると良く出てくるんですけど、日本語のGoogle Codeのドキュメントを見ても、kindの説明はありません。原文で読むとなんとなく判ってきます。
整理しておきます。
Entity (エンティティ) App Engine データストア内のデータ オブジェクト。 key と プロパティ がセットされる。 リレーショナルデータモデルで言うところのタプル。 RDBMSで言うところの行、レコード。 Javaでデータモデルを定義し、そのモデルのインスタンスを生成してDatastoreに 保存したら、それがエンティティ。 プロパティ 名前のついた値。Entityには1つ以上のプロパティがある。 そのデータ型は整数、浮動小数点値、文字列、日付、バイナリ データなど。 Jデータクラスのフィールドと(ほぼ)同義。 データクラス Javaでデータモデルを定義たクラス。 kind 正確にはEntity's kindでしょう。 Datastoreに保存されたエンティティのデータクラスの種類。 リレーショナルモデルで言うところのスキーマ。 RDBMSで言うところのテーブル。