国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL結(jié)合使用數(shù)據(jù)庫分析工具SchemaSpy的方法

2024-07-24 13:07:32
字體:
供稿:網(wǎng)友

這篇文章主要介紹了MySQL結(jié)合使用數(shù)據(jù)庫分析工具SchemaSpy的方法,需要的朋友可以參考下

近來,我和一幫老客戶一起工作,他們讓花時間給他們說一下在他們新環(huán)境中使用的新工具。其中,我發(fā)現(xiàn)的一個非常有用的工具是SchemaSpy。

SchemaSpy是Java開發(fā)的的工具(要求java 5或更高版本的支持),主要用來分析數(shù)據(jù)庫中數(shù)據(jù)模型的元數(shù)據(jù),并且能生成基于瀏覽器可視化的顯示。通過點(diǎn)擊就可了解數(shù)據(jù)表的層次結(jié)構(gòu),父子表關(guān)系等,主要通過HTML 鏈接或者實(shí)體關(guān)系圖來表達(dá)。它也被設(shè)計(jì)成用來幫助解決由于約束而導(dǎo)致的數(shù)據(jù)庫關(guān)聯(lián)失敗的遲鈍錯誤。

我所喜歡ERD工具所能做的一件事是能快速的生成一個圖形表達(dá),來展現(xiàn)數(shù)據(jù)庫那個表被引用最多,那些表已經(jīng)被代替了是可以刪除的(為什么要保存你不需要的的數(shù)據(jù)呢?)。通過了解數(shù)據(jù)庫表關(guān)系而不是僅僅看查詢語句,這可以加快的開始步伐,并且還促進(jìn)開發(fā)的過程使其更有效。SchemaSpy的另一個優(yōu)點(diǎn)是,他是一個命令行工具,在每次執(zhí)行后才生成html頁面,所以特別適合用于crontab中,使得模型改變后能自動調(diào)整頁面。很不錯,是吧?

這個工具使用起來簡單明了,可以幫你做很多的事。主要是,如果你的數(shù)據(jù)庫有一個外鍵,你就偷著樂吧,如果沒有,也不要太絕境,你還有更多的工作等著你。絕大多數(shù)情況下,SchemSpy可以出色的完成任務(wù),但是有時候你需要以元數(shù)據(jù)文件的形式給它一點(diǎn)點(diǎn)的信息。

安裝SchemaSpy及其相關(guān)

下載SchemaSpy最新版的jar文件(書寫本文時的版本是5.0.0)

確認(rèn)你有一個能運(yùn)行于你的操作平臺的Java JRE

你需要一個你所用數(shù)據(jù)庫的Java驅(qū)動——我在使用MySQL Connector/J

安裝graphiz包

創(chuàng)建 mysql.properties文件

當(dāng)需求尚不明確時,我喜歡這樣建立一下,以便讓命令行能又短又整潔。這是我為我的Percona Server 5.6.10沙箱所使用的屬性文件:

