我正在构建一个应用程序,我将在其中存储与产品、位置和时间维度相对应的一些事实。例如,特定产品 P1 在特定月份 T1 在商店 S1 销售了 10 件。所有维度都将具有层次结构的级别 - 例如 -时间维度的年/月/周/日。每个级别的成员(不确定成员是否是正确的词)在它们之间也将具有层次结构 - 例如 - 2014/Sep/1st Week/3rd Sep,当然这个层次结构与相应级别之间的层次结构相匹配。其他维度的情况类似。通过表示分层数据的选项,实现此结构本身有点困难并且选择应该由插入/更新/删除与选择的数据的频率和数量决定。我可以做一些研究并为我的案例选择最优化的解决方案。
然而,我目前面临的真正困难是对事实数据所在的替代空间进行建模。参考我上面引用的示例,假设 P1 是层次结构Category/Subcategory/Article中的产品维度级别“Article”的成员,而 S1 是层次结构Country/City/Store中的商店维度级别“Store”的成员. 现在假设商店 S1 在 T1 月不保留商品 P1,我们使用标志 IS_ACTIVE 表示此决定。也就是说,IS_ACTIVE=N 是一个事实,它的上下文是 {P1,S1,T1}。还要注意 IS_ACTIVE 是属性,N 是它的值。然而这个上下文 {P1,S1,T1} 本身是元上下文 {Article, Store, Month} 的一个实例。而且我还需要将这个元上下文存储在应用程序中。原因是应用程序中可能有一个地方我可能需要获取与元上下文 {Article, Store, Month} 对应的其他可能属性的列表(例如,REBATE_OFFERED_PERCENT)。
我已经为这一切找到了一个规范化的关系模式设计,但它太复杂了,在我看来不会是高性能的。我正在寻找一种替代解决方案,例如 NoSQL 数据库,它可以满足我的需求,因为这里涉及到一些层次结构。或者,我的问题域是否更适合关系模式设计?
这似乎是一个应该出现在多个域中的标准问题,但我找不到任何关于此的文章。另外,抽象数学中是否有与这个问题相关的分支?是否有描述此类问题的标准术语?在实施解决方案之前,我愿意阅读一些理论。