A consuming team reading a table directly means the column names are a public API, and renaming one is a coordinated release.
CREATE VIEW catalogue_products_v1 AS
SELECT id, sku, display_name AS name, price_cents
FROM products;
GRANT SELECT ON catalogue_products_v1 TO 'fulfilment'@'%';
REVOKE ALL ON products FROM 'fulfilment'@'%';
-- the underlying column can now be renamed without
-- coordinating anything.
The grant is what makes this real rather than advisory — without revoking access to the table, the view is a suggestion. Versioning the view name gives the same deprecation path as an HTTP API, with the same requirement to measure usage before removing v1.