迩来,我和一帮老客户一同任务,他们让花工夫给他们说一下在他们新情况中运用的新Tools。此中,我发明的一个十分有效的Tools是SchemaSpy。
SchemaSpy是Java开发的的Tools(请求java 5或更高版本的支撑),首要用来剖析数据库中数据模子的元数据,而且能生成基于阅读器可视化的显示。经过点击便可了解数据表的条理构造,父子表关系等,首要经过HTML 链接或许实体关系图来表达。它也被设计成用来协助处理因为束缚而招致的数据库联系关系失败的愚钝错误。
我所爱好ERDTools所能做的一件事是能疾速的生成一个图形表达,来展示数据库阿谁表被援用最多,那些表曾经被替代了是可以删除的(为何要保管你不需求的的数据呢?)。经过了解数据库表关系而不是仅仅看查询语句,这可以放慢的Start程序,而且还增进开发的进程使其更有效。SchemaSpy的另外一个长处是,他是一个号令行Tools,在每次履行后才生成html页面,所以特殊合适用于crontab中,使得模子改动后能主动调剂页面。很不错,是吧?
这个Tools运用起来容易了然,可以帮你做非常多的事。首要是,假如你的数据库有一个外键,你就偷着乐吧,假如没有,也不要太绝境,你另有更多的任务等着你。绝大大多数状况下,SchemSpy可以杰出的完成Task,可是有时分你需求以元数据文件的方式给它一点点的信息。
当需求尚不明白时,我爱好如许树立一下,以便让号令行能又短又整洁。这是我为我的Percona Server 5.6.10沙箱所运用的属性文件:
description=MySQL driver=com.mysql.jdbc.Driver connectionSpec=jdbc:mysql://127.0.0.1:5610/schemaspy driverPath=/usr/share/java/mysql-connector-java.jar
CREATE TABLE `parent` ( `parent_id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `child_A` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `child_B` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`), CONSTRAINT `child_B_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
请留意,在表child_A里有一个隐含的经过parent_id作为外键联系关系到parent的关系,但在表child_B中树立了一个显式的外键parent_id。这会影响SchemaSpy怎么区分关系,和你能否需求供给一个提醒。
假如没有元数据文件,你运转SchemaSpy,你将能看到parent 表和child_B表的关系以下图所示:
表child_A也能被加出去显示,假如你的标签指出了他们关系框,可是这个凡是只能在你的子表和父表运用完整一样的名字(本例中parent_id)时分才干起用处。你的情况看起里就像是很多商铺,在父表中名字是id,在他其的子表他们代表为parent_id——这情形对开发者可能比较熟习,可是对SchemaSpy基本没有任何的协助。那就是需求元数据文件来大显神通的时分。
元数据文件是一个XML格局的。下面的设置装备摆设实例是用来把child_A表链接到parent表。
<?xml version="1.0" encoding="UTF-8"?> <schemaMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schemaspy.sourceforge.net/xmlschema/2011/02/05/schemaspy.meta.xsd"> <comments> Main Production Database. Percona, Michael Coburn </comments> <tables> <table name="parent" comments="Parent table"> <column name="parent_id" primaryKey="true"> </column> </table> <table name="child_A" comments="Non-FK relationship, implicit relationship to parent"> <column name="id" primaryKey="true"> </column> <column name="parent_id"> <foreignKey table="parent" column="parent_id"/> </column> </table> </tables> </schemaMeta>更多的庞杂设置装备摆设例子的可以 拜访。
下面的语法是衔接MySQL数据库,SchemaSy同时对其他大大多数盛行的关系数占有很好支撑。
java -jar schemaSpy_5.0.0.jar -t mysql -u msandbox_ro -p msandbox -meta schemaspy.meta.xml -o /var/www/schemaspy/
-o选项,标识SchemaSpy的输出文件目次,要断定这个目次可以被webServer所操作。需求说起的是,我经过在jar包地点目次树立一个mysql.properties文件,如许我可以不必输出任何的Server:端口和数据库称号的信息。
三个表的完好的关系视图以下图所示:
虽然我说起到了关系栏,SchemaSpy最有效的功用。为了不SchemaSpy只要这个功用如许的假象,我要说起一下更多的功用栏:
最初,你不要忘了,把设置装备摆设好的SchemaSpy写到crontab来完成主动化。
假如正在运用其他的ERDTools,和SchemaSpy比拟较怎样?请经过评论各抒己见。感谢你有耐烦读完本文。
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务