2013-01-11 54 views
3

我是Raven DB的新手,也是No SQL DB概念的新手。我試圖擺脫RDB帶來的一些概念。一旦概念是,如果一個記錄被用作外鍵的某個地方,RDB不會讓我刪除主記錄。RavenDB中的關係數據庫刪除概念

假設我不想刪除某個類別,並且該類別的ID正在某些產品中使用,那麼RDB不會讓我刪除該記錄。這非常有幫助,因爲我不必擔心意外刪除記錄。我怎樣才能將相同的概念應用於Raven DB?我想使用像RDB這樣的規範化結構,因爲我打算將Raven DB與某些RDB結合使用。我希望保持安全,以防萬一因爲嘗試新概念而陷入混亂的局面。

希望我是有道理的,

任何幫助將非常感激!

回答

3

在RavenDB中沒有外鍵約束這樣的概念。真的,沒有外鍵。您在文檔中的所有內容都是一個可用於取回另一文檔的字符串。我們稱之爲關係,但這是一個鬆散的術語。將這些文檔鏈接在一起並且阻止您執行刪除操作並沒有什麼進展。

在您描述的情況下,您仍然可以加載產品。但是如果您嘗試使用該產品的類別標識加載類別,則會得到空值。

你必須自己維護這些關係。唯一可用的幫手是Cascade Delete Bundle - 但您仍然必須連接每個實體進行級聯。它不會像使用基於sql外鍵的級聯刪除那樣自動執行。

+0

感謝您的回覆Matt, 是不是有什麼辦法,也許是一種套用來應用這種類型的行爲?我是否要求在基於文檔的數據庫中不適用的內容?我想了解的是,在RDBM世界中,我的擔心是否有效,在No SQL世界中是否仍然有效?如果不是在無SQL數據庫中存儲常見實體(如類別和產品)的解決方案是什麼? –

+0

您可以完全按照您所描述的方式存儲它們。您只是沒有代表您的數據庫來強制執行關係約束。是的,可以編寫一個包來添加此行爲,但它今天不存在。許多人會喜歡它,但很多人會認爲它是一個柺杖,它可能會對性能產生影響。這將不得不謹慎應用。我有寫Rav​​en捆綁的經驗。我會給它更深的思考。 –

+0

隨着烏鴉,你不需要有一個規範化的結構,所以你可以使用RDB。通過這樣做你會從RavenDB中大部分的好處中放棄。嘗試閱讀SQL複製以及這可能對你有幫助。 –