我发现network model是最好的模型或我的情况,但我还没有在RDBMS中找到它的任何实现。
那么如何在数据库中模拟图形呢?
答案 0 :(得分:0)
天真的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
我想指出的这个模型的另一个问题是,通常可以存储从一个图形到另一个图形的边缘。还必须考虑其他与图形相关的属性,如重复边缘或循环。