Shiny happy people coding

Codons avec le sourire

SchemaSpy aide les développeurs

| Comments

Ca faisait quelque temps, au niveau de mon stage, j’utilise une Base de donnée avec plusieurs dizaines de Tables différentes. Mais voilà, aucun document n’a été réalisé pour suivre l’évolution de cette Base de Donnée et la seule solution que j’avais pour la consulter, c’était de me connecter sur la BDD et de faire mes requêtes directement. J’ai finalement décidé de me prendre en main et de faire ce document. Mais en tant que bon informaticien, je suis flemmard et j’ai donc cherché une application qui me permettait de tout faire à ma place. Après plusieurs recherche infructueuse, j’ai fini par trouver mon bonheur. Il s’agit de SchemaSpy. Vous pouvez voir un exemple sur leur site. Ce programme est un programme Java et il génére les graphiques à l’aide de Graphviz.

Après plusieurs essais infructueux, j’ai découvert que ce projet manquait par contre d’une documentation plus ou moins simple et explicite. Je vais donc expliquer brievement ici comment faire.

  • Installer le JRE 5.0 sur le site internet de Sun
  • Télécharger le jar driver de la Base de Donnée que vous voulez consulter. Dans mon cas j’utilise MySQL et vous pouvez le télécharger ici
  • Installer Graphviz si vous désirez la création des graphiques

Maintenant la ligne de commande pour analyser une base de donnée MySQL il faut faire :

$java -jar schemaspy -t mysql  -host localhost -db mydatabase -u user -p password -o output

Mais voilà pour moi cela n’a pas marché. j’ai donc lu le source du jar et compris comment créer un fichier de configuration pour schemaSpy. Je vais vous expliquer comment en faire un. Voici le fichier que j’ai appelé mymysql.properties

# note that MySQL tables must be of type 'InnoDB' or they won't
# have foreign key relationships
description=MySQL

# connection spec
#  text between <>'s will be prompted for on the command line
#    e.g. if <host> is in connectionSpec then you must have -host on the command line
#  if you're missing a required parameter then you're be prompted with the text
#  that's associated with that paramter
#    e.g. missing -db then you'll be prompted for 'database name'
# expected format: jdbc:mysql://[hostname][:port]/dbname
connectionSpec=jdbc:mysql://localhost/
#host=hostname[:port] (possibly just localhost)
db=databasename

driver=com.mysql.jdbc.Driver

# point this to whatever is appropriate on your machine...let me know if there's a standard path/jar
# you can use the -cp command line option if you prefer
# The driver should be available at www.mysql.com/products/connector/j/
driverPath=mysql-connector-java-3.1.13-bin.jar

# if your driver returns failures like "stream already closed" then its metadata
# services probably aren't thread safe and you'll have to uncomment this line
# or specify "-dbThreads 1" on the command line.
#dbThreads=1

# the following SQL is optional
# fill it in if you want to see the SQL used to create your views or your check constraints
# send it back to schemaspy.sourceforge.net if it works
# these named parameters are supported: :schema, :owner, :table and :view

# return text that represents a specific :view / :schema
#selectViewSql=

# return table_name, constraint_name and text for a specific :schema
#selectCheckConstraintsSql=

# return table_name, comments for a specific :schema (which MySQL doesn't have, so the db name will be used)
# useful if db driver doesn't return this info
selectTableCommentsSql=select table_name, table_comment comments from information_schema.tables where table_schema=:schema

# return table_name, column_name, comments for a specific :schema
# useful if db driver doesn't return this info
#selectColumnCommentsSql=select table_name, column_name, column_comment comments from information_schema.columns where table_schema=:schema

Sur le fichier précédent, vous n’avez qu’à changer le lien de votre jar MysqlConnector et le nom de la Base de donnée que vous voulez consulter. Une fois ce fichier créer, il suffit de faire comme appele au programme schemaspy la commande suivante :

$java -jar schemaspy -t mymysql -u user -p password -o output