|
Программирование >> Oracle
1432 Глава 20 их объединения (как написать коррелированные подзапросы для генерации курсоров). Эту модель можно реализовать с помощь объектно-реляционных расширений, пересоздав представление следующим образом: scott@TKY816> create or replace type dept budget type 2 as object 3 (fy date, 4 amount number Type created. scott8TKYTE816> create or replace type dept budget tab type 2 as table of dept budget type Type created. scott@TKYTE816> create or replace type dept type 2 as object 3 (deptno number(2) , 4 dname varchar2(14) , 5 loc varchar2(13) , 6 emps emp tab type, 7 budget dept budget tab type Type created. scott6TKYTE816> create or replace view dept or 10 11 12 13 14 15 16 17 of dept type with object identifier(deptno) as select deptno, dname, loc, cast cast from dept (multiset ( select empno, ename, job, mgr, hiredate, from emp where emp.deptno = dept.deptno) as emp tab type) emps, (multiset ( select fy, amount from dept fy budget where dept fy budget.deptno = dept.deptno) as dept budget tab type) budget sal, conm View created. Теперь учтите, что представленные выше действия выполняются один раз, и все сложности от приложения скрыты. В приложении можно просто написать: scott@TKYTE816> select * from dept or where deptno = 10 2 / Использование объектно-реляционн1х средств 1433 DEPTNO DNAME LOC EMPS(EMPNO, ENAME, J BUDGET(FY, AMOUNT) 10 Accounting NEW YORK EMP TAB TYPE(EMP TYP DEPT BUDGET TAB TYPE E(7782 , Clark, (DEPT BUDGET TYPE(0 MANAGER, 7839, l-JAN-99, 500), 09-JUN-81, 2450, DEPT BUDGET TYPE(01 NULL), -JAN-00, 750), EMP TYPE(7 83 9, DEPT BUDGET TYPE(01 King, PRESIDENT, -JAN-01, 1000)) NULL, 17-NOV-81, 5000, NULL), EMP TYPE(1234, Tom, Boss, NULL, 25-MAR-01, 1000, 500) ) 1 row selected. Снова мы получаем одну строку, один экземпляр объекта, представляющего данные в нужном виде. Это весьма удобно. Сложность базовой физической модели скрыта, и легко понять, как создать графический интерфейс для представления этих данных пользователю. При программировании на языке Java (с помощью интерфейса JDBC), Visual Basic (с помощью объектов OO4O - Oracle Objects for Ole), PL/SQL, использовании библиотеки OCI (Oracle Call interface) и прекомпилятора Pro*C объектно-реляционные расширения легко применить. Использовать реляционную модель становится все труднее по мере добавления сложных отношений один ко многим. При использовании объектно-реляционной модели все несколько проще. Придется, конечно, изменить триггеры INSTEAD OF для поддержки изменения базовых реляционных данных, так что приведенный пример неполон, но идею вы, надеюсь, уловили. Резюме В этой главе мы изучили основные способы использования объектных типов и расширений сервера Oracle. Из четырех возможных способов мы детально рассмотрели три. Мы рассмотрели использование объектных типов для расширения стандартного набора типов системы. С помощью нового типа ADDRESS TYPE мы смогли не только задать общую систему именования и использования адресов, но и обеспечить специализированные методы и средства работы с ними. Мы также рассмотрели использование объектно-реляционных расширений для естественного развития возможностей языка PL/SQL. Мы взяли стандартный пакет и реализовали для него интерфейс на уровне объектного типа. Это позволяет защититься от изменений в реализации стандартного пакета, а также обеспечивает более объектно-ориентированный стиль программирования на PL/SQL, подобный использованию классов в языках С+ + или Java. Кроме того, б1ло показано, как, используя наборы, можно выбирать данные из PL/SQL-функции с помощью оператора SELECT. Одной этой возможности достаточно, чтобы оправдать использование объектно-реляционных расширений. 1434 Глава 20 Наконец, мы изучили, как использовать эти средства для создания объектно-реляционных представлений реляционных, по сути, данных. Как оказалось, можно гко создать специализированные объектные представления реляционных данных для любого количеств различных приложений. Основное преимущество этого подхода состоит в том, что в приложении можно применять практически тривиальные SQL-операторы. Не нужно выполнять соединения и делать несколько запросов, чтобы получить все необходимые данные. Все необходимое возвращается при выборке всего одной строки. Четвертый способ использования, создание объектных таблиц по хранимому типу данных, был рассмотрен в главе 6, посвященной таблицам. Поскольку объектные та лицы по внешним свойствам аналогичны объектным представлениям (или скорее, наоборот - объектные представления аналогичны объектным таблицам), их использование тоже, фактически, рассмотрено. Я предпочитаю не использовать объектные та лицы. По многим описанным ранее причинам, мне больше нравятся объектные представления реляционных таблиц. Основная причина в том, что, в конечном итоге, почта всегда необходимо поддерживать реляционное представление данных, как обеспечивающее различные способы использования данных в приложениях. Объектно-реляционные представления прекрасно подходят для моделирования специфических представлений данных в приложениях.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |