Modella un grafo orientato con uno speciale nodo centrale
-
19-09-2019 - |
Domanda
sto cercando pareri su come modellare un grafo orientato che contiene un nodo speciale.
nodo speciale:
- non può avere alcuna bordi che conduce ad esso.
- 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?
Soluzione
Vedo alcuni argomenti contro l'uso di NULL in questo caso.
- Se i nodi contengono dati effettivi si dovrà dati hard-code per il nodo centrale nell'applicazione.
- Non ci saranno problemi se il nodo centrale può essere modificata.
- 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.