One of the main characteristics of object-oriented database management systems is the explicit representation of relationships
between objects. A simple example for a query addressing these relationships arises, if we assume the object types
Company, and
Division with the relationship
has division from
Company to
Division. In this case a query might ask for the companies which have a division called “
strategy”. The query might start with the companies and navigate to the divisions which can be reached via the
has division relationship. Finally the query has to check if the name attribute of the
Division object is “
strategy”. Since there is no direct condition for the companies in the query, this query execution will be costly. If we assume that
there is a reverse relationship
division_of from
Division to
Company, an alternative execution plan might start with the “
strategy” divisions and follow this reverse relationship. In this case an index structure for the
name attribute of the
Division objects can be exploited to speed up query processing.
In the present paper we describe a query optimizer which exploits this potential invertibility of navigational operations
in queries. Our approach is based on, but not limited to the context of the ISO and ECMA standard PCTE and P-OQL.