Are migrations used only when you're making changes to a database? Does it just allow the developer to avoid using raw SQL when working with databases?
Are migrations used only when you’re making changes to a database? Does
it just allow the developer to avoid using raw SQL when working with
databases?
Right. Not only does it allow the developer to use a much easier (IMO) manner to do things like add, modify columns, tables, etc, it also keeps a record of the progression of your database schema. Migrations also include the ability (assuming it is used) to roll back any changes with a command from a terminal. At times a migration may also contain data-transforming tasks or really any other ruby code one needs to write to complete the migration.
Please, don't forget that the migrations are also provide u a pure ruby DSL to operate over your DB structure. It means that they are also independent from the DB driver (oracle or mysql or postgres).
Yes, this is the key issue on migrations: independent of DB engine.
As to completely avoid the programmer using SQL: this is true when we’re talking about DDL (Data Definition Language), i.e., when we define the structure, but you can still use ‘raw’ SQL when doing DML (Data Manipulation Language). This is not usually recomended, since you attach yourself to a specific DB engine, you should use an ORM like Active Record.
Cheers,
:jb
Yes, this is the key issue on migrations: independent of DB engine.
Yeah, and the coolest thing is you become fearless of schema changes (assuming you also write good test coverage). Really, it is so easy to change and rename things. I have become a perfectionist on field naming whereas in the past in my non-Rails days I would cringe at having to do so…