You can factor the redundancy out between DatabaseType and OperatingSystem by eliminating the attributes for mult-az, and have RdsInstanceType hold a collection of DatabaseTypes, where an instance can be either multi-az or not. This allows DatabaseType and OperatingSystem to share a common base class called CategoryType which has most of the attributes and code shared in common.