我可以使用SQLite对任意图(即带有循环的逻辑映射)建模吗?

我可以使用SQLite对任意图(即带有循环的逻辑映射)建模吗?,sqlite,database-design,data-modeling,Sqlite,Database Design,Data Modeling,我是SQL新手,学习了邻接列表、嵌套集、闭包表,但据我所知,这些解决方案通常适用于非循环数据 我知道这类问题可能更适合像Neo4j这样的图形数据库引擎,我也在探索这一点。但是对于这个问题,我特别想知道我是否可以在SQLite中实现这个目标 在给出可能的答案之前,请帮助我理解如何更好地定义或说明问题。一旦问题的定义被细化,然后给我指出正确的方向(技术、参考资料),让我试着找出它 目标: 维护区域列表及其连接方式 区域可以有不同的类型:国家、公路、州、城市、社区 区域可以循环连接(无方向) 区域可以

我是SQL新手,学习了邻接列表、嵌套集、闭包表,但据我所知,这些解决方案通常适用于非循环数据

我知道这类问题可能更适合像Neo4j这样的图形数据库引擎,我也在探索这一点。但是对于这个问题,我特别想知道我是否可以在SQLite中实现这个目标

在给出可能的答案之前,请帮助我理解如何更好地定义或说明问题。一旦问题的定义被细化,然后给我指出正确的方向(技术、参考资料),让我试着找出它

目标:

  • 维护区域列表及其连接方式
  • 区域可以有不同的类型:国家、公路、州、城市、社区
  • 区域可以循环连接(无方向)
  • 区域可以有多个出口
  • 在区域内,维护从一个出口到另一个出口的加权列表
  • 提取从一个区域到另一个区域的最佳路径(从该邻域到最近的公路)
  • 假设:

  • 将使用SQLite 3(最新版本)
  • 小型数据集(<1000个区域和连接,<5s DB创建)
  • 相对静态(<5次插入或更新/年)
  • 从头开始重新创建数据库可能比更新更简单
  • 公路是区域,而不是连接线
  • 街道是逻辑连接线,没有长度,没有重量
  • 区域和连接就像一个有多个门的多个房间的房子。门与房间相连。没有穿过门的横向重量。选择门时的权重来自门之间的距离。走廊就像一扇延伸的门,所以它有重量,被认为是一个典型的房间。一个房间可能有很大的尺寸,但如果只有两扇门彼此靠近,它的重量可能会很小。对我来说,重要的不是房间的大小,而是门与门之间的距离


    一如既往,感谢您抽出时间阅读并提出建设性意见。

    是的,可以使用SQLite存储此类数据。 这是不实际的,您可能会有性能问题。如果您计划存储大量这样的数据,并且想要一个可伸缩性好的解决方案,那么您应该选择一些graph DB

    如果要存储约1000个节点,那么可以在SQLite中使用简单的不动产

    特别是因为更新次数很少,所以可以预先计算距离。因此,您不必每次都重新计算它,只需从数据库加载即可

    我认为你应该用图表来表示你的问题

    节点可以是“门”和它们之间距离的边。 您可以轻松地将其存储在关系数据库中。(区域(Id,名称),门(Id,区域1,区域2)门距离(门1,门2,距离))

    如果已存储这些数据,则可以计算从每个门到其他门的最短路径。您可以将其存储在新表中。(距离(门1、门2、路径、距离))

    要计算最短路径,您可以找到不同的算法:

    在此之后,您将获得每对门之间的最短路径

    从现在起唯一的问题是从你的出发地到你的目的地的哪个门

    如果你不想这么精确,你就选一条最短的路。否则,您必须保持与区域起点的门距离。 A.您可以假设从区域的中心开始,因此可以存储与中心的门距离 B通过存储精确的门位置并计算从精确起点到门的距离,可以更精确

    在这两种情况下,您都应该在起始区域和目标区域选择成本最低的门:

    总成本:(步行到门的距离)+(起始门到目的地的门路径)+(在目的地区域步行到目的地)


    我会这样做。我希望我能帮忙,玩得开心

    有多种方法可以对这种图形进行建模。请说明您将在某些编程语言中使用的数据结构。