Designing a Spectrum License Auction ERD with PlantUML: A Masterclass

In the rapidly evolving landscape of telecommunications, the allocation of radio spectrum is a high-stakes process governed by complex regulatory frameworks and sophisticated auction mechanisms. Regulators must manage not only the financial aspects of bidding but also the technical intricacies of frequency assignment, interference coordination, and long-term compliance. A robust data model is the backbone of any system handling these operations, ensuring that auction rules are enforced, bids are tracked with precision, and frequency licenses are assigned without conflict.

Visualizing this intricate ecosystem through an Entity Relationship Diagram (ERD) is essential for database architects and system designers. It transforms abstract regulatory requirements into a concrete blueprint, clarifying how auction events, bidder eligibility, and frequency blocks interact. By leveraging diagram-as-code with PlantUML in VPasCode, architects can prototype these complex schemas instantly, iterate on relationships, and generate living documentation that evolves alongside the system.

Real-world system context and operational workflow illustration

This tutorial serves as a deep dive into constructing a comprehensive ERD for a spectrum license auction system. We will explore how to model the lifecycle of an auction, from the initial declaration of frequency blocks to the final frequency assignment and payment tracking. Using the AWS Orange theme, we will create a clean, professional diagram that captures the cardinality of relationships between bidders, blocks, and regulatory constraints, providing a clear architectural view for stakeholders.

Understanding the Model: Purpose, Scope & Problem Framing

The diagram we are about to build is an Entity Relationship Diagram (ERD) specifically tailored for the telecommunications domain. Unlike simple data models, this ERD must capture the temporal and regulatory nuances of a spectrum auction. It represents a transactional system where high-value assets (frequency bands) are allocated to qualified entities (bidders) based on competitive bidding rules, followed by strict post-auction compliance.

Diagram Abstraction & Representation

In this context, the ERD acts as the structural contract for the database. Each Entity represents a critical business object: Auction defines the event, Bidder represents the market participant, and License_Block defines the asset being sold. The relationships (lines) define the constraints and cardinalities, such as a single auction having many license blocks, or a single bidder submitting many bids. The diagram abstracts away implementation details like SQL data types, focusing instead on the logical connections: who bids on what, who wins, and how compliance is tracked.

Target Domain Scope & Scenario

This model covers the full lifecycle of a spectrum allocation event. It starts with the definition of an auction and the qualification of bidders. It moves through the dynamic phase of bidding on specific frequency blocks, handling multiple rounds. Finally, it concludes with the administrative phase of assigning frequencies, managing payments, and auditing compliance. It explicitly excludes external systems like payment gateways or GIS mapping tools, focusing strictly on the internal data integrity of the auction platform.

Key Takeaways & Educational Insights

By building this diagram, you will gain insights into modeling complex one-to-many and many-to-many relationships in a regulated environment. You will learn how to structure entities to handle financial data (decimals for bids), temporal data (dates for auctions and assignments), and regulatory constraints (interference zones). The use of PlantUML allows you to define these relationships declaratively, ensuring the visual output matches the logical schema perfectly.

Complete Diagram & Full Source Code

Below is the final rendered ERD. It features the AWS Orange theme for a professional look, clearly defining entities such as AUCTION, BIDDER, ELIGIBILITY, LICENSE_BLOCK, and BID, along with their critical relationships.

Descriptive Alt Text

@startuml
/' 
This ERD models a spectrum license auction and frequency assignment coordination system.
The core entities capture:
- Auction events with rules and schedules
- Bidders (organizations) and their eligibility
- License blocks (frequency bands/geographic areas) being auctioned
- Bid submissions with amounts and timestamps
- Frequency assignments after auction close
- Coordination zones and interference constraints
- Payment and compliance tracking
'/
!theme aws-orange

title Spectrum License Auction Bidding & Frequency Assignment Coordination ERD

' =====================
' ENTITIES
' =====================

entity "AUCTION" as auction {
  * auction_id : PK
  --
  name : string
  start_date : date
  end_date : date
  status : enum
  round_number : int
  bid_increment : decimal
}

entity "BIDDER" as bidder {
  * bidder_id : PK
  --
  organization_name : string
  contact_person : string
  email : string
  registration_date : date
  status : enum
}

entity "ELIGIBILITY" as eligibility {
  * eligibility_id : PK
  --
  bidder_id : FK
  auction_id : FK
  max_bid_amount : decimal
  deposit_paid : decimal
  approved : boolean
}

entity "LICENSE_BLOCK" as license_block {
  * block_id : PK
  --
  auction_id : FK
  frequency_start : decimal
  frequency_end : decimal
  geographic_area : string
  bandwidth : decimal
  reserve_price : decimal
  status : enum
}

entity "BID" as bid {
  * bid_id : PK
  --
  bidder_id : FK
  block_id : FK
  auction_id : FK
  amount : decimal
  bid_time : datetime
  round_number : int
  is_winning : boolean
}

entity "FREQUENCY_ASSIGNMENT" as freq_assign {
  * assignment_id : PK
  --
  block_id : FK
  winner_bidder_id : FK
  assignment_date : date
  license_term_years : int
  license_number : string
  status : enum
}

entity "COORDINATION_ZONE" as coord_zone {
  * zone_id : PK
  --
  name : string
  boundary_geojson : text
  region : string
}

entity "INTERFERENCE_CONSTRAINT" as interference {
  * constraint_id : PK
  --
  zone_id : FK
  block_id : FK
  max_power_dbm : decimal
  separation_distance_km : decimal
  constraint_type : enum
}

