0

我基於NDB和兩個實體(A和B),其中A與B中的一對多的關係與屬性來實現這樣的瞭解谷歌NDB實體關係

bobjects = ndb.KeyProperty(repeated=True); 
處理一個谷歌的App Engine應用程序

我創建了一個A對象(比如a1)和三個B對象(b1,b2,b3)。 因此,我已將b1,b2和b3鍵添加到a1.objects向量中。 它工作正常,但我因此刪除了數據存儲區中的b1,b2和b3,它們仍然在a1(!)中可見。爲什麼?

回答

0

想想你的文件系統的快捷方式/符號鏈接。

當您創建快捷方式/符號鏈接到文件,然後刪除原始文件 - 快捷方式/符號鏈接仍然保留在文件系統指向不存在的東西了。

如果文件系統跟蹤每個創建的快捷方式/符號鏈接,並且在目標被移除時刪除它們將會非常昂貴。

1

他們爲什麼不是?

KeyProperty存儲密鑰。沒有什麼可以說這些必須是實際存在的實體的關鍵,或甚至是指您甚至定義的實體類型的關鍵字。他們只是鑰匙。

GAE不是一個關係數據庫,你不應該把它當作一個。如果您需要保留對其他實體的引用,則需要確保在必要時自己更新這些引用。

+0

我明白了,但我無法看到引用的數據仍然可以通過網頁檢索到,但它們不再存在於數據存儲區中 – lowcoupling 2014-10-11 16:58:04