2017-04-17 25 views
0

考慮一個應用場景,我有用戶和項目,需求是用戶應分配給項目。一個用戶可以分配到多個項目。這是一個多對多的關係。那麼建立這樣一個需求的最好方法是什麼?在像MongoDB或Couchbase這樣的nosql數據庫中,如何模擬多對多關係?

我會想討論建模這樣的規定幾種方法:

- 嵌入式數據模型

在這種方法中,我將內使嵌入項目文檔的用戶文檔。

優點:您可以在一個API調用中獲取所有必需的數據,或者通過獲取單個文檔獲取所有必需的數據。

缺點:數據duplicacy這是OK

  Real problem is if you update user information for eg user mobile no or name from users screen then this updated information should also be reflected under all embedded user documents. For this some bulk update query should be fired. 

但是,這是正確的方式???

- 嵌入對象的引用,而不是對象(這是標準化)

在這種情況下,如果我們使嵌入用戶ID的用戶對象,然後上面不會在那裏提到的問題,而不是,但隨後我們將不得不作出多個網絡調用來獲得所需的數據,或像我們在SQL中一樣建立一個獨立的關係文檔。

這是最好的方法嗎?

+0

我不認爲這應該是stackoverflow的問題。它應該到[數據庫管理StackExchange](https://dba.stackexchange.com/) –

+0

這不是一個管理問題,它是一個應用程序數據設計問題。 – Hod

回答

0

我們有一個相同的場景,所以我嵌入objectId。併爲客戶填充數據,在查找功能中填充用戶數據。

 

    contract.find({}).populate('user').then(function(){}); 

0

有幾條硬性和快速的規則,但通常與多對多的關係,你更喜歡引用而不是嵌入。這並不意味着您的數據完全平坦/正常化。

例如,您可以擁有包含項目標識數組的用戶文檔。你可能會對項目有相反的看法。

想想你的問題以及你將如何構建它們。這可以爲您提供有關如何構建文檔的其他提示。

+0

我喜歡用於理解NoSQL基本數據建模的一個資源,它是由Microsoft發佈的題爲「爲NoSQL文檔數據庫建模數據」的視頻。它在YouTube上上傳了好幾份。 – Hod

相關問題