我正在创建我的实体的文档模型以存储在文档数据库(RavenDB)中.我正在建模的领域围绕着事件.事件具有来源,优先级,类别,影响级别和许多其他分类属性.在RDBMS中,我有一个事件表,其中包含优先级表的外键,类别表,影响表等,但我不知道如何在文档数据库中处理它(这是我的第一个Doc BD).
我有两种类型的参考数据:
>简单查找值:国家,州,来源,语言.属性:它们只有一个名称,但这是一个多语言系统,因此每种语言都有名称.支持的操作:创建,删除,重命名,停用和合并.
>复杂参考数据:与简单查找相同:其中一些具有许多字段,并且具有自己的业务规则和验证规则.例如,两个优先级不能具有相同的Rank值.有些具有更复杂的结构,例如,类别由子类别组成.
我应该如何将这些文档建模为(或作为其一部分)?
PS:文档数据库建模指南的链接也将受到赞赏
最佳答案 对于文档数据库到SQL数据库,处理关系是非常不同的. RavenDB文档讨论了这个
here.对于很少(如果有的话)改变的事情,你应该使用
denormalized refences.
此外,主要的RavenDB作者here对建模参考数据进行了很好的讨论.您可以扩展此示例,以便非常容易地包含每个区域设置的缩写/名称字典.这方面的一个例子,here.
回答您的具体问题:
>您可以为每个国家/州/等存储密钥,然后使用此密钥检索特定于语言环境的版本,方法是加载整个参考数据文档并执行内存中查找.
>非规范化引用将适合类别.如果必须显示名称和/或父类别,则可以包括它们.听起来实体本身很小,所以你也可以存储整个事物(并且不需要对它进行非规范化).可以复制它 – 以这种方式处理更便宜并且它不会改变,或者至少不会改变(如果它可以,你可以使用修补来更新它).这同样适用于您的其他实体.据我所知,业务规则与数据库无关,除了您必须能够运行适当的查询来强制执行它们.
更新:这是一篇描述如何处理tree structure in Raven的帖子.