Bienvenue sur eagle-usb.org

WikiEagle

HowToDia

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-3-239-87-20.compute-1.amazonaws.com
<< ModelizationTools ScientificHobbies OutilsPresentation >>

Voici quelques résultats obtenus avec Dia pour de la modélisation de données (MCD) grâce à autodoc et autodia, voir aussi ModelizationTools
D'abord, quelques outils de réalisation de schémas techniques.

http://baud123.free.fr/dia/vhffs_20050227_icon.png


outils d'analyse de MCD



Utilisation de shape, clipart

Il est intéressant de reprendre des cliparts (libres) existants, que ce soit Openclipart ou autre :


greffons dia

http://www.cetic.be/internal.php3?id_article=222 ingénierie des exigences dans le domaine du génie logiciel


ajouter des shapes

http://mail.gnome.org/archives/dia-list/2005-November/msg00065.html [en] tout mettre dans sheet

How to Dia

Voir la mailing-list http://mail.gnome.org/mailman/listinfo/dia-list j'attends un peu de feedback
FAQ at http://www.gnome.org/projects/dia/faq.html
Main page at http://www.gnome.org/projects/dia

Utilisation de Autodoc et AutoDia see http://search.cpan.org/dist/Autodia/ (v2.140 as of 2012-12-15)

Utilisation de AutoDoc

En entrée
L'objectif est de partir d'une base de données PostgreSQL, d'en faire le reverse-engineering pour constituer un MPD et remonter ensuite au MCD.

J'en ai parlé ici aussi : http://linuxfr.org/~baud123/17259.html

Les traitements
Pour l'instant, j'ai utilisé Autodoc qui permet de générer du format Dia, dot, HTML, Docbook XML, sachant que je n'ai utilisé (pour l'instant) que la sortie au format Dia. Autodoc s'installe de manière "standard" :
./configure
make
make install # sous root

La base de données PostgreSQL doit être opérationnelle
postgresql_autodoc -d [nom de la base] permet de générer les documentations pour toutes les tables de la base.

