2010-12-06 6 views
2

если есть у меня pojo подобный категорияA -> подкатегорияA -> книжные отношения. подкатегория А является дочерним по отношению к родительской категории А. книга является дочерью подкатегории A , в этом случае все внутри одной организации groupбольшой стол родитель-ребенок

, если мне нужно переместить «книгу» в другую подкатегорию-B. Мне нужно удалить подкатегорию А и категорию А, и воссоздать категорию А -> подкатегорию А -> без книги? и воссоздать categoryb -> subcategoryb -> книга, другая книга, другая книга3?

+0

можете ли вы разместить занятия, пожалуйста? просто свойства каждого –

ответ

1

Если «книга является дочерней подкатегорией A», и вы ее смоделировали, добавив ключ подкатегории A к ключевому пути книги, вам либо нужно удалить/воссоздать книгу, либо вам нужно создать подкаталоги B с тем же ключом, что и субкаталогия. Первоначально имел. Это повлияло бы на все другие книги, которые были дочерними субкатегориями A.

Это потому, что (со ссылкой на appengine docs: «Полный ключ назначается, когда объект создается в хранилище данных, и ни одна из его частей не может меняться».).

Оба решения для меня кажутся довольно сложными, и я предлагаю вам пересмотреть свой дизайн. Например, вы можете хранить ключ subcatagoryA как отдельное поле внутри отдельного свойства. Это также имеет побочные эффекты, которые вы могли бы частично решить путем денормализации ваших данных и хранения (части) данных subcatagoryA непосредственно в книге INSIDE.

[EDIT]

В ответ на ваш вопрос: недостаток малых групп сущностей является то, что вы не можете использовать транзакции. Является ли это проблемой, зависит от того, действительно ли вам нужны транзакции в книгах + ((под) категории. Большая проблема денормализации возникает, когда вы хотите изменить что-то из ваших денормализованных данных. Для этого вы можете придумать схема, как это:..

  • магазин каждой категории как объект со свойствами следует хранить категории KEY + (некоторые) другие свойства вашей книги (ы)
  • Если категория изменения, обновить все денормализованным данные из всех книг, принадлежащих к этой категории (используется хранимый «чужой» ключ для поиска этих книг)
  • Используйте задание cron для проверки согласованности в фоновом режиме (то есть в случаях, когда предыдущее задание не выполняется в середине).
+0

, если я денормализовал все. это также означает, что одна группа объектов будет иметь только одну сущность. любое влияние на это, если у меня слишком много отдельных групп объектов ...? – cometta