denormalize to avoid hitting GAE datastore read limits so quickly