entity "PAYMENT" as payment {
  * payment_id : PK
  --
  assignment_id : FK
  bidder_id : FK
  amount : decimal
  payment_date : date
  method : enum
  status : enum
}

entity "COMPLIANCE_RECORD" as compliance {
  * compliance_id : PK
  --
  assignment_id : FK
  inspection_date : date
  result : enum
  notes : text
}

' =====================
' RELATIONSHIPS
' =====================

auction ||--o{ license_block : "offers"
auction ||--o{ eligibility : "has"
auction ||--o{ bid : "receives"

bidder ||--o{ eligibility : "qualifies"
bidder ||--o{ bid : "submits"
bidder ||--o{ freq_assign : "wins"
bidder ||--o{ payment : "makes"

license_block ||--o{ bid : "receives"
license_block ||--o| freq_assign : "assigned_as"
license_block ||--o{ interference : "governed_by"

coord_zone ||--o{ interference : "defines"

freq_assign ||--o{ payment : "requires"
freq_assign ||--o{ compliance : "audited_by"

@enduml

Step-by-Step Architectural Walkthrough

Constructing this ERD in VPasCode is a logical process of defining the core objects, detailing their attributes, and finally connecting them to represent the business logic. Here is how we built it.

Phase 1: Canvas Configuration & Layout Directives

Every PlantUML diagram starts with a preamble. We begin by declaring the diagram type and the comment block. The comment block is crucial for documentation; it uses /' to start and /' to end, allowing us to describe the diagram’s purpose without affecting the rendering. We then apply the !theme aws-orange directive to ensure the diagram adheres to a consistent, professional color palette suitable for enterprise architecture.

/' 
This ERD models a spectrum license auction and frequency assignment coordination system.
... (comment content) ...
'/
!theme aws-orange

Phase 2: Declaring Core Entities, Actors, and Boundaries

The foundation of an ERD is the entity definition. In PlantUML, we use the entity keyword. For this model, we defined ten core entities. Each entity is split into two sections: the primary key (marked with *) and the rest of the attributes (separated by --). For example, the AUCTION entity captures the event metadata, while the LICENSE_BLOCK entity captures the technical details of the spectrum (frequency start/end, bandwidth).

entity "AUCTION" as auction {
  * auction_id : PK
  --
  name : string
  start_date : date
  ...
}

Notice how we use FK to denote foreign keys. This is a visual convention within the entity block that helps the reader understand the data relationships before looking at the connecting lines.

Phase 3: Mapping Data Flows & Key Interactions

Once entities are defined, we map the relationships using the ||--o{ syntax. This syntax represents a “one-to-many” relationship where the circle indicates optionality (zero or more) and the crow’s foot indicates the “many” side. For instance, an AUCTION can have zero or many LICENSE_BLOCKs. We also added relationship labels (e.g., "offers") to make the diagram self-explanatory. The relationship between LICENSE_BLOCK and FREQUENCY_ASSIGNMENT uses a specific notation ||--o| to indicate a mandatory assignment for blocks that have been won, reflecting the business rule that a block cannot remain unassigned after a winner is declared.

auction ||--o{ license_block : "offers"
bidder ||--o{ bid : "submits"
license_block ||--o| freq_assign : "assigned_as"

Phase 4: Grouping, Annotations & Visual Polish

To ensure the diagram remains readable despite its complexity, we utilized the title directive to provide a clear header. We also grouped related entities logically in the code (e.g., all entities related to payments and compliance are defined sequentially). The use of the aws-orange theme automatically applies consistent colors and fonts, reducing the need for manual skinparam adjustments and ensuring the diagram looks polished immediately.

Syntax & Keyword Deep Dive

Understanding the specific PlantUML syntax used in this ERD is key to mastering diagram-as-code. Here are the critical components:

  • entity: The primary keyword used to define a table or entity. It accepts a display name (e.g., “AUCTION”) and an alias (e.g., as auction) which is used in relationship definitions.
  • * (Primary Key Marker): Placed before an attribute name (e.g., * auction_id) to visually indicate it is the Primary Key. PlantUML renders this with a distinct icon or formatting.
  • -- (Separator): Used inside an entity block to separate the header (PK) from the body (other attributes). This is a PlantUML ERD convention for readability.
  • ||--o{ (Relationship Cardinality): This is the most powerful part of the syntax. || means “one and only one” (mandatory), -- is the line, and o{ means “zero or many” (optional). This allows precise modeling of business rules like “An auction must have at least one block, but a block can receive zero bids.”
  • /' ... /' (Comment Block): A multi-line comment syntax that renders as a text box in the diagram, perfect for context descriptions.
  • !theme: A directive to load a predefined color scheme (like aws-orange) to style the entire diagram instantly.

Best Practices & Pitfalls to Avoid

When modeling complex systems like spectrum auctions, clarity is paramount. Here are three best practices to keep your diagrams effective:

  1. Use Aliases for Relationships: Always define an alias for your entities (e.g., as auction) rather than using the full display name in relationships. This keeps the code clean and prevents errors if you decide to change the display name later.
  2. Group Related Attributes: Within the entity block, keep related attributes together (e.g., all financial fields like amount and deposit_paid in the same section). This makes the entity definition easier to scan.
  3. Document Business Logic in Comments: Use the /' ... /' comment block to explain the scope of the diagram. Since diagrams can become complex, a clear summary at the top prevents misinterpretation of the model’s intent.

Try It Yourself with VPasCode

Start Building Spectrum Auction ERDs Faster with VPasCode

Create, edit, and preview your complex telecommunications database schemas instantly in your browser with VPasCode’s free PlantUML editor—no installation required.

Scroll to Top