JDB/Graph
JDB: Layout Columns | Queries Σ | API: Structural Records | Client/Server | Implementation | Examples
graphdb generates schema graph of database tables.
It is a simple script based on graphics/graphviz addon. [{{#file: ""}} Download script: ]
NB. graphdb - schema graph require 'strings graphics/graphviz' «template» «code» Note 'Examples' NB. use build/init verbs unless already built «example» )
The script implementation is at the bottom of the page.
The following sections show schema graphs for JDB examples.
sandp
[{{#file: ""}} Download script: ]
load'data/jdb' buildsandp_jdb_ jpath'~temp' opensandp_jdb_ jpath'~temp' makedb locD makegraph makedb locD graphdb locD
sed
[{{#file: ""}} Download script: ]
load'data/jdb/sed' initsed jpath'~temp' opensed jpath'~temp' graphdb locD
vr
[{{#file: ""}} Download script: ]
load'data/jdb/vr' buildvr 1000;jpath '~temp' openvr jpath'~temp' graphdb d
northwind
[{{#file: ""}} Download script: ]
load'data/jdb/northwind' db_init jpath '~temp' db_open jpath'~temp' graphdb D
This particular layout is customized in Graph View by setting rankdir=LR and fontname=Verdana, fontsize=8.5. It was then scaled in image editor.
Script Implementation
Templates contain the structure and styles of Graphviz markup. [{{#file: ""}} Download script: ]
NODESTYLE=: 0 : 0 shape=record, fontname=Arial,fontsize=9, margin="0.05,0.02", style=filled,fillcolor="#ffffb0",color="#808080" ) GRAPH=: 0 : 0 digraph g { rankdir=TB; portPos="e"; node [%S]; %T } )
The code itself generates Graphviz nodes and edges based on JDB column structure. [{{#file: ""}} Download script: ]
makedb=: 3 : 0 t=. r=. '' for_tn. Tables__y do. tm=. >tn 'tb cl tp un pr pk'=. {:"1 ReadCols__y tm t=. t,' ',tm,' [label="{{',tm,'}|{' for_c. cl do. cm=. >c if. #p=. c_index{::pr do. t=. t,'<',cm,'>' r=. r,' ',tm,':',cm,' -> ',p,';',LF end. if. c_index{::un do. t=. t,'*' end. t=. t,cm,'\l' if. c_index < <:#cl do. t=. t,'|' end. end. t=. t,'}}"];',LF end. t , r ) makegraph=: 3 : 0 GRAPH rplc '%S';NODESTYLE;'%T';y ) graphdb=: graphview@makegraph@makedb