對於MarkLogic(也許對於一般的noSQL)?最好是將父子作爲一個文檔存儲?因此,如果來自關係型世界,規範化的父子表將需要非規範化並作爲單個文檔存儲?在MarkLogic中存儲父子關係
這個設計是否會影響搜索的完成方式(因爲子記錄現在總是在父項的上下文中進行搜索)?
對於MarkLogic(也許對於一般的noSQL)?最好是將父子作爲一個文檔存儲?因此,如果來自關係型世界,規範化的父子表將需要非規範化並作爲單個文檔存儲?在MarkLogic中存儲父子關係
這個設計是否會影響搜索的完成方式(因爲子記錄現在總是在父項的上下文中進行搜索)?
這可能取決於孩子是否可以有多個父母或沒有(如圖形形式的數據,而不是分層),但我的理由是,對於分層數據,將其存儲在它的自然分層格式(使用XML或JSON或這樣),是最有意義的。這並不意味着將整個父 - 子表存儲爲一個文檔,而是將記錄擴展到其原始樹,並將這些記錄存儲爲文檔。
這並不適合所有的NoSQL解決方案,而是將工作做好爲那些陷入文檔存儲類,尤其是當它們提供圍繞內容和層次結構良好的搜索..像MarkLogic ..
注:graph-類型數據可以作爲三元組存儲在MarkLogic中。這將允許用SPARQL查詢它,並通過它推斷例如..
HTH!
這不是說父母 - 子女關係是「非正規化」,而是孩子被「合併」爲父母。
需要考慮的一件事是您擁有的關係類型。 UML爲不同類型的關係提供了描述 - 請參閱Difference between association, aggregation and composition。
一般(例外情況存在),我認爲關聯和聚合關係,將單獨的文件之間,而組合關係將「合併」成一個單一的文件。具體的例子 - 一個人知道很多人(關聯),一個人可以擁有很多車輛(聚合,車輛只有一個擁有者,但它自己的生命週期),並且一個人可以有很多名字(組合)。我會創建人員和車輛文件,但不會創建名稱文件 - 我會將所有名稱存儲在人員文件中。
對我來說,這是文檔數據庫比關係數據庫的一大優勢。在後者中,無論我有什麼樣的關係,我都被迫創建單獨的表格。在文檔數據庫中,我可以選擇最有意義的東西,並適合我的應用程序的需求。很多時候,我的物理文檔模型與我的應用程序的概念模型非常相似。