Программирование >>  Oracle 

1 ... 277 278 279 [ 280 ] 281 282 283 ... 469


interMedia 1253

встречается в приложениях. Это отношение задает связь между строкой в главной (родительской) таблице и нулем или более строк в подчиненной таблице и реализуется с помощью требования внешнего ключа в подчиненной таблице, ссылающегося на главную. Счет-фактура - хороший пример отношения главный/подчиненный: обычно одному счету-фактуре соответствует ноль или более строк в подчиненной таблице, опи-с1вающей купленные товары. Источник данных типа DETAIL DATASTORE позволяет разработчику учесть эту логическую взаимосвязь таблиц.

Давайте рассмотрим пример. Необходимо создать такую структуру из главной и подчиненной таблицы, чтобы запрос с помощью средств interMedia Text обращался к главной таблице, но фактически данные для interMedia Text брались бы из подчиненной таблицы. Создадим сначала главную и подчиненную таблицы и наполним их данными:

SQL> create table purchase order

2 (id number primary key,

3 description varchar2(100) ,

4 line item body char(1)

Table created.

SQL> create table line item

2 (po id number,

3 po seence number,

4 line item detail varchar2(1000)

Table created.

SQL> insert into purchase order (id, description)

2 values(1, Many Office Items)

1 row created.

SQL> insert into line item(po id, po sequence, line item detail)

2 values(1, 1, Paperclips to be used for many reports)

1 row created.

SQL> insert into line item(po id, po sequence, line item detail)

2 values(1, 2, Some more Oracle letterhead)

1 row created.

SQL> insert into line item(po id, po sequence, line item detail)

2 values(1, 3, Optical mouse)

1 row created. SQL> commit;



1254 Глава 17

Обратите внимание: столбец LINE ITEM BODY по сути фиктивный - он ствует, чтобы можно б1ло создать индекс interMedia Text по главной таблице. Я никогда не буду вставлять в него данные. Прежде чем создавать индекс, необходимо задать параметры interMedia Text так, чтобы при создании индекса были найдены индексируемые данные:

SQ begin

2 ctx ddl.create preference(po pref, DETAILDATASTORE);

3 ctxddl.setattribute(popref, detailtable, linetem );

4 ctxddl.setattribute(popref, detailkey, poid);

5 ctx ddl.set attribute(po pref, detaillineno, posequence);

6 ctxddl.setattribute(popref, detailtext, 1ineitemdetail);

7 end;

PL/SQL procedure successfully completed.

Сначала мы создаем пользовательский параметр PO PREF. Это источник данн]х типа DETAIL DATASTORE, в котором будет храниться вся необходимая информация для поиска данных в подчиненной таблице. В следующих строках мы задаем имя подчиненной таблицы, ключ, по которому выполняется соединение с главной таблицей, порядок следования строк и, наконец, индексируемый столбец.

Теперь создадим индекс и проверим его в работе:

SQL> create index po index on purchase order(line item body)

2 indextype is ctxsys.context

3 parameters(datastore po pref )

Index created.

SQL> select id

2 from purchase order

3 where contains(line item body, Oracle) >0

Хотя индекс создается по столбцу LINE ITEM BODY, при создании можно задать и столбец главной таблицы DESCRIPTION. Помните, однако, что любые изменения этого столбца (этот столбец - не фиктивный) вызовут переиндексацию строки главной таблицы и связанных с ней строк подчиненной таблицы.

Компонент interMedia Text поддерживает также внешние источники данных, в частности файлы, не входящие в базу данных, а также универсальные локаторы ресурсов (Uniform Resource Locators - URLs). Во многих производственных средах файлы обычно хранятся в доступной по сети общей файловой системе. Необязательно хранить тексты и документы приложения в базе данных Oracle. Можно создать источник данн1х типа FILE DATASTORE - это позволит серверу Oracle управлять только текстовым индексом и не заниматься хранением и защитой файлов. При использовании источника данных FILE DATASTORE не надо хранить текст документа в столбце. Необходимо



interMedia 1255

хранить сс]лку на файл в файловой системе, по которой можно обратиться к файлу на сервере. Так что, даже если используется, например, Windows-клиент, а сервер Oracle работает на вашей любимой разновидности ОС UNIX, ссылка на файл должна задаваться по правилам файловой системы ОС UNIX, например /export/home/tkyte/ MyWordDoc.doc. Учтите, что этот способ доступа к внешним файлам никак не связан с альтернативным способом доступа из базы данных Oracle с помощью данных типа BFILE.

Еще один тип источника данных, внешнего по отношению к базе данных, - URL DATASTORE. Он очень похож на источник данных FILE DATASTORE, но вместо ссхлки на файл в файловой системе в столбце таблицы хранится URL. В момент индексации строки компонент interMedia Text фактически прочитает данные по протоколу HTTP. Но и в этом случае сервер Oracle не хранит и не управляет этими данными. Индекс создается на основе профильтрованного содержимого потока данных HTTP, a сами выбранные по URL данные не сохраняются. Протокол FTP тоже поддерживается при использовании источника данных URL DATASTORE, так что interMedia Text позволяет индексировать также файлы, доступные для сервера баз данных по FTP. При использовании версии Oracle 8.I.7 или более новой можно также встраивать имя пользователя и пароль для FTP непосредственно в строку URL (например, ftp: uid:pwd@ftp.bogus.com/tmp/test.doc).

Некоторые думают, что источник данных URL DATASTORE пригоден только для создания поискового робота (кстати, этой возможностью поиска в Web он в исходном виде не обладает). Это неверно. Мои коллеги создали очень большую распределенную систему баз данных с возможностью доступа из сети Internet. Она должна была обеспечить единый универсальный интерфейс поиска текстовых данных во всех задействованных базах. Для этого можно было создать систему индексов interMedia Text по таблицам в каждой базе данных, а затем выполнять декомпозицию запроса на множество распределенных запросов к этим базам данных. Однако они не пошли по пути, ведущему к неоптимальной производительности, а решили выделить один сервер для поддержки компонента interMedia Text и создали все индексы с помощью источника данных URL DATASTORE. В этой системе удаленные базы данных отвечали за вставку адресов URL для новых или изменившихся документов в базу данных, обеспечивающую поиск. Таким образом, при каждом создании нового или изменении существующего документа серверу, обеспечивающему индексацию документов, передается URL для получения содержания этого документа. Индексирующей машине не приходится искать новые и измененные документы: предоставляющие их серверы просто уведомляют ее о новых поступлениях. При этом не только не нужен распределенный запрос, но и создается централизованный источник информации, что упрощает администрирование.

Компонент interMedia Text - часть базы данных Oracle

Одной из наиболее существенных причин для использования компонента interMedia Text вместо решений на базе файловой системы является то, что этот компонент входит в базу данных Oracle. Во-первых, в базе данных Oracle поддерживаются транзакции, а в файловой системе - нет. Целостность данных не нарушается, а свойства ACID реляционной базы данных распространяются и на компонент interMedia Text.



1 ... 277 278 279 [ 280 ] 281 282 283 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика