I am a huge fan of the way Magento has abstracted their database layers into multiple levels and collection model relationships.
This may not answer the question directly but could open the door to thinking about data base objects a bit differently.
The way you would call a single customer is something like:
$customer = Mage::getModel('customer')->load('20');
Where the getModel method instantiates a class that is magically loaded from an XML definition file. In this case let's say that it is called
Your basic model almost always extends from a parent class which handles database abstraction and that class extends from a generic object class which sets up magic getters and setters for all model classes. So if anything extends from the database abstraction it also picks up the getter and setter methods.
load('20') you are specifying that you would like to load the database object with the key
Now specifically on your question. Magento also uses relational mapping between each entity and their seed object. For example a customer can have many addresses. Their address is not naturally returned back as a part of the object, however if you wanted to get a particular attribute not included in the seed table you would do something like this:
$collection = $customer->getCollection()
A collection is basically just a list of database objects.
This becomes a well designed solution because the objects are not coupled to each other as a single entity. Instead, you can filter each association separately.
Please no comments about how none of the code here would work in Magento. This was for illustration