2013-12-23 46 views
-1

讓我們考慮一個情況下,我們在三個層面什麼對子級是MySQL的關係

有服務
Rose 
     -red rose 
       - red rose by A dealer 
       - red rose by B dealer 
     -yellow rose 
       - yellow rose by A dealer 
       - yellow rose by B dealer 

那麼這將是創建表之間的數據庫關係理想的方案:

我想創建數據庫產品和服務/口味的結構。例如可以說,玫瑰是我的產品,那麼紅玫瑰,黃玫瑰,黑玫瑰是我的服務,由經銷商進一步紅玫瑰和B經銷商的紅玫瑰是我的進一步服務......在這種情況下,我將如何在mongodb 。

+1

您已將此問題標記爲mysql和mongodb。這兩個數據庫在處理關係方面差別很大。一個在一箇中運行良好的模式在另一個模式中可能效果不佳。 – Philipp

+0

是的,但你可以回答考慮任何他們我會解釋它。 – Anubhav

+1

你的問題是如果你正在做正確的實現,但我沒有看到任何實現。什麼是產品和服務,它們是如何相互關聯的?這些表中的字段是什麼?還要記住,MongoDB是一個基於文檔的數據庫,而不是關係數據庫,在跳入NoSQL之前,這是一個非常重要的事情。 – rednaw

回答

1

您的數據似乎是相關的。 MongoDB不是一個關係數據庫。這意味着你不能在你的數據中創建關係。如果你想使用MongoDB,你必須自己創建數據之間的關係。如果這是值得的,那取決於你。大多數人選擇MongoDB的速度,但是當你的數據非常依賴關係時,MongoDB可能根本沒有幫助你。

所以,如果你要在MongoDB中創建這個結構,你將有三個不同的集合:roses,flavorsdealers。如果你想獲得某種特定風格的玫瑰和某個經銷商,你必須執行3個單獨的查詢,然後將3個結果結合在一起,在mysql中你可以執行1個查詢,得到1個結果。請注意,這種差異隨着每一層關係而變大。

如果你的集合真的很大,並且可能需要對它進行復雜的過濾,那麼單獨進行MongoDB查詢最後還是可能更快。你應該記住,它不是免費的午餐,與關係型數據庫相比,你會有一個完全不同的設置,你應該真的考慮一下。

爲了提高速度,您還可以考慮在關係數據庫之上添加一個緩存層,實際上您可以使用它來使用MongoDB。

+0

謝謝...我正在尋找這個答案... – Anubhav

+0

我爲此得到了低估,有人能解釋爲什麼嗎? – rednaw

+0

我能想到的一件事是,基於查詢和結果的速度估計並不完全準確,這是一種SQL-即思考事物的方式。在現實中,3個查詢可以與其中的一樣快,並且由於不需要創建結果集或通過IO等將結果輸出,所以具有較少的頭部。 – Sammaye