2009-07-24 8 views
3

私は、1つの特別なノードを含む有向グラフをモデル化する方法に関する意見を探しています。特別なセンターノードを持つ有向グラフのモデリング

特別ノード:

  1. は、それにつながるすべてのエッジを持つことはできません。
  2. 取り外しできません。

現在の設計:

テーブル:ノード、エッジ。エッジには2つの列があります。 from_node_idおよびto_node_idは、それぞれNodesテーブルのレコードを参照します。

Nodesテーブルの最初のレコードとして特別なノードを格納するのではなく、データベースのクエリとは別にレコードを作成しないようにしました。エッジ表では、NULLはfrom_node_id列で特別な意味を持ち、センターノードを参照します。

このデザインを使用する私の動機は、センターノードレコードを削除/変更から保護すること、またはエッジテーブルのto_node_id列で参照することを心配する必要がないということでした。これにより、エッジが同じノードに出入りするのを自動的に防止します。このデザインには、from_node_idとto_node_idを合成プライマリ・キーにすることができないなど、いくつかの欠点があります。

私は現在、センターノードを実際のレコードにして、関連するデータベースメソッドでそのノードのチェックを作成することに傾いています。このデザインについての最善の方法は何ですか?

+1

このデザインの使用方法についてコメントできますか? – gahooa

答えて

2

この場合、NULLを使用することについていくつかの議論があります。

  1. ノードに実際のデータが含まれている場合は、アプリケーションの中央ノードのデータをハードコードする必要があります。
  2. 中央ノードを変更できる場合は問題が発生します。
  3. NULLの通常の意味は、値が存在しないか、値が不明であることです。このため、提案されたデザインに近づく別の人は直感的ではありません。

つまり、中央ノードのデータベースに行があることをお勧めします。

関連する問題