the when the site is first installed, the migrations run, the first one would probably create the table and the second one will check if the table has the Colum and add it if it’s missing.
The NullSetting, just lets the value be null, and given that you will be adding this to an exsiting table, and rows, you will want this, so all the existing values are still valid
Personally, i think the examples mix it all up a bit (mainly to keep it all in the same code files i think).
i preferer to separate out the migration plan to it’s own class, so you can see / alter it without looking at the code that actually starts / manages the migration process.
For neatness i also have folders per migration so i can see what i am doing for each one.
Some constants are better for tableNames etc, or you just get a typo and get lost in a migration (not that i have every done that! oh no. )