As a hypothetical example, I have a model TodoItem and a model TodoList. An TodoList has an ordered list of TodoItems, and any one TodoItem can belong to any number of TodoLists (Many-to-Many). No other information needs to be stored about their relationship other than the order of a TodoItem in a TodoList. What is the best way to represent this in the data store?
There are two ways to implement this - give the TodoList class a ListProperty of db.Key's which will refer to TodoItem's:
class TodoList(db.Model):
items = db.ListProperty(db.Key)
or make a ListItem model that also contains ordering information:
class TodoListItem(db.Model):
item = db.ReferenceProperty(TodoItem)
list = db.ReferenceProperty(TodoList)
order = db.IntegerProperty()
I will definitely be optimizing this later by denormalizing the models, but pre-optimization, does any one representation have an advantage over the other?