Frage

Ich suche nach Meinungen darüber, wie einen gerichteten Graphen zu modellieren, die einen speziellen Knoten enthält.

Spezieller Knoten:

  1. Kann nicht irgendwelche Kanten zu ihm führen.
  2. Kann nicht entfernt werden.

Aktuelle Entwurf:

Tabellen: Knoten, Kanten. Kanten enthält zwei Spalten; from_node_id und to_node_id, die jeweils einen Datensatz in der Knoten-Tabelle verweist.

Anstatt den speziellen Knoten als der erste Datensatz in der Knotentabelle zu speichern, habe ich beschlossen, nicht einen Rekord für sie überhaupt zu halten, ist es getrennt von Datenbankabfragen zu konstruieren. In der Kanten-Tabelle nimmt NULL eine besondere Bedeutung in from_node_id Spalte, die sich auf dem zentralen Knoten.

Meine Motivation, diesen Entwurf für den Einsatz war, dass ich keine Sorgen zu machen über den Schutz eines zentralen Knoten Datensatz aus Löschung / Änderung oder wird in der to_node_id Spalte der Kanten Tabelle verwiesen. Dies würde auch automatisch eine Kante verhindern, dass die von und zu dem gleichen Knoten. Ich weiß, es gibt einige Nachteile bei dieser Konstruktion, wie nicht in der Lage zu sein from_node_id und to_node_id einen zusammengesetzten Primärschlüssel, und wahrscheinlich noch viel mehr zu machen.

Ich bin Neigung zur Zeit in Richtung der Mitte Knoten einen aktuellen Datensatz machen und Kontrollen für diesen Knoten in den entsprechenden Datenbankmethoden zu schaffen. Was ist der beste Weg, um diesen Entwurf zu gehen?

War es hilfreich?

Lösung

Ich sehe einige Argumente gegen die Verwendung von NULL in diesem Fall.

  1. Wenn Knoten Ist-Daten enthalten, die Sie auf die Festcodedaten für den zentralen Knoten in der Anwendung haben.
  2. Es wird problematisch, wenn der zentrale Knoten geändert werden kann.
  3. Die übliche Bedeutung von NULL ist, dass es kein Wert oder der Wert ist nicht bekannt. Aus diesem Grund eine andere Person, die die vorgeschlagenen Designansätze finden konnte es nicht intuitiv.

Mit anderen Worten würde ich es vorziehen Zeile in der Datenbank für den zentralen Knoten haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top