Database

Designing Database Schema Migrations with Atlas

Written by Danang

Managing database schema changes (migrations) often poses a major challenge when working in teams. Using manual approaches like writing raw SQL files is prone to conflicts and human errors. This is where Atlas shines as a modern migration solution.

Declarative vs. Imperative Approach

Most traditional Go migration libraries (like golang-migrate) use an imperative model: you write explicit SQL commands like CREATE TABLE or ALTER TABLE. If there is a typo, the migration could fail halfway.

Atlas uses a declarative approach: you describe the desired final state of the database (e.g., from GORM structs), and Atlas automatically calculates the safe transition SQL (diff) required.

Integrating GORM with Atlas

Atlas can read GORM structs directly using a custom loader, comparing them to a local database to generate migration files automatically.

# Command to generate a new migration file
atlas migrate diff migration_name --env local

Conclusion

By combining declarative safety from Atlas and GORM mapping convenience, developers can change database schemas confidently, with minimal risk, and integrate them smoothly into CI/CD pipelines.