I think it amounts to "use views to decouple access to the table with a fixed interface" and "use triggers for migrating data between tables"
You can use the database's built-in support for instant DDL (algorithm=instant) for adding and dropping columns. And then use Percona's pt-online-schema-change for all other cases, since it supports foreign keys.
Or if you're using a physical replication setup -- for example AWS Aurora without any traditional binlog replicas -- you can get away with using the database's built-in "online DDL" (algorithm=inplace, lock=none) for quite a few other cases. Historically the main problem with that method is that it causes replication lag, but that's a non-issue if you're not using logical replication in the first place. So then you only need to fall back to pt-osc for the rarer ALTER cases which don't support online DDL.
MariaDB 10.8+ also has an option called binlog_alter_two_phase, which can allow you to use online DDL without causing much replication lag.
Your database is the last line of defense for data integrity.
Good luck doing that correctly and with good performance, especially in concurrent and multi-client system.
https://stackoverflow.com/questions/20842756/sql-indirect-fo...