Mysql 具有特殊中心节点的有向图建模

Mysql 具有特殊中心节点的有向图建模,mysql,database-design,directed-graph,Mysql,Database Design,Directed Graph,我正在寻找关于如何对包含一个特殊节点的有向图建模的意见 特殊节点: 不能有任何边指向它 无法删除 当前设计: 表:节点、边。边包含两列;from_node_id和to_node_id,每个都引用节点表中的一条记录 我没有将特殊节点存储为Nodes表中的第一条记录,而是决定根本不为其保留记录,将其与任何数据库查询分开构建。在Edges表中,NULL在from_node_id列中具有特殊含义,表示中心节点 我使用这种设计的动机是,我不必担心中心节点记录会被删除/修改或在Edges表的to_node_

我正在寻找关于如何对包含一个特殊节点的有向图建模的意见

特殊节点:

  • 不能有任何边指向它
  • 无法删除
  • 当前设计:

    表:节点、边。边包含两列;from_node_id和to_node_id,每个都引用节点表中的一条记录

    我没有将特殊节点存储为Nodes表中的第一条记录,而是决定根本不为其保留记录,将其与任何数据库查询分开构建。在Edges表中,NULL在from_node_id列中具有特殊含义,表示中心节点

    我使用这种设计的动机是,我不必担心中心节点记录会被删除/修改或在Edges表的to_node_id列中被引用。这也会自动防止边从同一节点进出。我意识到这种设计有一些缺点,比如不能将from_node_id和to_node_id作为复合主键,可能还有更多


    我目前倾向于将中心节点作为实际记录,并在相关数据库方法中为该节点创建检查。这种设计的最佳方式是什么?

    我看到一些反对在这种情况下使用NULL的论点

  • 如果节点包含实际数据,则必须为应用程序中的中心节点硬编码数据
  • 如果可以更改中心节点,则会出现问题
  • NULL的通常含义是没有值或值未知。因此,另一个接近拟议设计的人可能会发现它不直观

  • 换句话说,我更希望在数据库中为中心节点设置行。

    您能对这种设计的用法发表意见吗?