Попытка смоделировать некоторые сильно связанные, но также иерархические данные в движке приложения.
Вот пример:
Person:
Phone Numbers:
Number: 555-555-5555, Ext: 123, Notes: Work
Number: 444-444-4444, Ext: 456, Notes: Mobile
Один объект, содержащий структуры данных, хранящиеся в виде больших двоичных объектов JSON:
Один из способов сделать это - сохранить коллекцию phone_numbers
как неиндексированный большой двоичный объект текста JSON, а затем добавить свойство поиска, чтобы человека можно было запросить по номеру телефона:
p_entity = Person()
p_entity.phone_numbers = dbText(simplejson.dumps([{'Number':'555-555-5555', 'Ext':'123', 'Notes':'Work'},{'Number':'444-444-4444', Ext:'456', Notes:'Mobile'}]))
p_entity.phone_numbers_search_property = ['5555555555', '4444444444']
p_entity.put()
Несколько объектов с родительско-дочерними отношениями:
Другой способ - использовать дочерние и родительские сущности:
person_entity = Person()
person_entity.put()
phone_entity1 = PhoneNumber(parent=person_entity)
phone_entity.Number = '5555555555'
phone_entity.Ext = '123'
phone_entity.Notes = 'Work'
phone_entity2 = PhoneNumber(parent=person_entity)
phone_entity.Number = '4444444444'
phone_entity.Ext = '456'
phone_entity.Notes = 'Mobile'
Пример использования:
Это сильно связанные данные. Объект человека содержит несколько телефонных номеров. Но телефонные звонки также можно совершать на эти номера телефонов и с них. Записи телефонных звонков также должны ссылаться на эти номера телефонов.
Цель отношений родительско-дочерних сущностей:
После прочтения документации у меня сложилось впечатление, что целью отношений родительско-дочерних сущностей было выполнение транзакций.
Однако могут ли они быть уместными и в этом случае? Почти так же эффективно вытащить родительский элемент и все его дочерние элементы из хранилища данных, как вытащить одну сущность с ее «дочерними элементами», хранящимися в виде текстовых BLOB-объектов JSON?
Основной вопрос
Есть ли нормальный и приемлемый способ обработки таких данных в движке приложений Google?