1

我正在尝试通过在我已经从事过的项目中替换我的 RDBMS 来学习 RavenDB,以便在真实情况下使用它。我在尝试创建数据库时陷入停顿,我很想知道在文档数据库中建模的最佳方法。我提出的每一种可能性要么最终看起来像一个关系数据库,要么最终重复大量信息。重复数据库中的信息没什么大不了的,但是在发生更改时保持所有信息都是最新的。

我希望我被困在 SQL 模式中,我完全看不到一个明显的答案。

以下是我需要记录数据的基本对象: -Event
-Person -Organization -Cabin


简单的要求:
-一个人可以是多个组织的一部分。
- 一个组织可以有很多成员()。
-一个人可以参加多个活动
- 一个活动有很多参加。
-关于小屋的一些细节可能会根据活动(例如住宿)而改变。

复杂的要求:
-我需要能够为一个活动预订小屋,这样一个小屋就不会同时被两个活动使用。(使用 RDBMS 我只会创建一个“EventCabins”表)。 -我需要能够记录哪些正在参加活动。参加活动的人将拥有与他们相关的信息,这些信息不属于人员或活动的一部分。 -我需要能够记录哪些组织正在参加活动。参加的组织将拥有与他们相关的信息,这些信息不属于组织或活动的一部分。 -我需要能够记录哪些被分配到哪个


特定事件中的小屋。
-我需要能够记录哪些人作为组织的一部分参加特定活动(不需要作为组织的一部分参加)。即使一个人可以属于多个组织,他/她也只能作为其中一个组织的一部分参加特定活动。他/她可能会作为不同组织的一员参加另一个活动。-在程序中,用户一次只能查看一个事件。在这种情况下,用户可以查看按客舱分组或按组织分组的参加者。

很明显,我需要单独的EventsPeopleOrganizationsCabins集合。满足上述复杂要求是我碰壁的地方。

我是否将参加者放入事件集合?如果是这样,那么我该如何处理客舱和组织?

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

谢谢!

4

1 回答 1

0

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

于 2013-08-18T10:44:03.577 回答