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 hội tụ cùng 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 khóa bảng lâu.
- Contract: khi code cũ không còn dùng, mới xóa cột/bảng cũ.
Nguyên tắc: luôn có đường lùi (rollback); tránh ALTER khóa 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ũ).