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?
This depends on a few factors:
If you need extra information, or have many elements in your association, or only need to retrieve a few of them, the relation entity is probably a better choice. In other situations, the list can be both easier and faster. In the case of a todo list, I would say that a list of keys is most definitely the best way to go.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With