用一个特殊的中心节点建模有向图

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

1
你能否对这个设计的使用进行评论? - gahooa
1个回答

2

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

  1. 如果节点包含实际数据,您将不得不在应用程序中硬编码中央节点的数据。
  2. 如果中央节点可以更改,将会出现问题。
  3. NULL的通常含义是没有值或值未知。因此,另一个接近所提出的设计的人可能会发现它不直观。

换句话说,我更喜欢在数据库中为中央节点设置行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接