Mastering Fiber Optic GIS & Splice Loss ERDs with PlantUML

In the rapidly evolving telecommunications sector, the physical layer of the network—comprising fiber optic cables, splice points, enclosures, and support infrastructure—represents a critical asset that must be meticulously managed. As operators deploy dense fiber-to-the-home (FTTH) and 5G backhaul networks, the complexity of tracking physical assets alongside their performance metrics has become a significant operational challenge. Traditional spreadsheet-based tracking or static CAD drawings often fail to capture the dynamic relationships between geographic locations, cable routes, and the precise optical loss measurements required for network acceptance and maintenance.

Real-world system context and operational workflow illustration

This is where a robust Entity Relationship Diagram (ERD) becomes indispensable. By modeling the data structure that underpins a Fiber Optic Cable Plant GIS mapping and Splice Loss Test Record system, architects can ensure data integrity, streamline fault tracing, and enable spatial queries across the network. Using PlantUML within the VPasCode editor allows engineers to define these complex relationships as code, ensuring that the documentation evolves in lockstep with the physical network. This approach eliminates the friction of manual drawing updates and provides a living schema that can be versioned, shared, and rendered instantly.

Understanding the Model: Purpose, Scope & Problem Framing

Diagram Abstraction & Representation
This ERD serves as the logical blueprint for a database system designed to manage the lifecycle of fiber optic infrastructure. Unlike a simple inventory list, this model captures the hierarchical nature of the cable plant: a Cable contains multiple Fibers, which terminate at Enclosures or Splice Points. Crucially, it also integrates the physical environment by linking these assets to GIS Geometries (latitude/longitude/shape) and Support Structures like Poles and Ducts. The inclusion of Splice Connections and Test Records adds a layer of performance data, linking specific physical joints to their optical loss measurements (in dB) and test results.

Target Domain Scope & Scenario
The scope of this diagram covers the end-to-end data flow for a telecommunications operator’s GIS and testing platform. It addresses the problem of correlating a physical fault location (e.g., a high loss event at a specific splice) with its exact geographic coordinates and the cable route it resides on. The model is designed to support operations such as tracing a fiber path from a central office to a customer premise, verifying splice quality during installation, and maintaining a historical log of all testing activities for compliance and troubleshooting.

Key Takeaways & Educational Insights
By studying this model, you will learn how to:

  • Model one-to-many relationships between physical infrastructure components (e.g., one cable containing many fibers).
  • Represent spatial data requirements using geometry attributes for GIS integration.
  • Design a junction table structure (SPLICE_CONNECTION) to handle many-to-many relationships between fibers at a splice point.
  • Link performance metrics (test records) back to specific physical entities without creating data redundancy.

Complete Diagram & Full Source Code

Below is the complete visualization of the Fiber Optic Cable Plant GIS and Splice Loss Test Record system. This diagram clearly delineates the entities, their attributes, and the cardinality of their relationships, providing a clear roadmap for database implementation.

Entity Relationship Diagram for Fiber Optic Cable Plant GIS Mapping and Splice Loss Test Record System

@startuml
!theme plain
title Fiber Optic Cable Plant GIS Mapping and Splice Loss Test Record System - ERD

/' 
Diagram Context:
This ERD models the data structure for managing a fiber optic cable plant.
It combines GIS mapping of physical infrastructure (cables, enclosures, splice points,
poles/ducts) with splice loss test records used for acceptance testing and maintenance.
The central entities are FIBER_CABLE (the physical cable route) and SPLICE_POINT
(where fibers are joined). Each cable contains multiple FIBER strands. Splices connect
two fiber ends at a splice point. Test records capture OTDR/power meter measurements
for each splice or fiber segment, including loss values and pass/fail status.
GIS coordinates are stored for cables, splice points, and enclosures to support map
visualization and spatial queries. This schema enables tracing fiber paths, tracking
splice loss history, and locating faults geographically.
'/

