которая, несмотря на свои достоинства, дает правильный результат только при условии согласованности действий всех приложений.
Мы рекомендуем не полагаться на координацию приложений в решении таких проблем, как, например, неспособность Oracle хранить столбцовый индекс в верхнем регистре. Хороший способ — ввести в таблицу поддерживаемый триггером столбец, содержащий заданное прописными буквами значение подлежащего индексации атрибута. При таком способе сама индексация перестает быть кооперативной, хотя (к сожалению) используется индекс все равно кооперативно в том смысле, что создатель запроса (пользователь, программист или генератор запросов) должен знать, какой столбец применять. Если оптимизатор Oracle видит, например, такой запрос:
SELECT first_name, last_name, post_code
FROM ... WHERE last_name = 'STEVENSON';
он не способен определить, что данный запрос нужно перевести в форму, требуемую для использования индекса по столбцу, который содержит написанные прописными буквами фамилии. Вместо этого следует использовать следующий запрос:
SELECT first__name, last_name, post_code
FROM ... WHERE last_name_upper = 'STEVENSON';
Вполне вероятно, что при использовании первой формы запроса в результате будут отсутствовать некоторые, а то и все Стивенсоны, если предположить, что их фамилии введены и строчными, и прописными буквами.
Oracle настоятельно рекомендует использовать кооперативное индексирование главным образом в индекс-таблицах, но при этом подразумевается, что для хранения производных столбцов применяется отдельная таблица. Мы думаем, что производные столбцы должны размещаться в отдельной таблице только в том случае, когда между исходной строкой и значениями производного столбца существует отношение "один ко многим". Если рассмотреть систему индексирования документов, можно найти, например, такую таблицу:
CREATE TABLE documents
( doc_id NUMBER NOT NULL PRIMARY KEY , summary VARCHAR2(2000) NOT NULL -- может содержать любое число ключевых слов , held_by VARCHAR2(20)   NOT NULL FOREIGN KEY PREFERENCES keepers
) ;
Чтобы быстро находить документы, в аннотации которых имеются сочетания ключевых слов, нам понадобится индекс по отдельным ключевым словам. Вы уже знаете, что хранение и индексация повторяющейся группы
84	Oracle 8