我试图通过在我已经处理过的项目中替换我的RDBMS来学习RavenDB,以便我在实际情况下使用它。我在尝试创建数据库时陷入停顿,我想知道在文档数据库中对此进行建模的最佳方法。我提出的每一种可能性最终都看起来像一个关系数据库,或最终重复大量的信息。重复数据库中的信息并不是什么大问题,但在发生更改时保持最新状态。
我希望我陷入SQL模式,我完全无法看到明显的答案。
以下是我需要记录数据的基本对象:
-event
-Person
- 组织
-Cabin
简单要求:
- 人可以是多个组织的一部分
- 组织可以有许多成员(人)
- 人可以参加多个活动
- 活动有很多人参加
- 有关小屋的一些细节可能会根据活动而变化(例如住宿)。
复杂要求:
- 我需要为活动预留小屋,这样一次就不会有两个活动使用单个小屋。 (使用RDBMS我只会创建一个“EventCabins”表)
- 我需要能够记录哪些人正在参加活动。参加活动的人将获得与他们相关的信息,这些信息不属于人或事件的一部分
- 我需要能够记录哪些组织正在参加活动。参加的组织将拥有与其相关的信息,这些信息不属于组织或活动的一部分
- 我需要能够在特定事件中记录哪些人被分配到小屋。
- 我需要能够记录哪些人作为组织的一部分参加特定活动(不需要作为组织的一部分参加)。即使一个人可以属于多个组织,他/她也只能作为特定事件的其中一个组织的一部分参加。他/她可能作为另一个组织的一部分参加另一个活动。
- 在程序中,用户一次只能查看一个事件。在这种情况下,用户可以查看按客舱分组或按组织分组的出席者。
很明显,我需要为活动,人,组织和小组单独收集。满足上述复杂要求是我遇到的问题。
我是否将 Attenders 置于事件集合中?如果是这样,那么我如何处理小屋和组织?
我是否为Attenders创建了一个单独的集合?如果是这样,那么将有4个不同的相关集合,我将需要在不同时间(组织,小屋,事件,人)存储ID和查询。这似乎与文档数据库方法相反。
谢谢!
答案 0 :(得分:0)
在我看来,你应该只为这个项目使用关系数据库。 如果你想使用RavenDB,我建议对所有这些对象使用完全分离的集合,但保留对其他文档的引用。然后,您可以使用.Include功能查询数据库。最好的方法 - 为所有可能的情况创建map / reduce indecies,比如为所有受邀人员填充事件的索引返回对象。