Handling newsletter mail subscribers data
For your first problem, you may have to do it in stages. Here's one approach:


Create the new INT column - BUILDING_ID_INT
Create a new table that maps the building name text to Integer values
Write a program to populate the new BUILDING_ID_INT column based on the data in the current Building column and the values in the table created in #2.
Re-write all of your existing code to use BUILDING_ID_INT.
Delete the old Building column.


For the second problem, where the database structure changes between the time a user makes a request, and the time they confirm their request, it will vary on the kind of change. If an old column is being removed, then there shouldn't be any problem because your current insert statement should not be inserting data that's not insertable. For new columns that are added, default values can be used of it's non-nullable, and process will have to be introduced to handle these. For small volumes, it can be manually asking these users to send the additional new information. For large volumes, you'll want to write code.