如何在数据库中模拟图形

2024-05-29 03:06:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网站,模拟课程依赖性如下: courses dependencies

我发现network model是最好的模型或我的案例,但我还没有在RDBMS中找到任何实现。你知道吗

  • 我现在使用的是相邻列表,但它在某些场景中存在问题,性能很差。你知道吗
  • 我读过关于修改的预序遍历树,但它在树而不是图中很有用

那么我如何在数据库中模拟图形呢?你知道吗


Tags: 模型数据库图形列表model网站场景network
1条回答
网友
1楼 · 发布于 2024-05-29 03:06:05

一个天真的Django模型可能看起来像这样:

from django.db import models

class Graph(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()

class Node(models.Model):
    name = models.CharField(max_length=100)
    graph = models.ForeignKey(Graph, on_delete=models.CASCADE)

class Edge(models.Model):
    name = models.CharField(max_length=100)
    graph = models.ForeignKey(Graph, on_delete=models.CASCADE)
    from_node = models.ForeignKey(Node, on_delete=models.CASCADE, related_name="from_node")
    to_node = models.ForeignKey(Node, on_delete=models.CASCADE, related_name="to_node")

这允许您存储任意图形信息。在您的例子中,节点将是课程,边将是依赖项。对于处理这些信息,关系数据库不是理想的工具。也许您可以通过查询整个图形来最小化查询,并使用与图形相关的工具(例如NetworkX)来处理这些数据。你知道吗

我想指出的这个模型的另一个问题是,通常可以存储从一个图到另一个图的边。此外,还必须考虑其他与图相关的属性,如重复边或循环。你知道吗

相关问题 更多 >

    热门问题