One table per class
Easy to understand because of the one-to-one mapping.
Supports polymorphism very well as you merely have
records in the appropriate tables for each type.
Very easy to modify superclasses and add new
subclasses as you merely need to modify/add one table.
Data size grows in direct proportion to growth in the
number of objects.
There are many tables in the database, one for every
class (plus tables to maintain relationships).
Potentially takes longer to read and write data using
this technique because you need to access multiple tables.
This problem can be alleviated if you organize your database
intelligently by putting each table within a class hierarchy on different
physical disk-drive platters (this assumes that the disk-drive heads all
operate independently).
Ad-hoc reporting
on your database is difficult, unless you add views to simulate the
desired tables.
When there is significant overlap between types or
when changing types is common.