Domanda

sto cercando pareri su come modellare un grafo orientato che contiene un nodo speciale.

nodo speciale:

  1. non può avere alcuna bordi che conduce ad esso.
  2. non può essere rimosso.

disegno corrente:

Tabelle: nodi, bordi. Bordi contiene due colonne; from_node_id e to_node_id, ogni riferimento a un record nella tabella di nodi.

Invece di memorizzare il nodo speciale come il primo record nella tabella Nodi, ho deciso di non tenere un registro per esso a tutti, costruendo separatamente da qualsiasi query di database. Nella tabella Bordi, NULL assume un significato speciale nella colonna from_node_id, riferendosi al nodo centrale.

La mia motivazione per l'utilizzo di questo progetto era che non avrei dovuto preoccuparsi di proteggere un record nodo centrale dalla cancellazione / modifica o si fa riferimento nella colonna to_node_id della tabella bordi. Ciò anche impedire automaticamente un bordo di andare da e allo stesso nodo. Mi rendo conto che ci sono alcuni svantaggi di questo progetto, come ad esempio non essere in grado di fare from_node_id e to_node_id una chiave primaria composta, e probabilmente molti di più.

Attualmente sto appoggiato verso rendere il nodo centrale un record vero e proprio e la creazione di controlli per quel nodo nei metodi di database relativi. Qual è il modo migliore per andare su questo progetto?

È stato utile?

Soluzione

Vedo alcuni argomenti contro l'uso di NULL in questo caso.

  1. Se i nodi contengono dati effettivi si dovrà dati hard-code per il nodo centrale nell'applicazione.
  2. Non ci saranno problemi se il nodo centrale può essere modificata.
  3. Il significato usuale di NULL è che non v'è alcun valore o il valore è sconosciuto. A causa di questa un'altra persona che si avvicina al disegno proposto potrebbe trovare poco intuitivo.

In altre parole io preferirei avere riga nel database per il nodo centrale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top