據(jù)庫可視化設(shè)計(jì)與跨庫遷移)
告別手寫DDL用ChartDB智能查詢一條命令完成數(shù)據(jù)庫可視化設(shè)計(jì)與跨庫遷移【免費(fèi)下載鏈接】chartdbDatabase diagrams editor that allows you to visualize and design your DB with a single query.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ch/chartdbChartDB 是一款開源的數(shù)據(jù)庫圖表編輯器核心賣點(diǎn)是一條智能查詢在數(shù)據(jù)庫里跑一段 SQL就能把整套表結(jié)構(gòu)自動變成可視化 ER 圖并支持 DBML 導(dǎo)入導(dǎo)出、多數(shù)據(jù)庫方言識別和 AI 驅(qū)動的跨庫腳本生成。如果你受夠了靠想象理解別人留下的數(shù)據(jù)庫、或者每次遷移都要逐條改寫建表語句這篇文章帶你從零走完查結(jié)構(gòu) → 看圖 → 改設(shè)計(jì) → 跨庫導(dǎo)出的完整流程。一個(gè)熟悉到想哭的場景接手一個(gè)沒有文檔的數(shù)據(jù)庫新項(xiàng)目開工你拿到一個(gè)跑了兩年的生產(chǎn)庫。沒有 ER 圖沒有設(shè)計(jì)文檔唯一的說明書是幾十張建表 SQL 和同事口頭留下的只言片語。你只能打開客戶端SHOW TABLES、DESCRIBE、查外鍵……拼拼湊湊在腦子里還原業(yè)務(wù)全貌然后在白板上畫一張誰也不敢保證正確的草圖。更痛苦的是后面的改動要加一張表、改一個(gè)字段類型得手寫 DDL、反復(fù)測試要換數(shù)據(jù)庫比如從 MySQL 遷到 PostgreSQL那基本等于把 DDL 全部重寫一遍AUTO_INCREMENT要改SERIAL反引號要改雙引號類型映射錯(cuò)了還得靠報(bào)錯(cuò)一點(diǎn)點(diǎn)排查。這個(gè)場景里真正缺的不是 SQL 能力而是一條把數(shù)據(jù)庫結(jié)構(gòu)翻譯成人能看懂的形式的捷徑。ChartDB 做的就是這件事。ChartDB 是什么一個(gè)不需要密碼的網(wǎng)頁版數(shù)據(jù)庫設(shè)計(jì)器ChartDB 是一個(gè)純前端的開源項(xiàng)目當(dāng)前版本 1.20.1不需要安裝客戶端也不需要你提供數(shù)據(jù)庫密碼。它通過三種方式把結(jié)構(gòu)搬進(jìn)畫布智能查詢Smart Query在庫里執(zhí)行它生成的只讀查詢拿到 JSON 結(jié)果貼回來自動成圖直接粘貼 DDL把現(xiàn)有的建表腳本粘進(jìn)去自動解析識別方言導(dǎo)入 DBML 文件把文本形式的數(shù)據(jù)庫建模語言變成可視化圖表選擇完數(shù)據(jù)庫類型向?qū)o出對應(yīng)的操作指引。整個(gè)過程不需要數(shù)據(jù)庫賬號密碼只要你有執(zhí)行查詢的權(quán)限——從安全角度講這比那些要你填連接串、存密碼的工具讓人放心得多。第一步一條只讀查詢把整個(gè)庫變成可視化ER圖這是 ChartDB 最魔法的地方。以 PostgreSQL 為例進(jìn)入應(yīng)用后它會為你生成一段查詢腳本這段腳本只做讀取操作從系統(tǒng)目錄中提取表、字段、主鍵、外鍵、索引、約束、自定義類型、視圖等元數(shù)據(jù)并以 JSON 輸出。關(guān)鍵的一點(diǎn)是這段腳本針對不同數(shù)據(jù)庫做了專門優(yōu)化。源碼里src/lib/data/import-metadata/scripts/目錄下按數(shù)據(jù)庫分別維護(hù)了腳本——比如 PostgreSQL 的腳本會額外處理 Supabase 的auth、storage等內(nèi)置 schema自動過濾掉不污染你的圖遇到 TimescaleDB 也會跳過timescaledb_前綴的系統(tǒng)表。也就是說你在 Supabase 或 Timescale 上跑它得到的依然是一張干凈的業(yè)務(wù)結(jié)構(gòu)圖。拿到 JSON 后貼回 ChartDB一張完整的 ER 圖瞬間生成表用不同顏色區(qū)分字段標(biāo)注主鍵PK、外鍵FK和非空約束關(guān)系線直接畫出外鍵關(guān)聯(lián)。這個(gè)能力對應(yīng)的解析入口在src/lib/data/sql-import/里面按方言拆分了 PostgreSQL、MySQL、SQL Server、SQLite、Oracle 各自的解析器連pg_dump導(dǎo)出的備份文件格式都能識別。看到上圖這種效果你就能理解為什么說它一條查詢搞定可視化——之前幾個(gè)小時(shí)的人工梳理現(xiàn)在壓縮成了跑查詢、粘貼、看圖三步。第二步在畫布上自由編輯用DBML把設(shè)計(jì)變成可版本控制的文本圖生成之后ChartDB 不只是給你看的它是個(gè)真正的編輯器。你可以直接拖拽調(diào)整表的位置按業(yè)務(wù)模塊分組擺放在畫布上增刪字段、改類型、加索引、加檢查約束右鍵創(chuàng)建表之間的關(guān)系調(diào)整基數(shù)1:1、1:N、N:M用區(qū)域Area給表分組上底色把訂單模塊用戶模塊分得清清楚楚內(nèi)置示例里的自行車商店數(shù)據(jù)庫就是很好的示范客戶信息、訂單管理、產(chǎn)品信息、庫存管理四塊區(qū)域用不同顏色區(qū)分一張圖就能講清楚整個(gè)業(yè)務(wù)域。改完設(shè)計(jì)怎么和團(tuán)隊(duì)協(xié)作答案藏在 DBML 里。DBMLDatabase Markup Language是一種用純文本描述數(shù)據(jù)庫結(jié)構(gòu)的建模語言比 SQL DDL 更簡潔、更適合 diff 和版本控制。ChartDB 的 DBML 能力集中在src/lib/dbml/目錄下拆成三個(gè)模塊dbml-import/解析 DBML 文本還原成內(nèi)部圖表結(jié)構(gòu)支持復(fù)合主鍵、枚舉、表級檢查約束等復(fù)雜特性dbml-export/把當(dāng)前圖表導(dǎo)出為標(biāo)準(zhǔn) DBML保證雙向轉(zhuǎn)換一致apply-dbml/把一段新的 DBML 增量應(yīng)用到現(xiàn)有圖表上用于同步外部變更一份典型的 DBML 長這樣Table users { id int [pk, increment] username varchar(50) [unique, not null] email varchar(100) [unique, not null] created_at timestamp [default: now()] } Table posts { id int [pk, increment] title varchar(100) [not null] content text user_id int [ref: users.id] status enum(draft, published, archived) indexes { (user_id, created_at) [name: idx_user_posts] } }把 DBML 放進(jìn) Git 倉庫后每次設(shè)計(jì)變更都有清晰的 diff 記錄評審時(shí)打開 ChartDB 看圖比讓同事硬讀一段 DDL 高效得多。這套文本建模 可視化編輯的組合拳正好補(bǔ)上了傳統(tǒng) SQL 腳本難以直觀展示表關(guān)系、又不便版本管理的短板。第三步跨數(shù)據(jù)庫遷移AI生成與確定性轉(zhuǎn)換雙保險(xiǎn)數(shù)據(jù)庫遷移是另一個(gè)高頻痛點(diǎn)。ChartDB 在導(dǎo)出 SQL 時(shí)給了兩條路線路線一確定性轉(zhuǎn)換純本地、可復(fù)現(xiàn)。src/lib/data/sql-export/cross-dialect/里實(shí)現(xiàn)了 PostgreSQL 到 MySQL、MariaDB、SQL Server 的確定型轉(zhuǎn)換SERIAL映射成AUTO_INCREMENT數(shù)組類型給出對應(yīng)處理默認(rèn)值、索引類型逐項(xiàng)翻譯遇到無法完整轉(zhuǎn)換的特性會在生成的腳本里加注釋說明。對于不想依賴外部服務(wù)、要求結(jié)果可預(yù)期的場景這是首選。路線二AI 驅(qū)動的任意方言生成。在構(gòu)建時(shí)配置VITE_OPENAI_API_KEY或自定義推理端點(diǎn)與模型名導(dǎo)出時(shí)就能讓 AI 分析當(dāng)前圖表直接生成目標(biāo)數(shù)據(jù)庫的 DDL。MySQL 遷 PostgreSQL、SQLite 遷 MariaDB……語法差異、類型映射、約束保留都由模型處理適合快速拿到一版可用的遷移腳本。像上圖這種多模塊的復(fù)雜系統(tǒng)靠肉眼在腳本里找外鍵關(guān)系幾乎不可能但生成遷移腳本時(shí)AI 和轉(zhuǎn)換器都能基于完整的圖結(jié)構(gòu)來工作——先看清楚關(guān)系再決定怎么建表遷移的準(zhǔn)確性自然比對著原始 DDL 硬改高一個(gè)檔次。本地跑起來5分鐘擁有自己的數(shù)據(jù)庫設(shè)計(jì)臺ChartDB 的部署也足夠輕量。開發(fā)模式一條命令git clone https://gitcode.com/GitHub_Trending/ch/chartdb npm install npm run dev生產(chǎn)構(gòu)建只要npm run build想啟用 AI 導(dǎo)出能力構(gòu)建時(shí)加上VITE_OPENAI_API_KEY你的Key即可。如果你更喜歡容器化官方 Docker 鏡像一條命令搞定docker run -e OPENAI_API_KEY你的Key -p 8080:80 ghcr.io/chartdb/chartdb:latest打開http://localhost:8080瀏覽器就是你的設(shè)計(jì)工作臺。由于是純前端應(yīng)用本地?cái)?shù)據(jù)存在瀏覽器里隱私敏感的設(shè)計(jì)方案不用出本機(jī)。寫在最后從看庫到設(shè)計(jì)庫的工作方式升級回到開頭那個(gè)接手舊庫的場景現(xiàn)在你可以跑一條只讀查詢拿到全貌在畫布上把表拖成看得懂的模塊圖導(dǎo)出 DBML 提交到倉庫作為活文檔改動時(shí)有圖可依、有 diff 可查要遷移時(shí)一鍵生成目標(biāo)方言腳本。同樣的工作從靠腦子硬扛變成了一條清晰的生產(chǎn)線。ChartDB 采用 AGPLv3 開源項(xiàng)目還內(nèi)置了幾十套社區(qū)模板用戶認(rèn)證、電商、CMS 等常見場景的完整設(shè)計(jì)直接拿來改比自己從零畫快得多。如果你也厭倦了在 SQL 和想象力之間來回切換不妨現(xiàn)在就 clone 一份跑起來把第一個(gè)數(shù)據(jù)庫畫成圖——你會發(fā)現(xiàn)數(shù)據(jù)庫設(shè)計(jì)本該這么輕松?!久赓M(fèi)下載鏈接】chartdbDatabase diagrams editor that allows you to visualize and design your DB with a single query.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ch/chartdb創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考