用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
下载
- schemaSpy
- MySQL JDBC包:
- SchemaSpy Docker Hub page: https://hub.docker.com/r/schemaspy/schemaspy/
使用
-
java -jar schemaSpy_5.0.0.jar --help
#SchemaSpy generates an HTML representation of a database schema's relationships. #Usage: # java -jar schemaSpy_5.0.0.jar [options] # -t databaseType type of database - defaults to ora # use -dbhelp for a list of built-in types # -u user connect to the database with this user id # -s schema defaults to the specified user # -p password defaults to no password # -o outputDirectory directory to place the generated output in # -dp pathToDrivers optional - looks for JDBC drivers here before looking # in driverPath in [databaseType].properties. #Go to http://schemaspy.sourceforge.net for a complete list/description # of additional parameters. #Sample usage using the default database type (implied -t ora): # java -jar schemaSpy.jar -db mydb -s myschema -u devuser -p password -o output
- java -jar schemaSpy.jar -dbhelp
通过命令行使用
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 ]更好一些,其功能更加丰富和完整,包括存储过程,函数,序列等等都可以进行查看。