The first step in this analysis is use cases. Here are some of the use cases I have come up with. Note they are not talking about a particular tool or a particular solution, but the situation the user is in and what they want to accomplish.
My question to you is: which of these are like really important to you? Which ones would you love to see solved? And which ones am I completely missing?
By the way, I know there are a lot of possible refactorings, but I just list some obvious ones to give you the idea of what I'm thinking and get your feedback. Listing all possible refactorings would be a tome, not a blog.
What I'm more interested in is what are the changes you most commonly do and which would love do be able to do as you code.
Changing/Refactoring During Application Development
- Add a Table - A developer is modifying their application code and discovers they want to add a table. They want to do this with minimal interruption to their coding flow. For example, they could be writing a query that refers to a non-existent table and quickly add that table to the database.
- Rename a Column - A developer is modifying his application code and wants to rename a column with minimal interruptions to his application flow. This includes quickly finding and updating all other references to their column within his code.
- Add a Column - A developer is modifying her application code and realizes she needs a new column. She wants to add the new column to the database with minimal interruption to her coding flow.
- Change Column Type - A developer is modifying their application code and wants to change the type of a column with minimal interruption to her application flow. This includes quickly finding and updating all other references to her column that are impacted by the change.
- Initial Deployment - A developer has an application they want to deploy into testing or production. Their application includes a schema definition that needs to be applied to another database. He wants to create the schema as part of deploying the application.
- Upgrade - A developer has made changes to their application that involves changes to the schema. She wants to deploy the new version of the application, and wants to apply the schema changes without losing data.
- Review Changes - A developer has made changes to their database schema in his development database and wants to review and perhaps modify the set of changes.
- Publish Changes - A developer has made changes to her database schema and wants to make those changes available to others, either for review or so they can be applied to another database that is controlled and managed by someone other than the developer.
- Commit Changes to SCM - A developer wants to commit an application change to an SCM for version control and collaboration. Their application change includes schema changes, and the developer wants those changes to be included with the commit, so that other developers can apply those changes as part of upgrading the application in their workspace.