This is fine until you need atomic transactions that cross the boundary of two "self-contained" systems. Now you have a big problem. Distributed atomic transactions are really hard.
Some databases actually do that kind of thing, after years of painful development and major theory work. But the trend towards using databases as mere object stores, and having each component of a microservice architecture use its own database, means you can't let the database do the heavy lifting on interlocking.
End result: "What happened to my order?", and "Why did I get two of these?"