Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 存储分层数据的可能选项_Database Design_Hierarchical - Fatal编程技术网

Database design 存储分层数据的可能选项

Database design 存储分层数据的可能选项,database-design,hierarchical,Database Design,Hierarchical,我们需要能够将各种类型的实体映射到web应用程序中不同类型的层次数据。作为一个例子,考虑一个名为“强>供应商的实体。我们需要能够将供应商的每个实例映射到地理区域。地理区域具有以下层次结构: 邮政编码-最精细的地理区域;例如,EC2 地点-由邮政编码组成;例如,肯辛顿。每个邮政编码将仅是一个地区的一部分,不再是 城镇——由地方组成;例如伦敦。每个地方都将是一个城镇的一部分,不再是了 地区——由城镇组成;例如,哥伦比亚大学 省-由地区组成(在某些国家相当于一个州);例如,南卡罗来纳州 区域——由省份

我们需要能够将各种类型的实体映射到web应用程序中不同类型的层次数据。作为一个例子,考虑一个名为“强>供应商的实体。我们需要能够将供应商的每个实例映射到地理区域。地理区域具有以下层次结构:

  • 邮政编码-最精细的地理区域;例如,EC2
  • 地点-由邮政编码组成;例如,肯辛顿。每个邮政编码将仅是一个地区的一部分,不再是
  • 城镇——由地方组成;例如伦敦。每个地方都将是一个城镇的一部分,不再是了
  • 地区——由城镇组成;例如,哥伦比亚大学
  • 省-由地区组成(在某些国家相当于一个州);例如,南卡罗来纳州
  • 区域——由省份组成;例如,东北省
  • 国家-由地区组成
  • 由国家组成的区域;例如东南亚
  • 大陆-由地带组成
  • 我们有一个完整的邮政编码、地区、城镇、地区、省、地区、国家、地区和大陆数据库。它目前以表的形式存在于RDBMS中

    我们的用例:

  • 能够在任何级别将供应商与多个地理位置相关联。例如,我们可以将雀巢映射到欧洲大陆(一个区域)、加利福尼亚(一个美国省份)和大伦敦(一个英国地区)
  • 能够从映射中排除地理的某些部分。例如,在将雀巢映射到加利福尼亚州时,我们可能希望将圣地亚哥排除在外
  • 如果地理位置的组成发生变化,则不需要对地理位置所属的映射进行任何更改。例如,如果将邮政编码添加到大伦敦,则与雀巢的映射不需要更改
  • 能够查询数据库中的供应商和地理级别。例如,如果我们在数据库中查询雀巢和邮政编码,我们应该得到大伦敦、加利福尼亚州(减去圣地亚哥的邮政编码)和欧洲大陆的所有邮政编码。如果我们查询雀巢和国家的数据库,我们应该得到英国(大伦敦的国家)、美国和欧洲大陆的所有国家
  • 有许多这样的映射与许多不同类型的层次数据,这只是一个要求


    寻找关于存储分层数据和映射的建议。请不要发布涉及在RDBMS表中存储数据和映射的答案,因为我已经知道使用RDBMS的选项。

    我知道您不是在寻找RDBMS解决方案,因为您“知道RDBMS的选项”-但您没有说明您考虑了哪些选项以及拒绝它们的原因。我相信您可能没有考虑过一个RDBMS选项,它具有数据维护量低、数据检索容易的优点

    我建议您将地理区域分组到一个具有内卷关系()的表中。这允许您将供应商覆盖范围描述为地理覆盖范围记录列表。诀窍是在尽可能高的级别记录供应商覆盖率。然后,您还可以列出保险范围的除外条款

    以下是建议的逻辑模型:

    GEOGRAPHY
    表可用于简化分层地理数据的查询


    确定特定区域的供应商覆盖范围与确认供应商在感兴趣的
    地理区域(可能是最低级别)具有
    覆盖范围
    一样容易如果您没有寻找数据库解决方案,那么这个问题是否应该与数据库设计一起标记?我没有寻找基于RDBMS的解决方案。可以有其他涉及NoSQL数据库(如Neo4j、Redis等)或分层数据库的数据库解决方案。您想避免使用关系数据库的具体原因是什么?也许您认为这不能在关系数据库中表示?正如我所提到的,我们已经在关系数据库中有了地理数据。然而,至少一些用例的性能相当差。请仔细阅读第四个用例,以了解为什么在使用常规RDBMS进行建模时性能会受到影响。@manish.in.java-如果您使用我在回答中建议的模型,您的第四个用例的性能不会很差。只要
    GEOGRAPHY
    表有一个定义项的层/级别的属性,并且层和左/右访问编号上有一个索引,那么检索就会非常快。