Создание индекса для атрибута подтипа в таблице объектов SQL


Я создал таблицу типа объекта "документ". Эта таблица содержит несколько подтипов документа (например: рецепт, публикация, контракт). Все эти подтипы содержат общие атрибуты (идентификатор, заголовок, размер файла), но часто содержат дополнительные атрибуты (например, номер запаса). Я создал индексы на часто используемых общих атрибутах, но также хотел бы создать индексы на часто используемых специфических атрибутах подтипа.

Например, я создал индекс для названия Таблица документов:

CREATE INDEX i_title
ON Documents (Title);

Я хотел бы сделать что-то похожее на следующее:

CREATE INDEX i_stock_number
ON DOCUMENTS d (Stock_Number) WHERE VALUE(d) IS OF TYPE(Publication);

Или, возможно,

CREATE INDEX i_stock_number
ON DOCUMENTS (TREAT(DOCUMENTS AS Publication).Stock_Number);

Не могли бы вы помочь мне определить, как создавать индексы для определенных атрибутов подтипов?

Спасибо, что уделили мне время.
1 2

1 ответ:

create index i_stock_number
on documents d
(treat(value(d) as publication).stock_number);

Предполагая такую модель данных:

create or replace type document is object
(
    id number,
    title varchar2(100),
    file_size number
) not final;

create or replace type publication under document
(
    stock_number number
);

create table documents of document;

insert into documents values(publication(1, 'title', 100, 200));
commit;