0

[Open Source] #21 drawDB: Kiến trúc sơ đồ hóa Database hiện đại trên nền tảng SVG và React

Trong quy trình phát triển phần mềm, việc thiết kế sơ đồ thực thể mối quan hệ (ERD) thường gặp phải sự đứt gãy giữa bản vẽ ý tưởng và mã nguồn SQL thực tế. drawDB nổi lên như một công cụ chuyên biệt giúp thu hẹp khoảng cách này thông qua một bộ engine mạnh mẽ, cho phép chuyển đổi hai chiều giữa đồ họa vector và các phương ngữ SQL (Dialects) khác nhau.

🛠️ 1. Nền tảng công nghệ: Tối ưu hóa hiệu suất với React và Vite

Github: https://github.com/drawdb-io/drawdb

drawDB được xây dựng trên một ngăn xếp công nghệ hiện đại, tập trung vào tốc độ phản hồi và khả năng bảo mật dữ liệu:

  • Frontend Core: Sử dụng React 18 phối hợp cùng Vite. Việc tận dụng Vite không chỉ giúp quá trình đóng gói nhanh hơn mà còn cung cấp cơ chế Hot Module Replacement (HMR) cực kỳ chính xác, hỗ trợ lập trình viên tinh chỉnh các component đồ họa phức tạp mà không cần tải lại toàn bộ trạng thái.
  • Design System (Semi UI): Thay vì tự xây dựng UI từ đầu, dự án sử dụng bộ Semi UI của ByteDance. Đây là một lựa chọn kỹ thuật thông minh để đạt được sự nhất quán (Consistency) cấp độ Enterprise và hỗ trợ tốt cho Accessibility (khả năng tiếp cận).
  • Local-first Storage (Dexie.js): Để đảm bảo quyền riêng tư tuyệt đối cho các schema doanh nghiệp, drawDB áp dụng triết lý Local-first. Dữ liệu được quản lý thông qua Dexie.js (một wrapper mạnh mẽ của IndexedDB), cho phép thực hiện các transaction dữ liệu ngay trên trình duyệt với độ trễ gần như bằng không.

🏗️ 2. Trụ cột kiến trúc: Sự kết hợp giữa SVG và Atomic Context

Điểm khác biệt lớn nhất của drawDB so với các công cụ dùng Canvas chính là việc chọn SVG (Scalable Vector Graphics) làm hạt nhân:

Tại sao lại là SVG thay vì Canvas?

  1. DOM Integration: Mỗi bảng, mỗi trường hay đường nối đều là một phần tử DOM thực thụ. Điều này cho phép ứng dụng gắn trực tiếp các Event Listeners (onMouseDown, onContextMenu) lên đối tượng, giúp mã nguồn sạch hơn và tận dụng được khả năng debug của trình duyệt.
  2. Kỹ thuật <foreignObject>: Đây là điểm sáng kỹ thuật trong dự án. drawDB nhúng các component HTML (như Input soạn thảo) vào bên trong không gian vector của SVG. Kỹ thuật này cho phép người dùng sửa dữ liệu trực tiếp trên sơ đồ mà vẫn giữ được tính chất thu phóng không vỡ nét (Lossless scaling).

Quản lý trạng thái phân mảnh (Atomic Context)

Để tránh hiện tượng "căng thẳng" hiệu năng khi sơ đồ có hàng trăm bảng, drawDB chia nhỏ trạng thái thành các Atomic Contexts: AreasContext, CanvasContext, DiagramContext. Khi một bảng di chuyển, hệ thống chỉ kích hoạt render lại (re-render) cho duy nhất bảng đó và các đường nối liên quan, thay vì render lại toàn bộ khung vẽ.


🔄 3. Phân tích chuyên sâu Luồng hoạt động (Architecture Workflow)

Luồng vận hành của drawDB là một chu trình khép kín từ tương tác đồ họa đến tuần tự hóa dữ liệu:

image.png

Giải mã các cơ chế kỹ thuật "Under the Hood":

  1. Dynamic Relationship Pathing: Trong mã nguồn calcPath.js, dự án áp dụng thuật toán hình học để tính toán tọa độ đường nối. Nó tự động xác định các điểm neo (Anchor points) tối ưu trên cạnh bảng và sử dụng đường cong Bezier để tránh việc các đường nối đâm xuyên qua nội dung văn bản bên trong bảng.
  2. SQL Transpiler & Mapping: Engine xuất khẩu của drawDB hoạt động như một trình biên dịch thu nhỏ. Nó duyệt qua cấu trúc JSON của sơ đồ và ánh xạ các kiểu dữ liệu tương ứng cho từng hệ quản trị (ví dụ: chuyển đổi SERIAL trong Postgres thành AUTO_INCREMENT trong MySQL).
  3. Reverse Engineering (Import SQL): drawDB tích hợp @dbml/core và các bộ parser SQL mạnh mẽ để phân tích (parsing) mã nguồn SQL có sẵn, sau đó tự động tính toán tọa độ để tái tạo lại sơ đồ thực thể một cách trực quan.

⚖️ 4. Đối chiếu giải pháp

Tiêu chí drawDB dbdiagram.io MySQL Workbench
Mô hình Visual-first (Kéo thả) DSL-first (Viết code) Desktop App truyền thống
Lưu trữ Local-first (Browser) Cloud-based Local File
Hiệu suất Cao (Render theo vùng) Cao (Text-based) Trung bình (Nặng nề)
Giá cả Mã nguồn mở (0$) Freemium Miễn phí

✅ Kết luận

drawDB là một minh chứng điển hình cho việc ứng dụng công nghệ Web để giải quyết các bài toán đồ họa kỹ thuật phức tạp. Bằng cách kết hợp SVG, Atomic State Management và cơ chế Transpilation SQL, dự án mang lại một công cụ làm việc chuyên nghiệp, bảo mật và cực kỳ linh hoạt cho các kỹ sư dữ liệu.


Lời kết: Hy vọng bản phân tích chuyên sâu này giúp bạn có cái nhìn mới về cách xây dựng các công cụ thiết kế trên nền tảng web. Nếu bạn quan tâm đến kiến trúc hệ thống, hãy để lại thảo luận hoặc Follow mình để đón xem những dự án mã nguồn mở thú vị tiếp theo!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí