Database design 存储分层数据的可能选项
我们需要能够将各种类型的实体映射到web应用程序中不同类型的层次数据。作为一个例子,考虑一个名为“强>供应商的实体。我们需要能够将供应商的每个实例映射到地理区域。地理区域具有以下层次结构:Database design 存储分层数据的可能选项,database-design,hierarchical,Database Design,Hierarchical,我们需要能够将各种类型的实体映射到web应用程序中不同类型的层次数据。作为一个例子,考虑一个名为“强>供应商的实体。我们需要能够将供应商的每个实例映射到地理区域。地理区域具有以下层次结构: 邮政编码-最精细的地理区域;例如,EC2 地点-由邮政编码组成;例如,肯辛顿。每个邮政编码将仅是一个地区的一部分,不再是 城镇——由地方组成;例如伦敦。每个地方都将是一个城镇的一部分,不再是了 地区——由城镇组成;例如,哥伦比亚大学 省-由地区组成(在某些国家相当于一个州);例如,南卡罗来纳州 区域——由省份
寻找关于存储分层数据和映射的建议。请不要发布涉及在RDBMS表中存储数据和映射的答案,因为我已经知道使用RDBMS的选项。我知道您不是在寻找RDBMS解决方案,因为您“知道RDBMS的选项”-但您没有说明您考虑了哪些选项以及拒绝它们的原因。我相信您可能没有考虑过一个RDBMS选项,它具有数据维护量低、数据检索容易的优点 我建议您将地理区域分组到一个具有内卷关系()的表中。这允许您将供应商覆盖范围描述为地理覆盖范围记录列表。诀窍是在尽可能高的级别记录供应商覆盖率。然后,您还可以列出保险范围的除外条款 以下是建议的逻辑模型:
GEOGRAPHY
表可用于简化分层地理数据的查询
确定特定区域的供应商覆盖范围与确认供应商在感兴趣的
地理区域(可能是最低级别)具有覆盖范围
一样容易如果您没有寻找数据库解决方案,那么这个问题是否应该与数据库设计一起标记?我没有寻找基于RDBMS的解决方案。可以有其他涉及NoSQL数据库(如Neo4j、Redis等)或分层数据库的数据库解决方案。您想避免使用关系数据库的具体原因是什么?也许您认为这不能在关系数据库中表示?正如我所提到的,我们已经在关系数据库中有了地理数据。然而,至少一些用例的性能相当差。请仔细阅读第四个用例,以了解为什么在使用常规RDBMS进行建模时性能会受到影响。@manish.in.java-如果您使用我在回答中建议的模型,您的第四个用例的性能不会很差。只要GEOGRAPHY
表有一个定义项的层/级别的属性,并且层和左/右访问编号上有一个索引,那么检索就会非常快。