A l'ouverture du fichier Dia, toutes les tables sont superposées dans le coin supérieur gauche, il faut les ré-arranger pour sortir un MCD lisible... Pratique, les clés étrangères sont gérées comme contraintes et suivent les déplacements des tables.
Dommage, je n'ai pas trouvé comment remplacer le style des contraintes par des flèches brisées, ce qui permettrait d'avoir une mise en forme plus pratique que la flèche droite... (si quelqu'un a une idée ?)

Il y a de la http://tedia2sql.tigris.org/usingtedia2sql.html sur l'utilisation du formalisme UML dans Dia.

Les fichiers en sortie
http://baud123.free.fr/dia/vhffs_20050227_icon.png

Utilisation de Autodia

A partir d'une base MySQL? : (essayer avec du postgres tout de même...)
droogs.org/autodia/ see http://search.cpan.org/dist/Autodia/

autodia.pl -l DBI -i "mysql:librehwdb:localhost" -U user -P password

A partir d'une base Postgresql, installer libdbd-pg-perl
autodia.pl -l DBI -i "Pg:dbname=vhffs" -U user -P password

Les fichiers en sortie

Dommage les attributs sont extraits mais pas leur type ?!
c'est la version 1.99 qui est en cooker, la version 2.01 est disponible : droogs.org/autodia/download/ http://search.cpan.org/dist/Autodia/ => installé

un peu de hacking de autodia

Je regarde /usr/lib/perl5/site_perl/5.8.6/Autodia/Handler/DBI.pm pour utiliser DBI pour lire les données de type pour chaque attribut...
la version actuelle utilise my $sth = $dbh->prepare("select * from $esc_table where 1 = 0"); pour voir la liste des champs ! (forcément ya pas le type)
donc j'essaie de regarder plutôt à utiliser $sth = $dbh->column_info( $catalog, $schema, $table, $column );

J'ai réussi voici le fichier résultant http://baud123.free.fr/dia/DBI20030327.pm

il y a de la doc' de ce côté :
http://savage.net.au/Perl-modules/html/DBIx/Admin/TableInfo.html encapsulation de tableinfo
http://lists.mysql.com/perl/3392 obtenir le contenu de colonnes


http://coding.derkeiler.com/Archive/Perl/comp.lang.perl.misc/2004-02/0631.html pour récupérer les colonnes
http://www.kitebird.com/mysql-perl/ et plus d'info

my $dbh = DBI->connect("DBI:$filename", $config{username}, $config{password});
#$sth = $dbh->column_info( $catalog, $schema, $table, $column );
my $sth = $dbh->column_info( '', '', $table, '%' );
my $row = $sth->fetchall_hashref('COLUMN_NAME');
print Dumper ($row) ;
donne :
$VAR1 = {
          'date_creation' => {
                               'DECIMAL_DIGITS' => undef,
                               'COLUMN_DEF' => undef,
                               'TABLE_CAT' => undef,
                               'NUM_PREC_RADIX' => undef,
                               'TABLE_SCHEM' => 'public',
                               'BUFFER_LENGTH' => undef,
                               'CHAR_OCTET_LENGTH' => undef,
                               'pg_constraint' => undef,
                               'IS_NULLABLE' => 'YES',
                               'REMARKS' => undef,
                               'COLUMN_SIZE' => 8,
                               'ORDINAL_POSITION' => '3',
                               'COLUMN_NAME' => 'date_creation',
                               'TYPE_NAME' => 'timestamp without time zone',
                               'pg_type' => 'timestamp without time zone',
                               'NULLABLE' => '1',
                               'DATA_TYPE' => 93,
                               'TABLE_NAME' => 'vhffs_object',
                               'SQL_DATA_TYPE' => undef,
                               'SQL_DATETIME_SUB' => undef
                             },
          'object_id' => {
                           'DECIMAL_DIGITS' => undef,
                           'COLUMN_DEF' => 'nextval(\'seq_id_objects\'::text)',
                           'TABLE_CAT' => undef,
                           'NUM_PREC_RADIX' => undef,
                           'TABLE_SCHEM' => 'public',
                           'BUFFER_LENGTH' => undef,
                           'CHAR_OCTET_LENGTH' => undef,
                           'pg_constraint' => undef,
                           'IS_NULLABLE' => 'NO',
                           'REMARKS' => undef,
                           'COLUMN_SIZE' => 4,
                           'ORDINAL_POSITION' => '1',
                           'COLUMN_NAME' => 'object_id',
                           'TYPE_NAME' => 'integer',
                           'pg_type' => 'integer',
                           'NULLABLE' => '0',
                           'DATA_TYPE' => 4,
                           'TABLE_NAME' => 'vhffs_object',
                           'SQL_DATA_TYPE' => undef,
                           'SQL_DATETIME_SUB' => undef
                         },
          'description' => {
                             'DECIMAL_DIGITS' => undef,
                             'COLUMN_DEF' => undef,
                             'TABLE_CAT' => undef,
                             'NUM_PREC_RADIX' => undef,
                             'TABLE_SCHEM' => 'public',
                             'BUFFER_LENGTH' => undef,
                             'CHAR_OCTET_LENGTH' => undef,
                             'pg_constraint' => undef,
                             'IS_NULLABLE' => 'YES',
                             'REMARKS' => undef,
                             'COLUMN_SIZE' => 500,
                             'ORDINAL_POSITION' => '5',
                             'COLUMN_NAME' => 'description',
                             'TYPE_NAME' => 'character varying',
                             'pg_type' => 'character varying(500)',
                             'NULLABLE' => '1',
                             'DATA_TYPE' => 12,
                             'TABLE_NAME' => 'vhffs_object',
                             'SQL_DATA_TYPE' => undef,
                             'SQL_DATETIME_SUB' => undef
                           },
          'state' => {
                       'DECIMAL_DIGITS' => undef,
                       'COLUMN_DEF' => undef,
                       'TABLE_CAT' => undef,
                       'NUM_PREC_RADIX' => undef,
                       'TABLE_SCHEM' => 'public',
                       'BUFFER_LENGTH' => undef,
                       'CHAR_OCTET_LENGTH' => undef,
                       'pg_constraint' => undef,
                       'IS_NULLABLE' => 'NO',
                       'REMARKS' => undef,
                       'COLUMN_SIZE' => undef,
                       'ORDINAL_POSITION' => '4',
                       'COLUMN_NAME' => 'state',
                       'TYPE_NAME' => 'character varying',
                       'pg_type' => 'character varying',
                       'NULLABLE' => '0',
                       'DATA_TYPE' => 12,
                       'TABLE_NAME' => 'vhffs_object',
                       'SQL_DATA_TYPE' => undef,
                       'SQL_DATETIME_SUB' => undef
                     },
          'owner_uid' => {
                           'DECIMAL_DIGITS' => undef,
                           'COLUMN_DEF' => undef,
                           'TABLE_CAT' => undef,
                           'NUM_PREC_RADIX' => undef,
                           'TABLE_SCHEM' => 'public',
                           'BUFFER_LENGTH' => undef,
                           'CHAR_OCTET_LENGTH' => undef,
                           'pg_constraint' => undef,
                           'IS_NULLABLE' => 'NO',
                           'REMARKS' => undef,
                           'COLUMN_SIZE' => 4,
                           'ORDINAL_POSITION' => '2',
                           'COLUMN_NAME' => 'owner_uid',
                           'TYPE_NAME' => 'integer',
                           'pg_type' => 'integer',
                           'NULLABLE' => '0',
                           'DATA_TYPE' => 4,
                           'TABLE_NAME' => 'vhffs_object',
                           'SQL_DATA_TYPE' => undef,
                           'SQL_DATETIME_SUB' => undef
                         }
        };

cool pour naviguer dans cette structure, il "suffit" :

foreach my $field (keys %$row ) {
print "$field $row->{$field}->{TYPE_NAME}\n"
}

En MySQL, la fonction tables renvoit les tables avec des backquotes, par exemple `hw_types`, forcément ya DBI::mysql qui râle
DBD::mysql::db column_info failed: column_info doesn't support table wildcard at /usr/lib/perl5/site_perl/5.8.6/Autodia/Handler/DBI.pm line 87.
Can't call method "fetchall_hashref" on an undefined value at /usr/lib/perl5/site_perl/5.8.6/Autodia/Handler/DBI.pm line 88.


donc, il faut enlever les backquotes :
if ($unescape_tablenames) { $table =~ s/\`//g ; }

my $dbh = DBI->connect("DBI:$filename", $config{username}, $config{password});
  my $escape_tablenames = 0; my $unescape_tablenames=0;
  my $database_type =  $dbh->get_info( 17 );

  print "database type : $database_type\n";
  $escape_tablenames = 1 if (lc($database_type) =~ m/(oracle|postgres|PostgreSQL)/);
  $unescape_tablenames = 1 if (lc($database_type) =~ m/(mysql)/);
  my %tables = map { $_ => 1 } $dbh->tables();
  foreach my $table (keys %tables) {

     if ($unescape_tablenames) { $table =~ s/\`//g ; }

     my $sth = $dbh->column_info( undef, undef, $table, '%' );
     my $row = $sth->fetchall_hashref('COLUMN_NAME');
     foreach my $field (keys %$row ) {
          print "$field $row->{$field}->{TYPE_NAME}\n";
      }
  } # foreach my $table

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]