我正在寻找有关如何对包含一个特殊节点的有向图进行建模的意见。
特殊节点:
- 不能有任何边缘通向它。
- 无法删除。
当前设计:
表:节点、边。Edges 包含两列;from_node_id 和 to_node_id,每个都引用 Nodes 表中的一条记录。
我没有将特殊节点存储为 Nodes 表中的第一条记录,而是决定根本不为其保留记录,而是将其与任何数据库查询分开构建。在 Edges 表中,NULL 在 from_node_id 列中具有特殊含义,指的是中心节点。
我使用这种设计的动机是我不必担心保护中心节点记录不被删除/修改或在 Edges 表的 to_node_id 列中被引用。这也将自动阻止一条边进出同一个节点。我意识到这种设计有一些缺点,例如无法将 from_node_id 和 to_node_id 设为复合主键,可能还有更多。
我目前倾向于使中心节点成为实际记录并在相关数据库方法中为该节点创建检查。这种设计的最佳方式是什么?