In my opinion is a bad idea to use cascade update since it would do a lot of unnecessary work on dbside in case of pk change.
This highly depend on the number of users your application has, think to an application where you have 300.000 users
When I matter about size is not about disk occupation, this is not a matter of discussion nowadays.
I always says that if your business is in need to buy a new storage it means you can afford it.
Think about indexes…
This is an optimistic case where you have only 2 char. 2 char goes only for a bunch of records, 676 max if I’m not wrong.
in mysql, if tyou use utf8, it will occupy
(2 char x 2 Byte) +1 Byte storage = 5 Byte
With an unsigned integer 4Byte (I always use unsigned for pk since autoincrement do not generate negatives value) I can store 4294967295 rows
So to hold 676 row is sufficient a 2 Byte smallint if not even a 1Byte tinyint unsigned if your cities are less than 256
When you spread this across 300.000 record it start to be something.
My concern is about indexes. Index performance are very dependent on index size, the small is the faster is.
Index are used on every operation, insert update delete and select.
Db keep indexes in memory (if they can) for faster access, the smaller the index the more can be in memory.
When you come to select is where you see the difference from good designed indexes and bad one, especially when you join multiple table and do filtering on data.
In a project my first task was to speedup the application, didn’t touch a line of code beside a couple sql join badly designed. Just added appropriate indexes and from more than 30 sec the load time dropped to less than 2 sec. This just by using combined indexes. But for this to be efficient indexed field must be as little as possible in order to shrink index size.
If I’m not wrong indexes performance degradation is on a logarithmic curve, this means that after a certain point performance degradation will be worse and worse at every record added
Changing PK from char to integer in production… good luck