Como ejemplo hipotético, tengo un modelo TodoItem y un modelo TodoList. Un TodoList tiene una lista ordenada de TodoItems, y cualquier TodoItem puede pertenecer a cualquier cantidad de Lista de Todo (Muchos a Muchos). No se debe almacenar ninguna otra información acerca de su relación que no sea el orden de un TodoItem en una lista TodoList. ¿Cuál es la mejor manera de representar esto en la tienda de datos?ListProperty de claves vs Many-to-Many en App Engine
Hay dos maneras de implementar esto - dar la clase ToDoList un ListProperty de db.Key de la cual se referirá a TodoItem de:
class TodoList(db.Model):
items = db.ListProperty(db.Key)
o hacer un modelo ListItem que también contiene la información de pedido:
class TodoListItem(db.Model):
item = db.ReferenceProperty(TodoItem)
list = db.ReferenceProperty(TodoList)
order = db.IntegerProperty()
Definitivamente voy a optimizar esto más adelante mediante la desnormalización de los modelos, pero la preoptimización, ¿tiene alguna representación una ventaja sobre la otra?