Plain splits schema management in two.
Migrations handle what only you can do safely — data backfills, risky type changes.
Everything derivable from your models — indexes, constraints, NOT NULL, FK actions — moves to a "convergence" layer that reconciles the database.