El mismo Neftali había comentado tanto en su blog como en CD sobre una suite de componentes que facilita justamente esto de poner objetos, arrastrar, linkear, etc. No le recuerdo bien el nombre, pero me "suena" a que era SimpleGraph de DelphiArea.
Podrías consultarle.
Respecto a guardar esta red en la DB el enfoque más simple que yo haría es tener justamente una tabla que tenga esta estructura:
ItemDeRed:
------------------------
IDItem: PK
TipoID: FK(Elementos.IDTipo)
PosX: INTEGER
PosY: INTEGER
Siendo TipoID una clave foránea hacia el campo IDTipode una tabla TipoDeElementos. Esta tabla permite que uno defina los posibles tipos de objetos. Por ejemplo podría decirse que en tu caso sea Etiquetas, PCs, cables, etc.
PosX y PosY se entienden fácilmente que hacen referencia a la coordenada X,Y dentro del "mapa". En este punto lo que deberías considerar es donde está el punto de origen o referencia. El dilema estará en que luego a esas coordenadas deberás luego llevarlas a la coordenadas en pantalla y deberas tener funciones tipo MapCoordToScreenCoord y ScreenCoordToMapCoord para convertir de una a otra.
¿Porqué? Por dos motivos: 1) resolución de pantalla, y 2) El mapa de red posiblemente exceda visualmente lo que pueda verse en pantalla.
Por ejemplo, tu podrías estar viendo un rectángulo (supongamos que eso es una PC en tu diagrama) que internamente está en la ubicación (262, 781) pero en pantalla el centroide de éste es en pixel (440, 625).
Esto parece complicado, y en parte lo es. Pero también te independiza de que el sistema de coordenadas no sea vea atado a una resolución en particular. Por esto es fundamental que establezcas un punto de referencia (0,0) tanto a nivel de pantalla como a nivel "mapa". Esto además permite que tu puedas moverte por el mapa de forma libremente.
Gracias a este diseño de la tabla ItemDeRed tienes listado todos los objetos que tu necesites. Leyendo TipoID puedes identificar que objetos crear, y luego simplemente lo "ubicas" aplicando la conversiones.
Deberías buscar una suite como la que te comenté. Seguramente estas, ya manejan internamente algún "mapa" y te pueden facilitar muchas cosas. Es más, hasta existe la posibilidad de que incluso alguna tenga alguna funcionalidad como guardar el contenido en algún formato ya sea propio o utilizar xml (algo muy de moda en estos tipos de casos)
Podría sugerirte que explores el proyecto StarUML 1 (versión 5.algo). Es de código libre, está hecho en Delphi y tengo entendido que para concebir los objetos arrastrables y linkearlos hace uso de unos componentes. Es un proyecto ya discontinuado, su versión StarUML 2 es de código cerrado. En su defecto puedes ver los fuentes de WhiteStarUML que es el fork basado en StarUML 1 y donde se intenta mantener activo el proyecto original.
Ahora bien, si no consigues la suite que te comento, u otra similar, me parece que lo más acertado es que definas tu diseño de clases que te abstraiga el panorama y te permita tener "internamente" los objetos. Luego visualmente puedes tener TImages, etc. como vienes haciendo. Básicamente lo que te propongo es desatar la lógica de la interfaz. Es la forma más limpia de trabajar.
Creo que en otro hilo, hace un tiempo, cuando alguien expuso dudas sobre como representar un grafo, sugerí un diseño de clases para manejar el aspecto interno/lógico.
Saludos,