架空の例として、モデル TodoItem とモデル TodoList があります。TodoList には TodoItem の順序付きリストがあり、任意の TodoItem は任意の数の TodoList (多対多) に属することができます。TodoList 内の TodoItem の順序以外に、それらの関係について他の情報を保存する必要はありません。これをデータ ストアで表現する最良の方法は何ですか?
これを実装するには 2 つの方法があります - TodoList クラスに TodoItem を参照する db.Key の ListProperty を与えます。
class TodoList(db.Model):
items = db.ListProperty(db.Key)
または、注文情報も含む ListItem モデルを作成します。
class TodoListItem(db.Model):
item = db.ReferenceProperty(TodoItem)
list = db.ReferenceProperty(TodoList)
order = db.IntegerProperty()
モデルを非正規化することで後でこれを最適化することは間違いありませんが、事前最適化では、1 つの表現が他の表現よりも優れていますか?