Внимательные читатели заметят, что до сих пор мы избегали использования слова "объект" в своем описании структурных типов. Это потому, что в духе некоторых характеристик, таких как иерархии типов, инкапсуляция и т.д., экземпляры структурных типов SQL:1999 являются просто значениями, подобно экземплярам встроенных типов языка. Конечно, значение employee гораздо более сложное (по представлению и по поведению), чем экземпляр INTEGER, но это всего лишь значение без какой-либо идентификации, кроме той, которая обеспечивается значением экземпляра.
Чтобы получить незначительную характеристику, которая позволила бы SQL обеспечивать объекты, требуется наличие некоторой разновидности идентификации, которую можно применять в разных ситуациях. В SQL:1999 эта возможность обеспечивается за счет того, что разработчикам базы данных разрешается указывать, что некоторые таблицы определяются как "типизированные таблицы" … т.е. их определения столбцов порождаются из атрибутов структурного типа:
CREATE TABLE empls OF employee
Такие таблицы содержат один столбец для каждого атрибута определяющего структурного типа. Функции, методы и процедуры, определенные для оперирования экземплярами типа, теперь применимы к строкам таблицы! Тогда строки таблицы являются значениями -- или экземплярами -- типа. Каждой строке присваивается уникальный идентификатор, который ведет себя подобно OID (идентификатор объекта) … он уникален в пространстве (т.е. внутри базы данных) и во времени (жизни базы данных).
SQL:1999 обеспечивает специальный тип, называемый REF-типом, значениями которого являются уникальные идентификаторы. Данный REF-тип всегда ассоциируется в указанным структурным типом. Например, если мы собирались определить таблицу, содержащую столбец с именем "manager", значения которого являются ссылками на строки типизированной таблицы служащих, то это выглядело бы подобно следующему:
manager REF (emp_type)
Значение типа REF либо идентифицирует строку типизированной таблицы (конечно, конкретного структурного типа), либо не идентифицирует вообще ничего -- что могло бы означать "никуда не указывающую ссылку", оставшуюся после удаления строки, которая идентифицировалась этой ссылкой.
Все типы REF обладают "областью видимости", так что таблица, на которую они ссылаются, известна во время компиляции. При разработке SQL:1999 предпринимались усилия для того, чтобы придать типам REF более общий характер (чтобы, например, в область видимости могли попадать несколько таблиц или чтобы любая таблица соответствующего структурного типа могла бы содержаться в области видимости, даже если эта таблица была создана после создания REF-типа), но были обнаружены некоторые проблемы, которые не удавалось разрешить без дальнейшего откладывания публикации стандарта, поэтому эти ограничения были приняты. Один из побочных эффектов ограничения, возможно, являющимся благотворным, состоит в том, что REF-типы теперь ведут себя во многом подобно ссылочным ограничениям, что может облегчить реализацию этого средства в некоторых продуктах!