Bỏ qua để đến nội dung

Forward engineering

Forward engineering là chiều xuôi của quy trình: từ data model đã thiết kế, Hackolade Studio sinh ra artifact chạy được cho công nghệ đích — script tạo bảng, schema file, đặc tả API… Model vì thế không dừng ở vai trò tài liệu: nó là nguồn chân lý (source of truth) mà từ đó schema thật được tạo ra.

Artifact sinh ra thay đổi theo target technology của model:

TargetArtifact sinh ra
Database quan hệ (PostgreSQL, Oracle, SQL Server, MySQL…)Script DDL (Data Definition Language) tạo bảng, kèm constraint, index và các lệnh cần thiết
MongoDBScript tạo collection (dbCreateCollection)
Cassandra / ScyllaDBScript CQL (Cassandra Query Language)
Neo4jScript Cypher
Định dạng trao đổi dữ liệuAvro Schema, gRPC/Protobuf (Protocol Buffers), Parquet
APIĐặc tả OpenAPI/Swagger
Mọi targetJSON Schema / YAML Schema, document dữ liệu mẫu JSON/YAML, file Excel

Ngoài xuất ra file, với các target database bạn có thể apply trực tiếp script vào một instance đang chạy — khai báo tham số kết nối và thông tin đăng nhập (lưu mã hóa trên máy bạn) rồi để Hackolade thực thi. Mọi chức năng đều có mặt trong GUI (Graphical User Interface), CLI (Command-Line Interface) và Docker container.

Một chi tiết hữu ích: mọi object trong model có thuộc tính isActivated (bật mặc định). Tắt nó đi, object bị loại khỏi (hoặc bị comment trong) kết quả forward engineering — tiện khi bạn muốn giữ một phần thiết kế trong model nhưng chưa muốn đưa vào schema thật.

Với model bán lẻ ở bài thiết kế mô hình (bảng khách hàng và đơn hàng, target PostgreSQL), forward engineering cho ra script kiểu như sau — đầy đủ khóa chính, khóa ngoại đúng như đã vẽ trên ERD (Entity-Relationship Diagram):

CREATE TABLE IF NOT EXISTS khach_hang (
ma_kh VARCHAR(10) NOT NULL,
ho_ten VARCHAR(100) NOT NULL,
dien_thoai VARCHAR(15),
tinh_thanh VARCHAR(100),
CONSTRAINT khach_hang_pk PRIMARY KEY (ma_kh)
);
CREATE TABLE IF NOT EXISTS don_hang (
ma_dh VARCHAR(12) NOT NULL,
ma_kh VARCHAR(10) NOT NULL,
ngay_dat DATE NOT NULL,
tong_tien NUMERIC(15,0),
CONSTRAINT don_hang_pk PRIMARY KEY (ma_dh),
CONSTRAINT don_hang_khach_hang_fk FOREIGN KEY (ma_kh)
REFERENCES khach_hang (ma_kh)
);

Điểm mấu chốt: bạn không viết tay script này. Sửa model, sinh lại — script luôn khớp thiết kế.

Delta model và ALTER script — migration có kiểm soát

Phần tiêu đề “Delta model và ALTER script — migration có kiểm soát”

Tạo schema lần đầu chỉ là một nửa câu chuyện; phần khó là thay đổi schema đang chạy. Hackolade xử lý bằng tính năng so sánh hai model (Compare & Merge):

  • Chọn một model làm baseline, so với model thứ hai — có thể là phiên bản thiết kế mới hơn, hoặc model vừa reverse engineer từ instance production (để biết thực tế đã lệch thiết kế ra sao).
  • Kết quả gồm delta model (ghi nhận khác biệt ở từng cấp object giữa hai bên) và ALTER script — các lệnh SQL chuyển schema từ trạng thái cũ sang mới. Để an toàn, mọi lệnh DROP đều bị comment sẵn vì có nguy cơ mất dữ liệu; bạn chủ động mở từng lệnh sau khi đã cân nhắc.
  • Trong GUI, ALTER script sinh qua Tools > Forward-Engineer > Alter Script; qua CLI dùng lệnh compMod (so sánh) và forwEng (sinh script).

Tính năng này hỗ trợ nhiều target quan hệ và analytics (PostgreSQL, Oracle, SQL Server, MySQL/MariaDB, Snowflake, BigQuery, Databricks, Redshift, Synapse, Teradata, Cassandra, ScyllaDB, Hive…) và yêu cầu Professional Edition hoặc Workgroup Edition.

Không có forward engineering, thay đổi schema thường diễn ra kiểu: sửa tay trên môi trường dev, rồi lặp lại (và hy vọng nhớ đủ) trên staging và production — mỗi môi trường một dị bản. Với Hackolade, quy trình đổi chiều:

  1. Thay đổi bắt đầu từ model — được review như review thiết kế; file model đưa vào Git để có lịch sử phiên bản.
  2. ALTER script sinh từ so sánh model, không viết tay — cùng một script áp dụng tuần tự cho từng môi trường.
  3. Chạy qua CLI trong pipeline CI/CD (Continuous Integration/Continuous Deployment) khi team muốn tự động hóa, hoặc chạy tay có kiểm soát.

Schema vì thế tiến hóa như code: có nguồn duy nhất, có diff, có review — thay vì “sửa nóng” từng nơi.

  • Sinh ALTER script rồi chạy ngay cả các lệnh DROP — hãy giữ thói quen đọc lại phần bị comment trước khi mở.
  • Sửa trực tiếp script sinh ra thay vì sửa model — lần sinh sau các chỉnh sửa tay sẽ không còn; hãy để model luôn là nguồn chân lý.

ALTER script sinh từ việc so sánh hai model — tìm hiểu kỹ cơ chế đó tại So sánh và merge model.

BSD Insight là đối tác triển khai Hackolade tại Việt Nam — liên hệ tư vấn.

Chia sẻ: