2013-04-23 102 views
1

我想通過在我已經開發的項目中替換RDBMS來學習RavenDB,以便在真實情況下使用它。我試圖創建數據庫時陷入了僵局,我很想知道在文檔數據庫中建模的最佳方法。我想出的每一種可能性最終都會看起來像一個關係數據庫,或者最終重複大量的信息。重複數據庫中的信息並不是什麼大不了的事情,但是如果發生變化,保持最新的信息就是最新的。RavenDB複雜模型

我希望我陷入了SQL模式,我完全無法看到明顯的答案。

這裏有我需要記錄的數據爲基本對象:
- 活動
-Person
- 組織
-Cabin

簡單要求:
-A 可以是部分多個組織
-An 組織可以有許多成員()。
-A 可以參加多個事件
-An 事件有很多參加。
- 有關客艙的一些細節可能會因事件(例如住宿)而異。

複雜的要求:
-I需要能夠保留事件這樣在一次單艙不使用兩個事件。 (使用RDBMS我只需創建一個「EventCabins」表)。
- 我需要能夠記錄哪些人正在參加事件。參加活動的人員將獲得與他們相關的信息,這些信息不屬於人員或活動的一部分。
- 我需要能夠記錄哪個組織組織正在參加事件。參加的組織將擁有與其不相關的信息,而不屬於組織或事件。
- 我需要能夠記錄哪個分配給哪個小屋在特定事件中。
-I需要能夠記錄哪些人們出席爲組織的一部分的特定事件(它不要求出席作爲一個組織的一部分)。即使一個人可以屬於多個組織,他/她也只能作爲其中一個組織的一部分參加特定活動。他/她可能會作爲另一個組織的一部分參加另一個活動。 - 在程序中,用戶一次只能查看一個事件。在這種情況下,用戶可以查看按艙位分組或按組織分組的分組。

似乎很明顯,我需要單獨收集的活動人民組織,並小屋。滿足上面的複雜要求就是我撞牆的地方。

難道我把參加者裏面的事件集合?如果是這樣,那麼我怎麼處理艙室和組織?

我是否爲參加者創建單獨的集合?如果是這樣,那麼將有4個不同的相關集合,我需要在不同時間存儲ID並進行查詢(組織,小屋,活動,人員)。這似乎與文檔數據庫方法相反。

謝謝!

回答

0

在我看來,你應該只用這個項目的關係數據庫。 如果你想使用RavenDB,我會建議爲所有這些對象使用完全分離的集合,但保留對其他文檔的引用。然後你可以使用.Include功能查詢數據庫。最好的方法是爲所有可能的情況創建map/reduce indecies,比如一個返回對象的索引充滿了所有被邀請的人。