如何在文档数据库模型中为“参考数据”建模?

Syl*_*ain 5 nosql document-database ravendb

我正在创建我的实体的文档模型以存储在文档数据库 (RavenDB) 中。我正在建模的领域围绕Incidents. 事件具有来源、优先级、类别、影响级别和许多其他分类属性。在 RDBMS 中,我有一个事件表,其中包含优先级表、类别表、影响表等的外键,但我不知道如何在文档数据库中处理它(这是我的第一个 Doc BD)。

我有两种类型的参考数据:

  1. 简单的查找值:Countries, States, Sources, Languages。属性:它们只有一个名称,但这是一个多语言系统,因此每种语言都有名称。支持的操作:创建、删除、重命名、停用和合并。

  2. 复杂参考数据:与 Simple Lookups 相同,另外:其中一些有很多字段,并且有自己的业务规则和验证规则。例如,两个Priorities不能具有相同的Rank值。有些具有更复杂的结构,例如CategoriesSubcategories.

我应该如何将它们建模为(或作为文档的一部分)?


PS:文档数据库建模指南的链接也将不胜感激

geo*_*osd 3

文档数据库与 SQL 数据库的关系处理非常不同。RavenDB 文档在此讨论了这一点。对于很少(如果有的话)改变的事情,您应该使用非规范化引用

此外,RavenDB 主要作者在此处对参考数据建模进行了很好的讨论。您可以轻松扩展此示例以包含每个区域设置的缩写/名称字典。一个例子,在这里

回答您的具体问题:

  1. 您可以为每个国家/州/等存储一个密钥,然后通过加载整个参考数据文档并执行内存中查找,使用该密钥检索特定于区域设置的版本。
  2. 非规范化引用非常适合类别。如果必须显示,您可以包含名称和/或父类别。听起来实体本身很小,所以您也可以存储整个实体(并且不需要对其进行非规范化)。复制它是可以的——以这种方式处理更便宜,并且它不会改变,或者至少不会经常改变(如果改变了,你可以使用补丁来更新它)。这同样适用于您的其他实体。据我所知,业务规则与数据库无关,除了您必须能够运行适当的查询来强制执行它们之外。

更新:这是一篇描述如何处理Raven 中的树结构的文章。