Предполагая, что этот ссылочный указатель остается действительным в момент запроса, мы получаем возможность выполнять "автоматическое соединение" в запросах, подобных следующему:
SELECT dept.dname, ename
FROM emp WHERE job = 'CLERK';
Средство автоматического соединения довольно удобно и позволяет сократить число ошибок программирования, но имеет существенный недостаток по сравнению с традиционными внешними ключами — даже если требуется значение собственно внешнего ключа, все равно нужно пройти по ссылочному указателю.
Может быть, REF обеспечивают более быструю навигацию от дочерних строк к их родителям, но мы редко имели (если имели вообще) проблемы с производительностью, используя связи по внешним ключам при выполнении такой же операции. Мы пока не знаем, будут ли REF работать значительно быстрее традиционной системы связей с внешними ключами, но ясно, что почти во всех случаях они будут использовать больше места. Oracle прилагает определенные усилия к обеспечению глобальной уникальности таких ссылок. Функция VSIZE сообщает, что они имеют длину 36 байтов. Поэтому в подчиненной таблице с относительно короткими строками использование пары REF-столбцов может привести к увеличению объема таблицы в два, а то и в три раза.
Абстрактные типы данных (АТД)
Абстрактный тип данных (АТД) — это любой тип данных, который не известен непосредственно серверу базы данных, но который может быть описан с помощью словаря данных. Важное ограничение для этих типов данных состоит в том, что в конечном счете они должны быть представлены в терминах базовых скалярных примитивов.
Предупреждение:
Еще одно серьезное ограничение состоит в том, что тип Boolean все еще не является одним из таких примитивов. На конференции Европейской группы пользователей Oracle в апреле 1997 года в Вене от одного из разработчиков Oracle нам удалось получить следующую информацию по этому вопросу: "У нас был написан весь код, но когда мы приблизились к дате окончательной приемки, он не прошел все тесты по качеству".
Перед тем как перейти к рассмотрению наборов (collections), или повторяющихся групп, нам нужно разобраться в некоторых особенностях АТД. Предположим, что две даты в объекте типа staff_assignment_o нужно усечь, потому что существует правило, согласно которому наша система не поддерживает неполные рабочие дни. Чтобы инкапсулировать необходимую проверку, мы создаем новый тип и получаем следующее:
100	Oracle 8