Quote:
I've heard other people say that the table-per-subclass is a bit more OO like
Syntactically, it looks oo-like, because one table reflects excactly those attributes declared in one class. Semantically, it isn't, because in OO, when an instance of a subclass is created, the instance will also contain all attributes of the superclass. This is reflected better in the table-per-class-hierarchy approach, where you always get all data of one object.
There is nothing like a really oo-like relational database structure. This is called impedance mismatch between OO and RDBM, and it was the original reason that people started thinking about ORM ;-))
Quote:
When objects of the superclass are stored (assuming its not abstract) then it takes up a row that has many columns that it will never use.
Logically true. Physically, every serious database shouldn't use space for empty attributes.
Quote:
As we add new subclasses we must change the schema
That's true. If this happens a lot, it may be a nuisance. However, adding new subclasses is a major software change. If such a change occurs, isn't it likely that new attributes will be created, apart from new subclasses? In that case, you would have to touch your table structure anyway.
Quote:
Have to use a discriminator
Where's the problem? This is handled completely transparently by Hibernate.