3 # $Id: sqlt-diagram,v 1.2 2003-08-26 03:55:33 kycl4rk Exp $
7 sqlt-diagram - Automatically create a diagram from a database schema
11 ./sqlt-diagram -d|-f|--from|--db=db_parser [options] schema.sql
15 -o|--output Output file name (default STDOUT)
16 -i|--image Output image type ("png" or "jpeg," default "png")
17 -t|--title Title to give schema
18 -c|--cols Number of columns
19 -n|--no-lines Don't draw lines
20 -f|--font-size Font size ("small," "medium," "large," or "huge,"
23 --show-fk-only Only show fields that act as primary
26 --natural-join Perform natural joins
27 --natural-join-pk Perform natural joins from primary keys only
28 -s|--skip Fields to skip in natural joins
29 --debug Print debugging information
33 This script will create a picture of your schema. Only the database
34 driver argument (for SQL::Translator) is required. If no output file
35 name is given, then image will be printed to STDOUT, so you should
36 redirect the output into a file.
38 The default action is to assume the presence of foreign key
39 relationships defined via "REFERENCES" or "FOREIGN KEY" constraints on
40 the tables. If you are parsing the schema of a file that does not
41 have these, you will find the natural join options helpful. With
42 natural joins, like-named fields will be considered foreign keys.
43 This can prove too permissive, however, as you probably don't want a
44 field called "name" to be considered a foreign key, so you could
45 include it in the "skip" option, and all fields called "name" will be
46 excluded from natural joins. A more efficient method, however, might
47 be to simply deduce the foriegn keys from primary keys to other fields
48 named the same in other tables. Use the "natural-join-pk" option
60 $VERSION = sprintf "%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/;
66 $out_file, $image_type, $db_driver, $title, $no_columns,
67 $no_lines, $font_size, $add_color, $debug, $show_fk_only,
68 $natural_join, $join_pk_only, $skip_fields, $help
72 'd|db|f|from=s' => \$db_driver,
73 'o|output:s' => \$out_file,
74 'i|image:s' => \$image_type,
75 't|title:s' => \$title,
76 'c|columns:i' => \$no_columns,
77 'n|no-lines' => \$no_lines,
78 'f|font-size:s' => \$font_size,
79 'color' => \$add_color,
80 'show-fk-only' => \$show_fk_only,
81 'natural-join' => \$natural_join,
82 'natural-join-pk' => \$join_pk_only,
83 's|skip:s' => \$skip_fields,
87 my @files = @ARGV; # the create script(s) for the original db
89 pod2usage(1) if $help;
90 pod2usage( -message => "No db driver specified" ) unless $db_driver;
91 pod2usage( -message => 'No input file' ) unless @files;
93 my $translator = SQL::Translator->new(
98 out_file => $out_file,
99 image_type => $image_type,
101 no_columns => $no_columns,
102 no_lines => $no_lines,
103 font_size => $font_size,
104 add_color => $add_color,
105 show_fk_only => $show_fk_only,
106 natural_join => $natural_join,
107 join_pk_only => $join_pk_only,
108 skip_fields => $skip_fields,
110 ) or die SQL::Translator->error;
112 for my $file (@files) {
113 my $output = $translator->translate( $file ) or die
114 "Error: " . $translator->error;
116 print "Image written to '$out_file'. Done.\n";
127 Ken Y. Clark E<lt>kclark@cpan.orgE<gt>