entity "FIBER_CABLE" as cable {
  * cable_id : INT <<PK>>
  --
  cable_name : VARCHAR
  cable_type : VARCHAR
  total_fiber_count : INT
  length_m : DECIMAL
  install_date : DATE
  status : VARCHAR
  start_enclosure_id : INT <<FK>>
  end_enclosure_id : INT <<FK>>
  route_geom : GEOMETRY
}

entity "FIBER" as fiber {
  * fiber_id : INT <<PK>>
  --
  cable_id : INT <<FK>>
  fiber_number : INT
  fiber_color : VARCHAR
  fiber_type : VARCHAR
  status : VARCHAR
}

entity "ENCLOSURE" as enclosure {
  * enclosure_id : INT <<PK>>
  --
  enclosure_name : VARCHAR
  enclosure_type : VARCHAR
  location_desc : VARCHAR
  latitude : DECIMAL
  longitude : DECIMAL
  geom : GEOMETRY
}

entity "SPLICE_POINT" as splice {
  * splice_id : INT <<PK>>
  --
  enclosure_id : INT <<FK>>
  splice_tray_no : VARCHAR
  splice_type : VARCHAR
  latitude : DECIMAL
  longitude : DECIMAL
  geom : GEOMETRY
  install_date : DATE
  status : VARCHAR
}

entity "SPLICE_CONNECTION" as spliceconn {
  * connection_id : INT <<PK>>
  --
  splice_id : INT <<FK>>
  in_fiber_id : INT <<FK>>
  out_fiber_id : INT <<FK>>
  splice_loss_db : DECIMAL
  splice_method : VARCHAR
}

entity "TEST_RECORD" as testrec {
  * test_id : INT <<PK>>
  --
  splice_id : INT <<FK>>
  fiber_id : INT <<FK>>
  test_date : DATETIME
  test_type : VARCHAR
  wavelength_nm : INT
  measured_loss_db : DECIMAL
  threshold_db : DECIMAL
  result : VARCHAR
  tester_name : VARCHAR
  otdr_trace_ref : VARCHAR
  remarks : TEXT
}

entity "DUCT_SEGMENT" as duct {
  * duct_id : INT <<PK>>
  --
  cable_id : INT <<FK>>
  duct_name : VARCHAR
  duct_type : VARCHAR
  length_m : DECIMAL
  route_geom : GEOMETRY
}

entity "POLE" as pole {
  * pole_id : INT <<PK>>
  --
  pole_code : VARCHAR
  latitude : DECIMAL
  longitude : DECIMAL
  geom : GEOMETRY
  pole_type : VARCHAR
}

entity "CABLE_POLE" as cablepole {
  * cable_pole_id : INT <<PK>>
  --
  cable_id : INT <<FK>>
  pole_id : INT <<FK>>
  sequence_no : INT
}

