Migration là thay đổi schema có phiên bản, chạy tuần tự — mỗi file một bước, lưu trong version control để mọi môi trường có cùng một schema (Flyway, Liquibase, Prisma Migrate...).
Để không downtime, tách thay đổi phá vỡ (breaking) thành các bước tương thích ngược — mẫu expand/contract:
- Expand: thêm cột/bảng mới (nullable hoặc có default); deploy code ghi cả cũ lẫn mới.
- Migrate: backfill dữ liệu theo lô (batch) để tránh khoá bảng lâu.
- Contract: khi code cũ không còn dùng, mới xoá cột/bảng cũ.
Nguyên tắc: luôn có đường lùi (rollback); tránh ALTER khoá bảng lớn giờ cao điểm; đổi tên cột = thêm cột mới rồi bỏ cũ (không rename trực tiếp vì phá client cũ).