Coinbase tells Alice a bitcoin deposit address via their webpage
Coinbase --(address)--> Alice | HTTP(s) when Alice visits the coinbase website
Alice deposit's 1btc into the coinbase address.
Alice --> Coinbase address | Standard bitcoin transaction recorded in blockchain
Coinbase notices that the address received 1btc and credits Alice in a private database
Alice account = 1btc | Essentially a SQL insert statement
Alice now sends Bob 1btc from her coinbase account. Bob's address also happens to be a coinbase address. Coinbase does NOT need to make this transaction on the blockchain.
Alice account - 1btc = 0btc | Essentially a SQL update statement
Bob account + 1btc = 1btc | Essentially a SQL update statement
Finally, Bob sends 1btc to a friend Charlie, but Charlie does not use coinbase. Coinbase must make a transaction on the blockchain.
Coinbase --> Charlie | Standard bitcoin transaction recorded in blockchain
As you can see, there were only 2 transactions recorded in the blockchain even though there were 3 total transactions. As long as both Alice and Bob trust coinbase to keep its DB correct, then they do not need the transaction recorded on the blockchain. Charlie doesn't care that the btc actually came from coinbase instead of Bob because the transaction has been recorded in the blockchain just like any other normal transaction.