erDiagram
   
    CheckServiceNode
    Node
    NodeService
    ServiceNode
    HealthCheck

    CheckServiceNode ||--|| Node: has
    CheckServiceNode ||--|| NodeService: has
    CheckServiceNode ||--o{ HealthCheck: has

    Store ||--o{ Node: "stored in the node table"
    Store ||--o{ ServiceNode: "stored in the service table"
    Store ||--o{ HealthCheck: "stored in the checks table"

    ServiceNode ||--|| Node: references
    HealthCheck ||--o| Node: references
    HealthCheck ||--o| Service: references

    RegisterRequest ||--o| Node: has
    RegisterRequest ||--o| NodeService: has
    RegisterRequest ||--o{ HealthCheck: has


    CheckDefinition
    HealthCheckDefinition
    CheckType

    HealthCheck ||--|| HealthCheckDefinition: has

    ServiceDefinition ||--|| NodeService: "is essentially a"
    ServiceDefinition ||--o{ CheckType: "has"

    Config ||--o{ CheckDefinition: "has"
    Config ||--o{ ServiceDefinition: "has"
