我正在寻求关于如何建模包含一个特殊节点的有向图的意见。
特殊节点:
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. 不能有任何指向它的边。 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 作为复合主键,可能还有更多。
我目前倾向于使中心节点成为实际记录,并在相关数据库方法中创建该节点的检查。如何进行这种设计最佳?