2013-04-23 77 views
1

我想通过在我已经开发的项目中替换RDBMS来学习RavenDB,以便在真实情况下使用它。我试图创建数据库时陷入了僵局,我很想知道在文档数据库中建模的最佳方法。我想出的每一种可能性最终都会看起来像一个关系数据库,或者最终重复大量的信息。重复数据库中的信息并不是什么大不了的事情,但是如果发生变化,保持最新的信息就是最新的。RavenDB复杂模型

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

这里有我需要记录的数据为基本对象:
- 活动
-Person
- 组织
-Cabin

简单要求:
-A 可以是部分多个组织
-An 组织可以有许多成员()。
-A 可以参加多个事件
-An 事件有很多参加。
- 有关客舱的一些细节可能会因事件(例如住宿)而异。

复杂的要求:
-I需要能够保留事件这样在一次单舱不使用两个事件。 (使用RDBMS我只需创建一个“EventCabins”表)。
- 我需要能够记录哪些人正在参加事件。参加活动的人员将获得与他们相关的信息,这些信息不属于人员或活动的一部分。
- 我需要能够记录哪个组织组织正在参加事件。参加的组织将拥有与其不相关的信息,而不属于组织或事件。
- 我需要能够记录哪个分配给哪个小屋在特定事件中。
-I需要能够记录哪些人们出席为组织的一部分的特定事件(它不要求出席作为一个组织的一部分)。即使一个人可以属于多个组织,他/她也只能作为其中一个组织的一部分参加特定活动。他/她可能会作为另一个组织的一部分参加另一个活动。 - 在程序中,用户一次只能查看一个事件。在这种情况下,用户可以查看按舱位分组或按组织分组的分组。

似乎很明显,我需要单独收集的活动人民组织,并小屋。满足上面的复杂要求就是我撞墙的地方。

难道我把参加者里面的事件集合?如果是这样,那么我怎么处理舱室和组织?

我是否为参加者创建单独的集合?如果是这样,那么将有4个不同的相关集合,我需要在不同时间存储ID并进行查询(组织,小屋,活动,人员)。这似乎与文档数据库方法相反。

谢谢!

回答

0

在我看来,你应该只用这个项目的关系数据库。 如果你想使用RavenDB,我会建议为所有这些对象使用完全分离的集合,但保留对其他文档的引用。然后你可以使用.Include功能查询数据库。最好的方法是为所有可能的情况创建map/reduce indecies,比如一个返回对象的索引充满了所有被邀请的人。