Hibernate docs describe four database design strategies to support differentiation (inheritance).  IBM's Websphere Commerce uses a variation of the "joined table" strategy and I've found this to be the best fit for most subclass situations.  

The first table contains all superclass attribute types, the second table contains values.


The data for "Member_Id=1" might be retrieved for a "Member" subclass.   The data for "Member_Id=2" might be retrieved by a different subclass, "Retired_Member".

This strategy is relatively simple, there's only one join, a maximum of two tables per superclass type and it's dynamically extendable for new subclasses.   The attribute types are interpreted by code to format member values correctly.

AD1: Infrastructure with Cloud Formation
AD2: Messaging I/O
AD3: Abstract Factory
AD4: Database
AD5: Application Layer - Aspects
AD5: Application Layer - Canonical
AD5: Application Layer - Data Mapping
AD5: Application Layer - Protocol Adapter
AD6: Security