Class inheritance is one of the major features of object-oriented programming languages. It provides for advanced conceptual modeling and code and structural reuse. However, fundamental differences between object-oriented programming and relational algebra obviate a straight forward mapping between domain models, designed for application logic, and relational data models, designed to persist the data. Research has proposed three different mapping strategies to persist inheritance hierarchies in relational databases (Figure 1).
What they all have in common is an inherent tradeoff between memory consumption and query performance. Depending on the actual characteristics of the inheritance structure at hand, each strategy has its strength and weaknesses. Consequently, the combination of inheritance characteristics and prioritization of non-functional requirements (memory consumption and query performance) leads to a decision for the appropriate strategy. Unfortunately, not all characteristics of the inheritance hierarchy can be defined in advance. Especially runtime characteristics, such as the distribution of objects along the hierarchy can rarely be determined at system's design time. This problem becomes even more serious for vendors of standard software, since they offer their software for a number of customers from different industries and various sizes.
In my research, I look at column-orientation, as a means to structure physically data in memory. In-memory column-oriented databases proof to be advantageous over traditional disk-based row-oriented storage technologies, both in terms of memory consumption and query performance. Additionally to that, it also seems to shift the tradeoff between those two requirements depending on the chosen mapping strategy. Both facts make column-orientation a promising fit for mapping inheritance hierarchies to relational databases.