But when you sign a transaction, you do it from a specific private key which corresponds to a unique public key which is the address, no?
Sort of. You sign it with each private key that corresponds to the output of a previous transaction that is being claimed by the current transaction.
So to check whether a transaction is valid, the network checks the block chain to see if the transactions involving that address add up. Or am I missing something here?!?
You might be. I think you're thinking it does this:
1) Check the signature to prove the transaction came from the owner of the address.
2) Find unclaimed bitcoins for that address and use them.
But it actually works like this:
1) For each 'input' to this transaction, find the corresponding 'output' of a previous transaction.
2) Check the signature(s) on this transaction to confirm that the corresponding output of a previous transaction is validly claimed.
That is, the validation is per input to a transaction, not per transaction. Transactions can claim inputs using signatures with different keys.
Transactions have inputs that gather bitcoins into a pile and the outputs that distribute that pile. The inputs can come from a variety of different previous transactions sent to different addresses.