我们需要能够将各种类型的实体映射到 Web 应用程序中不同类型的分层数据。例如,考虑一个名为Vendor的实体。我们需要能够将供应商的每个实例映射到地理区域。地理区域在以下层次结构中:
- 邮政编码 - 最细化的地理区域;例如,EC2
- 地区 - 由邮政编码组成;例如,肯辛顿。每个邮政编码将完全属于一个地区,仅此而已。
- 城镇 - 由地方组成;例如伦敦。每个地方都将成为一个城镇的一部分,仅此而已。
- 区 - 由城镇组成;例如,哥伦比亚。
- 省 - 由地区组成(在某些国家相当于州);例如,南卡罗来纳州。
- 地区 - 由省份组成;以东北省为例。
- 国家 - 由地区组成。
- 区域 - 由国家组成;以东南亚为例。
- 大陆 - 由区域组成。
我们有一个完整的邮政编码、地区、城镇、地区、省、地区、国家、地区和大洲的数据库。这当前作为 RDBMS 中的表存在。
我们的用例:
- 能够在任何级别将供应商与多个地区相关联。例如,我们可以将雀巢映射到欧洲大陆(一个区域)、加利福尼亚(美国的一个省)和大伦敦(英国的一个地区)。
- 能够从映射中排除地理的某些部分。例如,当将Nestle映射到California时,我们可能想要排除San Diego。
- 如果地理的构成发生变化,则不应要求对该地理所属的映射进行任何更改。例如,如果将邮政编码添加到Greater London ,则与雀巢的映射不需要更改。
- 能够在数据库中查询供应商和地理级别。例如,如果我们查询雀巢和邮政编码的数据库,我们应该得到大伦敦、加利福尼亚(减去圣地亚哥的邮政编码)和欧洲大陆的所有邮政编码。如果我们查询雀巢和国家的数据库,我们应该得到英国(大伦敦的国家)、美国和欧洲大陆的所有国家。
有许多这样的映射与许多不同类型的分层数据,这只是要求之一。
寻找有关存储分层数据和映射的建议。请不要发布涉及在 RDBMS 表中存储数据和映射的答案,因为我已经知道使用 RDBMS 的选项。