J0k's answer is informative but doesn't really answer the question in layman's terms. ESP. regarding the single vs. multiple questions.
The difference is not really single vs. multiple instances, but more one of instantiated vs. uninstantiated.
Very Simply:
You use the Table functions when you don't yet have an instance of the object you want to read or manipulate.
You use the Class functions when you already have an instance of the object and you want to save it, update it, or retrieve more information(related objects) about it.
Often Table functions are accessed from Class functions
More Complexly:
Often, with good design, you will need to create methods in both the regular Class methods and the Table methods.
Say you have a Customer with a one to many relationship to Purchases (which has a one to many relationship to Products)
Say you want to write a method or getting all of a Customer's Products.
in Customer.class.php you create a:
public function getProducts(){}
you create this in the regular class, because you'll only be interested in a what products a customer has once you have your customer
this might call something like:
Doctrine_Core::getTable('Product')->getByCustomerId($this->get('id')
Here, you may not have any Product instances yet, but you want to retrieve them, so this should go in the Table class.
The reason why this doesn't simply break down into Single vs. Multiple is:
if you were to make a function that refunds all Products belonging to a Customer. You might be dealing with Multiple Products, but you wouldn't want to create your functionality just in the table. You may need to make an API call to your payment processor, you may need to check the refund period on each products, ETC.
Instead, you create Table Functions to retrieve the right data, and then manipulate that data by creating Class Functions.
Note that I see good programmers get this 'wrong' all the time. This often comes down to a matter of individual style.