cable ||--o{ fiber : contains
cable }o--|| enclosure : "starts at"
cable }o--|| enclosure : "ends at"
enclosure ||--o{ splice : houses
splice ||--o{ spliceconn : has
fiber ||--o{ spliceconn : "in fiber"
fiber ||--o{ spliceconn : "out fiber"
splice ||--o{ testrec : "tested at"
fiber ||--o{ testrec : "tested on"
cable ||--o{ duct : "routed in"
cable ||--o{ cablepole : "mounted on"
pole ||--o{ cablepole : supports

@enduml

Step-by-Step Architectural Walkthrough

Phase 1: Canvas Configuration & Layout Directives

The first step in creating a professional ERD is setting the stage. We begin by declaring the diagram type and applying a specific theme to ensure visual consistency. In this case, we use the !theme plain directive to strip away complex graphical decorations, focusing the reader’s attention on the data structure and relationships. The title directive provides a clear, descriptive header for the diagram, which is essential for documentation.


@startuml
!theme plain
title Fiber Optic Cable Plant GIS Mapping and Splice Loss Test Record System - ERD

Phase 2: Declaring Core Entities, Actors, and Boundaries

Next, we define the core entities. In PlantUML, the entity keyword is used to define a table or object. Each entity block starts with the name (e.g., FIBER_CABLE) and an alias (e.g., cable) which is used for referencing in relationships. Inside the block, we define attributes. Primary Keys (PK) are marked with * and Foreign Keys (FK) with <>. Note the inclusion of GEOMETRY and DECIMAL types, which are critical for GIS and optical loss calculations.


entity "FIBER_CABLE" as cable {
  * cable_id : INT <>
  --
  cable_name : VARCHAR
  route_geom : GEOMETRY
}

We repeat this process for FIBER, ENCLOSURE, SPLICE_POINT, and other infrastructure components. The use of aliases like as fiber or as splice keeps the relationship lines concise and readable later in the diagram.

Phase 3: Mapping Data Flows & Key Interactions

With entities defined, we establish the relationships using cardinality notation. The ||--o{ syntax represents a mandatory one-to-mandatory-many relationship (or optional depending on the specific notation variant, here o{ is optional many, || is mandatory one). For example, a FIBER_CABLE must contain at least one FIBER (or can contain many). The ||--o{ syntax is used to show that a Cable contains Fibers.


cable ||--o{ fiber : contains

We also handle complex relationships. The SPLICE_CONNECTION entity acts as a junction table. It connects to SPLICE_POINT (one splice point has many connections) and links two FIBER entities (one “in” and one “out”), effectively modeling the physical act of splicing two fibers together.


fiber ||--o{ spliceconn : "in fiber"
fiber ||--o{ spliceconn : "out fiber"

Phase 4: Grouping, Annotations & Visual Polish

Finally, we add contextual information. The comment block at the top (wrapped in /' ... '/) provides a narrative description of the system’s purpose without cluttering the visual diagram with code syntax. This is vital for stakeholders who need to understand the “why” behind the data model. We also ensure that all geographic entities (ENCLOSURE, SPLICE_POINT, POLE) share a consistent attribute pattern for latitude, longitude, and geom, reinforcing the GIS theme of the diagram.

Syntax & Keyword Deep Dive

To fully leverage PlantUML for ERD creation, understanding the specific syntax used in this diagram is essential. Here are the key keywords and conventions:

  • entity: Defines a new table or entity. The syntax entity "Name" as alias { ... } allows for a display name and a shorter reference name.
  • attribute : TYPE: Defines a column. Types like INT, VARCHAR, DECIMAL, and GEOMETRY define the data constraints.
  • * (Primary Key): Preceding an attribute name with * marks it as the Primary Key (e.g., * cable_id).
  • <> (Foreign Key): Used to explicitly mark attributes that reference other tables, aiding in database normalization visualization.
  • ||--o{ (Cardinality): Represents a relationship where the left side is mandatory (one) and the right side is optional (many). The o represents the optional side, and { represents the “many” side.
  • /' ... '/ (Comment Block): Allows for multi-line text descriptions that are rendered as part of the diagram context but do not affect the logic.

Best Practices & Pitfalls to Avoid

When designing ERDs for complex infrastructure like fiber networks, keep these best practices in mind:

  1. Normalize Your Junction Tables: As seen with SPLICE_CONNECTION, avoid creating many-to-many relationships directly. Always introduce an intermediate entity to hold the specific attributes of that relationship (like splice_loss_db).
  2. Consistent Naming Conventions: Use clear, descriptive names for entities (e.g., SPLICE_POINT instead of SP) to ensure the diagram remains readable for new team members.
  3. Separate Logic from Geometry: Keep physical attributes (like length_m) and spatial attributes (like geom) distinct but clearly associated within the same entity block to show they belong to the same physical object.
  4. Use Aliases for Readability: Long entity names like FIBER_CABLE can make relationship lines cluttered. Using as cable keeps the diagram clean while retaining the full name in the entity box.

Start Building Fiber Optic ERDs Faster with VPasCode

Instantly render, edit, and customize your complex telecommunications database schemas online with zero local installation required.

Scroll to Top