Понимание отношений сущностей Google NDB

Я имею дело с приложением движка приложения Google на основе ndb и двух сущностей (A и B), где A имеет отношение один ко многим с B, реализованное с таким свойством

bobjects = ndb.KeyProperty(repeated=True);

Я создал один объект A (скажем, a1) и три объекта B (b1, b2, b3). Поэтому я добавил ключи b1, b2 и b3 к вектору a1.objects. Он работает нормально, но поэтому я удалил b1, b2 и b3 из хранилища данных, и они все еще видны в a1 (!). Почему?


person lowcoupling    schedule 11.10.2014    source источник


Ответы (2)


Почему бы им не быть?

KeyProperty хранит ключи. Ничего не сказано, что это должны быть ключи к сущностям, которые действительно существуют, или даже ключи, относящиеся к типам сущностей, которые вы даже определили. Это просто ключи.

GAE не является реляционной базой данных, и вы не должны рассматривать ее как одну. Если вам нужно сохранить ссылки на другие сущности, вы должны быть уверены, что обновляете эти ссылки самостоятельно, когда это необходимо.

person Daniel Roseman    schedule 11.10.2014
comment
Я понимаю, но не вижу, как упомянутые данные все еще могут быть получены веб-страницей, хотя они больше не существуют в хранилище данных - person lowcoupling; 11.10.2014

Подумайте о ярлыках / символических ссылках вашей файловой системы.

Когда вы создаете ярлык / символическую ссылку на файл, а затем удаляете исходный файл - ярлык / символическая ссылка все еще остается в файловой системе, указывая на то, что больше не существует.

Для файловой системы было бы слишком дорого отслеживать каждый когда-либо созданный ярлык / символическую ссылку и удалять их, если место назначения было удалено.

person Mihail Russu    schedule 11.10.2014