我正在尝试通过在我已经从事过的项目中替换我的 RDBMS 来学习 RavenDB,以便在真实情况下使用它。我在尝试创建数据库时陷入停顿,我很想知道在文档数据库中建模的最佳方法。我提出的每一种可能性要么最终看起来像一个关系数据库,要么最终重复大量信息。重复数据库中的信息没什么大不了的,但是在发生更改时保持所有信息都是最新的。
我希望我被困在 SQL 模式中,我完全看不到一个明显的答案。
以下是我需要记录数据的基本对象:
-Event
-Person
-Organization
-Cabin
简单的要求:
-一个人可以是多个组织的一部分。
- 一个组织可以有很多成员(人)。
-一个人可以参加多个活动。
- 一个活动有很多人参加。
-关于小屋的一些细节可能会根据活动(例如住宿)而改变。
复杂的要求:
-我需要能够为一个活动预订小屋,这样一个小屋就不会同时被两个活动使用。(使用 RDBMS 我只会创建一个“EventCabins”表)。
-我需要能够记录哪些人正在参加活动。参加活动的人将拥有与他们相关的信息,这些信息不属于人员或活动的一部分。
-我需要能够记录哪些组织正在参加活动。参加的组织将拥有与他们相关的信息,这些信息不属于组织或活动的一部分。
-我需要能够记录哪些人被分配到哪个
特定事件中的小屋。
-我需要能够记录哪些人作为组织的一部分参加特定活动(不需要作为组织的一部分参加)。即使一个人可以属于多个组织,他/她也只能作为其中一个组织的一部分参加特定活动。他/她可能会作为不同组织的一员参加另一个活动。-在程序中,用户一次只能查看一个事件。在这种情况下,用户可以查看按客舱分组或按组织分组的参加者。
很明显,我需要单独的Events、People、Organizations和Cabins集合。满足上述复杂要求是我碰壁的地方。
我是否将参加者放入事件集合中?如果是这样,那么我该如何处理客舱和组织?
我是否为参加者创建单独的集合?如果是这样,那么我将需要存储 4 个不同的相关集合,并在不同时间(组织、小屋、事件、人员)进行查询。这似乎与文档数据库方法相反。
谢谢!