我閱讀了級聯刪除的文檔,但有一點我不清楚是,如果可以設置數據庫,以便可以共享一個子行一旦刪除最近的引用父行,就會刪除一個父行和子行?當刪除最後一個引用時SQLite刪除共享行
(基本上我想要的是像一個std :: shared_ptr的外鍵。)
如果這是不可能的內置級聯刪除設置,可以將其與一個觸發做了什麼?那將是什麼樣子?
最後的選擇我是,雖然它是可能在我寫來創建此共享引用情況的圖書館,我可以簡單地讓它拋出一個異常時,構建這樣的事情,企圖發生。
具體來說,我有一個自我引用表,存儲類似抽象語法樹的東西。每個節點都有一個操作和兩個子節點。在使用數據庫的C++程序中,表示此表中的行的對象具有重載運算符,這些運算符返回的值將同時在表中創建行。例如,「a < < b」將返回臨時值「c」,並且數據庫將具有如下行:(c_id,'< <',a_id,b_id)。但是,您可以通過調用「a < < x」來實現,在這種情況下,數據庫將包含引用「a」的兩行。
編寫C++類是爲了在其構造函數中插入錶行,並在其析構函數中刪除錶行。本質上,我想創建和銷燬C++代碼中的臨時對象,以便在數據庫的狀態下進行鏡像。但是我想抑制刪除一個子行,如果它仍然被另一個父引用。