Yeah, that’s how it’s supposed to work. If you launched a new app and attached a database during the setup process, it would do the exact same thing
As for why it works this way, it makes things a lot easier when your database (or other services) are kept separate. For example, if you needed to scale your database to have three nodes spread geographically, for latency reasons or redundancy, you could do that separate from you app.
Or, let’s say, an app suddenly gets a ton of traffic. You’d probably want to increase the number of hosts for that app, without necessarily scaling the database in the exact same way.
There are a couple of other reasons, like not needing to update the base app image with postgres updates for example, but overall it just tends to make things easier and more flexible.