用SchemaSpy生成数据库结构文档

概要

在包含数据库的项目管理中,数据库文档是一个不可缺少的资源,一般来说,在数据库设计阶段比较普遍使用的工具是PowerDesigner,相信在项目初始阶段,稍微有点责任心的人都会去维护它 ,但随着项目的扩大和时间的推移,会有多少项目组会投入资源去更新和维护,即便是投入了资源,又有多少能保证所维护的版本是最新和正确的呢,有些事情,依靠人来解决,似乎很不靠谱。

好在有许多工具可以帮助我们来维护数据库文档,比如PowerDesigner就可以反向生成ER图。

这里向大家推荐一下SchemaSpy,它提供了从实际数据库自动生成数据库结构的最新精确视图,其安装和使用都比较简单,而且支持目前绝大多数的数据库。

界面还是比较友好的,通过SchemaSpy可以很方便的查看各个table信息,以及各个table之间的关联关系信息。 下面说一下如何使用SchemaSpy

安装

SchemaSpy的安装十分简单,实际上就是一个jar文件,官方下载地址:http://schemaspy.sourceforge.net/

SchemaSpy依靠Graphviz程序库来生成数据库结构的图形视图,Graphviz的安装参考:http://hanqunfeng.iteye.com/admin/blogs/869293

安装jdk,graphviz

#graphviz - rich set of graph drawing tools
#libmysql-java - Java database (JDBC) driver for MySQL
# Ubuntu
apt-get install default-jre graphviz

# CentOS
yum install graphviz

下载

使用

通过命令行使用

java -jar schemaSpy.jar -t dbType -db dbName [-s schema] -u user [-p password] -o outputDir
#LANG=en_US
/opt/jdk/bin/java -jar schemaSpy.jar \
-t mysql \
-dp ./mysql-connector-java-5.1.25-bin.jar \
-charset=UTF-8 \
-u yuanxing \
-p xxxxxx \
-host 172.16.16.21 \
-port 3306 \
-db cmdb \
-o dc/cmdb

通过ant使用

这里给出在ant中的任务示例:

<!-- schemaspy lib路径 -->
    <property name="schemaspy.lib" location="${schemaspy.home}" />
    <!-- schemaspy报告路径 -->
    <property name="schemaspy.dir" location="${reports.dir}/schemaspy" />
<target name="schemaspy">
        <delete dir="${schemaspy.dir}" />
        <mkdir dir="${schemaspy.dir}" />
        <java jar="${schemaspy.lib}/schemaSpy_5.0.0.jar" output="${schemaspy.dir}/out.log" error="${schemaspy.dir}/error.log" fork="true" >
            <arg line="-t=orathin"/>   <!-- 数据库类型,这里是oracle -->
            <arg line="-db=serverID"/> <!-- 数据库实例 -->
            <arg line="-u=username"/> <!-- 用户名 -->     
            <arg line="-p=password"/> <!-- 密码  -->
            <arg line="-cp=${catalina.home}/common/lib/ojdbc14.jar"/> <!-- 驱动 -->
            <arg line="-host=192.168.0.xxx"/> <!-- 数据库地址 -->
            <arg line="-port=1521"/> <!-- 端口 -->
            <arg line="-o=${schemaspy.dir}"/> <!-- 文档输出目录 -->
            <arg line="-charset=UTF-8"/>   <!-- 有中文时要设置编码 -->
        </java>
</target>

如果是使用oracle数据库,[ http://oraschemadoc.yarpen.cz/ | OraSchemadoc ]更好一些,其功能更加丰富和完整,包括存储过程,函数,序列等等都可以进行查看。