Federation is functional partitioning. Instead of one giant database holding every table, you draw a line along business boundaries and give each domain its own database. A social app might run a users database, a posts database, a messages database, and an analytics database, each on its own server or its own Postgres instance.
This is different from sharding. Sharding splits one table across many machines by a key like user_id, so each shard holds rows 0 to 1M, 1M to 2M, and so on. Federation splits by what the data is about, not by row ranges. You can run both at once: federate first into a users database, then shard that database when it gets too big.
One naming warning. The phrase data federation is also used for query federation, where a tool like Trino, Presto, or Amazon Athena queries many separate sources (Postgres, S3, MongoDB) through one SQL endpoint without moving the data. In a system design context, when someone says they federated their database, they almost always mean the functional split described here.