2010-12-06 13 views
2

私はcategoryAのようなpojo - > subcategoryA - > bookの関係がある場合。 subcategoryAは親categoryAの子です。本はサブカテゴリの子です この場合、すべてが同じエンティティグループ内にあります大きなテーブルの親子

私は別のサブカテゴリBに「ブック」を移動する必要がある場合。私はsubcategoryAとcategoryAを削除して、categoryA - > subcategoryA - > bookなしで再作成する必要がありますか? categoryb - > subcategoryb - > book、other-book、other-book3を再作成しますか?

+0

あなたはクラスを投稿できますか?私がすべてを非正規化した場合、各 –

答えて

1

書籍がサブカテゴリAの子である場合、サブカテゴリAのキーをブックのキーパスに追加することでこれをモデル化した場合は、書籍を削除/再作成する必要があります。または、元々サブカタログAと同じキー持っていました。これは、サブカタログAの子であった他のすべての書籍に影響します。

これは、appengine docs: "エンティティがデータストアで作成され、その部分が変更できない場合、完全なキーが割り当てられます。

私にとってはどちらの解決策も難しいように思えます。デザインを考え直すことをお勧めします。たとえば、subcatagoryAのキーを別のプロパティの中に別のフィールドとして格納することができます。これには欠点もあります。これは、データを非正規化し、subcatagoryAのデータをブックの中に直接格納することで部分的に解決できます。

[EDIT]あなたの質問に応えて

:小さなエンティティグループの欠点は、あなたがトランザクションを使用することができないということです。これが問題であるかどうかは、書籍+(サブ)カテゴリで本当にトランザクションが必要かどうかによって決まります。非正規化されたデータを変更したい場合、より大きな非正規化の問題が発生します。このようなスキーム:。。

  • ストアのプロパティを持つエンティティとして各カテゴリカテゴリKEY +あなたの本(S)と(の一部)他のプロパティを格納
  • カテゴリを変更した場合、すべての非正規化データを更新
  • cronジョブを使用して、バックグラウンドでの一貫性をチェックします(前のジョブが途中で失敗した場合など)。
+0

のプロパティだけです。つまり、1つのエンティティグループには1つのエンティティしか存在しません。もし私があまりにも多くの別個のエンティティグループを持っているならば、その影響は...? – cometta

関連する問題