Pregunta

Estoy buscando opiniones sobre cómo modelar un grafo dirigido que contiene un nodo especial.

nodo especial:

  1. No se puede tener bordes que conduce a ella.
  2. No se puede quitar.

El diseño actual:

Tablas: nodos, bordes. Bordes contiene dos columnas; from_node_id y to_node_id, cada referencia a un registro en la tabla de nodos.

En lugar de almacenar el nodo especial como el primer registro en la tabla de nodos, que decidieron no llevar un registro de ello en absoluto, construyendo de forma independiente de cualquier consulta de bases de datos. En la tabla Bordes, NULL adquiere un significado especial en la columna from_node_id, en referencia al nodo central.

Mi motivación para el uso de este diseño es que yo no tendría que preocuparse por la protección de un registro de nodo central de un borrado / o modificación que se hace referencia en la columna de la mesa to_node_id bordes. Esto también impediría automáticamente una ventaja de ir desde y hacia el mismo nodo. Sé que existen algunos inconvenientes a este diseño, tales como no ser capaz de hacer from_node_id y to_node_id una clave primaria compuesta, y probablemente muchos más.

Actualmente estoy inclinando hacia el nodo central de hacer un registro real y la creación de cheques para ese nodo en los métodos de bases de datos pertinentes. Cuál es la mejor manera de ir sobre este diseño?

¿Fue útil?

Solución

Veo algunos argumentos contra el uso de NULL en este caso.

  1. Si los nodos contienen los datos reales que tendría que los datos de códigos de difícil para el nodo central en la aplicación.
  2. No habrá problemas si el nodo central se puede cambiar.
  3. El significado habitual de NULL es que no hay ningún valor o el valor es desconocido. Debido a esta otra persona que se acerca al diseño propuesto podría resultar poco intuitivo.

En otras palabras, yo preferiría tener fila en la base de datos para el nodo central.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top