復(fù)制代碼代碼如下:

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的例子:

 

 
  1. CREATE TABLE `parent` ( 
  2. `parent_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  3. PRIMARY KEY (`parent_id`) 
  4. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 
  5.  
  6. CREATE TABLE `child_A` ( 
  7. `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  8. `parent_id` int(10) unsigned DEFAULT NULL, 
  9. PRIMARY KEY (`id`) 
  10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 
  11.  
  12. CREATE TABLE `child_B` ( 
  13. `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  14. `parent_id` int(10) unsigned DEFAULT NULL, 
  15. PRIMARY KEY (`id`), 
  16. KEY `parent_id` (`parent_id`), 
  17. CONSTRAINT `child_B_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`parent_id`) 
  18. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 

請注意,在表child_A里有一個隱含的通過parent_id作為外鍵關(guān)聯(lián)到parent的關(guān)系,但在表child_B中建立了一個顯式的外鍵parent_id。這會影響SchemaSpy如何辨別關(guān)系,以及你是否需要提供一個提示。

運(yùn)行SchemaSpy(有外鍵)

如果沒有元數(shù)據(jù)文件,你運(yùn)行SchemaSpy,你將能看到parent 表和child_B表的關(guān)系如下圖所示:

MySQL結(jié)合使用數(shù)據(jù)庫分析工具SchemaSpy的方法

表child_A也能被加進(jìn)來顯示,如果你的標(biāo)簽指出了他們關(guān)系框,但是這個通常只能在你的子表和父表使用完全一樣的名字(本例中parent_id)時候才能起作用。你的環(huán)境看起里就像是許多商店,在父表中名字是id,在他其的子表他們代表為parent_id——這情景對開發(fā)者可能比較熟悉,但是對SchemaSpy根本沒有任何的幫助。那就是需要元數(shù)據(jù)文件來大顯身手的時候。

MySQL結(jié)合使用數(shù)據(jù)庫分析工具SchemaSpy的方法

配置元數(shù)據(jù)文件

元數(shù)據(jù)文件是一個XML格式的。下面的配置實(shí)例是用來把child_A表鏈接到parent表。

 

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <schemaMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3. xsi:noNamespaceSchemaLocation="http://schemaspy.sourceforge.net/xmlschema/2011/02/05/schemaspy.meta.xsd"
  4. <comments> 
  5. Main Production Database. Percona, Michael Coburn 
  6. </comments> 
  7. <tables> 
  8. <table name="parent" comments="Parent table"
  9. <column name="parent_id" primaryKey="true"
  10. </column> 
  11. </table> 
  12. <table name="child_A" comments="Non-FK relationship, implicit relationship to parent"
  13. <column name="id" primaryKey="true"
  14. </column> 
  15. <column name="parent_id"
  16. <foreignKey table="parent" column="parent_id"/> 
  17. </column> 
  18. </table> 
  19. </tables> 
  20. </schemaMeta> 

更多的復(fù)雜配置例子的可以訪問。

運(yùn)行SchemaSpy

下面的語法是連接MySQL數(shù)據(jù)庫,SchemaSy同時對其他大多數(shù)流行的關(guān)系數(shù)據(jù)有很好支持。

 

 
  1. java -jar schemaSpy_5.0.0.jar -t mysql -u msandbox_ro -p msandbox -meta schemaspy.meta.xml -o /var/www/schemaspy/ 

-o選項(xiàng),標(biāo)識SchemaSpy的輸出文件目錄,要確定這個目錄可以被web服務(wù)器所操作。需要提及的是,我通過在jar包所在目錄建立一個mysql.properties文件,這樣我可以不用輸入任何的服務(wù)器:端口以及數(shù)據(jù)庫名稱的信息。

瀏覽SchemaSpy輸出

三個表的完整的關(guān)系視圖如下圖所示:

MySQL結(jié)合使用數(shù)據(jù)庫分析工具SchemaSpy的方法

收尾感想

盡管我提及到了關(guān)系欄,SchemaSpy最有用的功能。為了避免SchemaSpy只有這個功能這樣的假象,我要提及一下更多的功能欄:

表——名稱,子表數(shù)量,父表,列計(jì)數(shù),行計(jì)數(shù),還有注解--大量用于高層次預(yù)覽表大小以及一種快捷的方法是,用瀏覽的搜索屬性定位到特定的表。

限制——列出數(shù)據(jù)庫中明確的外鍵限制(這不包括通過元數(shù)據(jù)文件配置的限制!)。

異常——基于名字指出可能的字段/表的關(guān)系,沒有索引的表,標(biāo)識為可空的字段和唯一字段(吐了!),單列表,子增長字段的名稱;空字符而不是實(shí)際sqlnull值的表;在發(fā)生重大錯誤時候,這可以作為一個大體的數(shù)據(jù)庫檢查項(xiàng),或者細(xì)節(jié)需求的瀏覽。

字段——庫總所有字段的列表,很方便通過名稱篩選來查看是否有忽略的明確限制,然后把它們寫到你的元數(shù)據(jù)文件中。

貢獻(xiàn)——這是一個自由軟件,John Currier請求得到你的捐獻(xiàn),一般它能有更多的理由來花費(fèi)更多的精力和時間來維護(hù)這個軟件,而不僅僅是他老婆的抱怨。

最后,你不要忘了,把配置好的SchemaSpy寫到crontab來實(shí)現(xiàn)自動化。

如果正在使用其他的ERD工具,和SchemaSpy相比較怎么樣?請通過評論暢所欲言。謝謝你有耐心讀完本文。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 涞源县| 灌云县| 贵德县| 霍林郭勒市| 济宁市| 林西县| 萨嘎县| 阳新县| 尉犁县| 东宁县| 思南县| 石家庄市| 嵩明县| 专栏| 阳谷县| 泸州市| 鹤山市| 北海市| 黄骅市| 观塘区| 五指山市| 德昌县| 霍州市| 津南区| 利辛县| 奈曼旗| 蓝山县| 和林格尔县| 九台市| 务川| 靖安县| 淳化县| 乌拉特前旗| 惠州市| 盱眙县| 定兴县| 宜章县| 绥宁县| 昆山市| 上蔡县| 灵石县|