, used_in_part# NUMBER(8,0) NOT NULL
, quantity_used NUMBER(8,0) NOT NULL
, PRIMARY KEY (used_by_part#, used_in_part#)
)
ORGANIZATION INDEX;
Существует несколько ограничений для индекс-таблиц:
•    Длина строки не должна превышать 50 байтов, но есть синтаксическое дополнение, позволяющее обойти данное ограничение с помощью сегмента переполнения (overflow segment). Конечно, как только вы это сделаете, главное преимущество индекс-таблицы будет утрачено, потому что для извлечения данных вам придется идти из блока-листа индекса в блок, где хранится остальная часть строки. Но, по крайней мере, ключевые данные хранятся только в одном экземпляре.
•    Нельзя загружать таблицу при помощи предложения CREATE TABLE...AS SELECT..., но можно вставлять в нее данные посредством подзапроса, поэтому данное ограничение не очень серьезно.
•    Индекс-таблицу нельзя секционировать. А жаль, потому что секционирование кажется наиболее подходящим методом для очень больших промежуточных таблиц.
Конечно, многие таблицы, которые называются промежуточными (intersection), имеют столбцы, не входящие в первичный ключ. В таблице part_us-age из предыдущего примера есть неключевой столбец — quantity_used, — который показывает, сколько экземпляров одного компонента содержится в другом компоненте. Естественно, чем выше доля неключевых данных в строке, тем ниже экономия от применения индекс-таблицы и тем выше вероятность того, что придется использовать пространство сегмента переполнения. Как вы видели выше, использование сегмента переполнения приводит к тому, что главное преимущество индекс-таблиц исчезает.
Традиционно многие промежуточные таблицы имеют два уникальных индекса, которые содержат два одинаковых внешних ключа, но в разном порядке. Допустим, у нас есть промежуточная таблица language_spoken между таблицами служащих и языков. Тогда для поиска сведений о том, на каких языках говорит данный сотрудник, можно использовать индекс по столбцам (emp#, language_code). Чтобы найти всех сотрудников, говорящих на данном языке, следует применить другой индекс — (language_code, emp#). При этом нам вообще не придется обращаться к таблице.
А теперь — по-настоящему плохая новость. Сейчас невозможно построить индекс для индекс-таблицы. Поэтому если в нашем примере вам также понадобится индекс по столбцам (used_in_part#, used__by_part#), а вы определенно хотите использовать индекс-таблицы, то существует только два возможных решения (по крайней мере, мы нашли только их):
1.   Писать свое приложение в расчете на поддержку обоих индексов (простите, мы имели в виду таблицы). Это нарушает одно из золотых правил
68	OracleS