程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL聯合應用數據庫剖析對象SchemaSpy的辦法

MySQL聯合應用數據庫剖析對象SchemaSpy的辦法

編輯:MySQL綜合教程

MySQL聯合應用數據庫剖析對象SchemaSpy的辦法。本站提示廣大學習愛好者:(MySQL聯合應用數據庫剖析對象SchemaSpy的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL聯合應用數據庫剖析對象SchemaSpy的辦法正文


 最近,我和一幫老客戶一路任務,他們讓花時光給他們說一下在他們新情況中應用的新對象。個中,我發明的一個異常有效的對象是SchemaSpy。

SchemaSpy是Java開辟的的對象(請求java 5或更高版本的支撐),重要用來剖析數據庫中數據模子的元數據,而且能生成基於閱讀器可視化的顯示。經由過程點擊便可懂得數據表的條理構造,父子表關系等,重要經由過程HTML 鏈接或許實體關系圖來表達。它也被設計成用來贊助處理因為束縛而招致的數據庫聯系關系掉敗的緩慢毛病。

我所愛好ERD對象所能做的一件事是能疾速的生成一個圖形表達,來展示數據庫誰人表被援用最多,那些表曾經被取代了是可以刪除的(為何要保留你不須要的的數據呢?)。經由過程懂得數據庫表關系而不是僅僅看查詢語句,這可以加速的開端措施,而且還增進開辟的進程使其更有用。SchemaSpy的另外一個長處是,他是一個敕令行對象,在每次履行後才生成html頁面,所以特殊合適用於crontab中,使得模子轉變後能主動調劑頁面。很不錯,是吧?

這個對象應用起來簡略清楚明了,可以幫你做許多的事。重要是,假如你的數據庫有一個外鍵,你就偷著樂吧,假如沒有,也不要太絕境,你還有更多的任務等著你。絕年夜多半情形下,SchemSpy可以精彩的完成義務,然則有時刻你須要以元數據文件的情勢給它一點點的信息。

裝置SchemaSpy及其相干

    下載 SchemaSpy最新版的jar文件(書寫本文時的版本是5.0.0)
    確認你有一個能運轉於你的操作平台的Java JRE
    你須要一個你所用數據庫的Java驅動——我在應用 MySQL Connector/J
    裝置graphiz 包

創立 mysql.properties文件

當需求尚不明白時,我愛好如許樹立一下,以便讓敕令行能又短又整潔。這是我為我的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

Schema的例子:

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(有外鍵)

假如沒有元數據文件,你運轉SchemaSpy,你將能看到parent 表和child_B表的關系以下圖所示:

2015625113102518.png (300×134)

表child_A也能被加出去顯示,假如你的標簽指出了他們關系框,然則這個平日只能在你的子表和父表應用完整一樣的名字(本例中parent_id)時刻能力起感化。你的情況看起裡就像是很多市肆,在父表中名字是id,在他其的子表他們代表為parent_id——這情形對開辟者能夠比擬熟習,然則對SchemaSpy基本沒有任何的贊助。那就是須要元數據文件來年夜顯身手的時刻。

2015625113131945.png (300×110)

 設置裝備擺設元數據文件

元數據文件是一個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>

更多的龐雜設置裝備擺設例子的可以 拜訪。
運轉SchemaSpy

上面的語法是銜接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的輸入文件目次,要肯定這個目次可以被web辦事器所操作。須要說起的是,我經由過程在jar包地點目次樹立一個mysql.properties文件,如許我可以不消輸出任何的辦事器:端口和數據庫稱號的信息。
閱讀SchemaSpy輸入

三個表的完全的關系視圖以下圖所示:

2015625113149215.png (300×254)

掃尾感觸

雖然我說起到了關系欄,SchemaSpy最有效的功效。為了不SchemaSpy只要這個功效如許的假象,我要說起一下更多的功效欄:

  •      表——稱號,子表數目,父表,列計數,行計數,還有注解--年夜量用於高條理預覽表年夜小和一種快捷的辦法是,用閱讀的搜刮屬性定位到特定的表。
  •     限制——列出數據庫中明白的外鍵限制(這不包含經由過程元數據文件設置裝備擺設的限制!)。
  •     異常——基於名字指出能夠的字段/表的關系,沒有索引的表,標識為可空的字段和獨一字段(吐了!),單列表,子增加字段的稱號;空字符而不是現實sqlnull值的表;在產生嚴重毛病時刻,這可以作為一個年夜體的數據庫檢討項,或許細節需求的閱讀。
  •     字段——庫總一切字段的列表,很便利經由過程稱號挑選來檢查能否有疏忽的明白限制,然後把它們寫到你的元數據文件中。
  •     進獻——這是一個自在軟件,John Currier要求獲得你的募捐,普通它能有更多的來由來消費更多的精神和時光來保護這個軟件,而不只僅是他妻子的埋怨。

最初,你不要忘了,把設置裝備擺設好的SchemaSpy寫到crontab來完成主動化。

假如正在應用其他的ERD對象,和SchemaSpy比擬較怎樣樣?請經由過程評論各抒己見。感謝你有耐煩讀完本文。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved