了解Google NDB实体关系

时间:2014-10-11 06:18:59

标签: google-app-engine app-engine-ndb google-cloud-datastore

我正在处理基于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(!)中访问。为什么呢?

2 个答案:

答案 0 :(得分:1)

为什么他们不会?

KeyProperty存储密钥。没有什么可说的,那些必须是实际存在的实体的关键,甚至是指甚至定义的实体类型的关键。他们只是钥匙。

GAE不是关系数据库,您不应将其视为一个关系数据库。如果您需要保留对其他实体的引用,您需要确保在必要时自己更新这些引用。

答案 1 :(得分:0)

想想你的文件系统的快捷方式/符号链接。

当您为文件创建快捷方式/符号链接然后删除原始文件时 - 快捷方式/符号链接仍然保留在指向不再存在的文件系统上。

文件系统跟踪有史以来创建的每个快捷方式/符号链接都是太昂贵了,如果目的地被删除则删除它们。