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などを使って表現する。

app engineのエンティティグループ – 理系のためのTIPS集

あと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で言うところのテーブル。