create table nodes (
node_id int primary key,
name varchar(32)
-- other node info goes here
)
####
create table edges (
from_node_id int not null references nodes(node_id),
to_node_id int not null references nodes(node_id),
description varchar(32)
-- other edge info goes here
)
##
##
-- Allowed states for "Daily Work Task"
insert graph_nodes values (1, 'Wait/Idle')
insert graph_nodes values (2, 'Ready')
insert graph_nodes values (3, 'Running')
insert graph_nodes values (4, 'Completed')
insert graph_nodes values (5, 'Fault')
insert graph_nodes values (6, 'Disabled')
-- Normal execution path
insert graph_edges values (1, 2, 'All prerequisites complete')
insert graph_edges values (2, 3, 'User makes request')
insert graph_edges values (3, 4, 'Job completes successfully')
insert graph_edges values (4, 1, 'NewDay resets us at midnight')
-- Abnormal paths
insert graph_edges values (3, 5, 'Job faults')
insert graph_edges values (5, 6, 'Manual intervention required')
insert graph_edges values (6, 1, 'System restarted')
insert graph_edges values (5, 2, 'Fault resolved normally')
insert graph_edges values (1, 6, 'System halted')
insert graph_edges values (2, 6, 'System halted')
##
##
-- Where can I go from node 5?
select FR.node_id, '-->', TO.node_id, 'When: ' + E.description
from edges E
join nodes FR on FR.node_id=E.from_node_id
join nodes TO on TO.node_id=E.to_node_id
where E.from_node_id = 5
##
##
node_id node_id
------- --- ------- ----------------------------------
5 --> 2 When: Fault resolved normally
5 --> 6 When: Manual intervention required