Two teams writing to one schema means every change is a negotiation, and there is no mechanism that says who owns what.
orders: { owner: fulfilment, writers: [fulfilment] }
order_lines: { owner: fulfilment, writers: [fulfilment] }
products: { owner: catalogue, writers: [catalogue] }
prices: { owner: catalogue, writers: [catalogue, pricing] }
# and the CI check: a migration touching a table this
# service does not own fails the build with the owner's
# name in the message.
The file is a convention until something enforces it, and the migration check is cheap enough to add in an afternoon. It also gives the useful artefact for free: a list of the tables with more than one writer, which is exactly the list of places where a boundary is missing.