Question

Je cherche des opinions sur la façon de modéliser un graphe orienté qui contient un nœud spécial.

noeud spécial:

  1. ne peut avoir des bords qui y mène.
  2. Ne peut pas être supprimé.

Poste actuel:

Tables: noeuds, arêtes. Les bords contient deux colonnes; from_node_id et to_node_id, faisant référence à chacun d'un enregistrement dans la table des nœuds.

Plutôt que de stocker le noeud spécial comme le premier enregistrement de la table des nœuds, j'ai décidé de ne pas tenir un dossier pour du tout, la construction séparément de toutes les requêtes de base de données. Dans le tableau Edges, NULL prend une signification particulière dans la colonne from_node_id, se référant au nœud central.

Ma motivation pour l'utilisation de cette conception est que je ne serais pas à vous soucier de la protection d'un enregistrement de nœud central de la suppression / modification ou référencée dans la colonne to_node_id de la table Edges. Cela permettrait également d'éviter automatiquement un bord d'aller de et vers le même nœud. Je sais qu'il ya quelques inconvénients à cette conception, comme ne pas être en mesure de faire from_node_id et to_node_id une clé primaire composite, et probablement beaucoup plus.

Je penche actuellement à faire le nœud central d'un enregistrement réel et la création de chèques pour ce noeud dans les méthodes de base de données pertinentes. Quelle est la meilleure façon d'aller sur cette conception?

Était-ce utile?

La solution

Je vois des arguments contre l'utilisation de NULL dans ce cas.

  1. Si les noeuds contiennent des données réelles que vous auriez à données coder en dur pour le nœud central dans l'application.
  2. Il y aura des problèmes si le noeud central peut être modifié.
  3. La signification habituelle de NULL est qu'il n'y a pas de valeur ou la valeur est inconnue. En raison de cette autre personne qui approche de la conception proposée pourrait trouver unintuitive.

En d'autres termes, je préférerais avoir rangée dans la base de données pour le nœud central.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top