n There is no single extended relational data model; rather, there are a variety of these models, whose characteristics
depend upon the way and the degree to which extensions were made. However, all the models do
share the same basic relational tables and query language, all incorporate some concept of ‘object’, and some
have the ability to store methods or procedures/triggers as well as data in the database.
n Various terms have been used for systems that have extended the relational data model. The original term used
to describe such systems was the Extended Relational DBMS (ERDBMS). However, in recent years, the more
descriptive term Object-Relational DBMS (ORDBMS) has been used to indicate that the system incorporates
some notion of ‘object’, and the term Universal Server or Universal DBMS (UDBMS) has also been
used.
n SQL:1999 and SQL:2003 extensions include: row types, user-defined types (UDTs) and user-defined routines
(UDRs), polymorphism, inheritance, reference types and object identity, collection types (ARRAYs), new
language constructs that make SQL computationally complete, triggers, and support for large objects – Binary
Large Objects (BLOBs) and Character Large Objects (CLOBs) – and recursion.
n The query optimizer is the heart of RDBMS performance and must also be extended with knowledge about
how to execute user-defined functions efficiently, take advantage of new index structures, transform queries
in new ways, and navigate among data using references. Successfully opening up such a critical and highly
tuned DBMS component and educating third parties about optimization techniques is a major challenge for
DBMS vendors.
n Traditional RDBMSs use B-tree indexes to speed access to scalar data. With the ability to define complex data
types in an ORDBMS, specialized index structures are required for efficient access to data. Some ORDBMSs
are beginning to support additional index types, such as generic B-trees, R-trees (region trees) for fast access
to two- and three-dimensional data, and the ability to index on the output of a function. A mechanism to plug
in any user-defined index structure provides the highest level of flexibility.