|
Программирование >> Oracle
1420 Глава 20 чисто объектно-ориентированным программированием на PL/SQL, но это, определенно, очень близкая к нему методика. Объектно-реляционные представления Это весьма мощное средство для тех, кто хочет работать с объектно-реляционными расширениями, но должен обеспечивать для множества приложений реляционное представление данных. Можно использовать стандартный механизм VIEW для создания объектов на основе реляционных таблиц. Не нужно создавать объектные таблицы, со всеми их мистическими столбцами - можно создать объектное представление стандартных таблиц (скорее всего уже существующих). Подобные представления обеспечат возможности, аналогичные объектной таблице того же типа, но без дополнительных затрат ресурсов на поддержку скрытых ключей, суррогатных ключей и пр. В этом разделе мы используем таблицы ЕМР и DEPT для создания представления данных по отделам. Это очень похоже на пример создания вложенной таблицы в главе 6, где был создан тип EMP TAB TYPE как вложенная таблица записей типа EMP TYPE, а таблица DEPT содержала столбец - вложенную таблицу этого типа. Здесь мы еще раз смоделируем типы EMP TYPE и EMP TAB TYPE, но создадим еще и объектный тип DEPT TYPE, а также представление этого типа. Интересно отметить, что использование объектных представлений позволяет взять лучшее из двух миров (реляционного и объектно-реляционного). Например, можно создать приложение, в котором должно использоваться представление данных по отделам. В представлении указаны данные по отделам, а информация о сотрудниках отдела естественным образом представляется как набор, один из атрибутов отдела. Другому приложению необходимо другое представление тех же данных. Например, службе охраны на проходной необходим доступ к данным по сотрудникам. Отдел в данном случае -лишь атрибут записи о сотруднике, в то время как для другого приложения список сотрудников является атрибутом отдела. В этом - сила реляционной модели: она позволяет одновременно поддерживать несколько представлений данных. Объектная модель не обеспечивает поддержку нескольких различных представлений одних и тех же данных так же просто (если вообще обеспечивает) или эффективно. Используя несколько различных объектных представлений реляционных данных, можно обеспечить потребности всех приложений. Необходимые типы Использованные в этом примере типы позаимствованы из главы 6, с добавлением типа DEPT TYPE. Вот как они создаются: scott@TKYTE816> create or replace type emp type 2 as object 3 (empno number(4), 4 ename varchar2(10) , 5 job varchar2(9), 6 mgr number(4), 7 hiredate date, 8 sal number(7, 2), Использование обьектно-реляционн1х средств 142 1 9 number(7, 2) 10 ); 11 / Type created. scott@TKYTE816> create or replace type emp tab type 2 as table of emp 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 Type created. Отдел моделируется как объект с такими атрибутами: номер отдела (deptno), название (dname), местонахождение (loc) и список сотрудников (emps). Объектно-реляционное представление По представленным выше определениям типов легко получить данные для этого представления по существующим реляционным данным. Вот как создается представление: scott@TKYTE816> create or replace view dept or 2 of dept type 3 with object identifier(deptno) 4 as 5 select deptno, dname, loc, 6 cast (multiset ( 7 select empno, ename, job, mgr, hiredate, sal, 8 from emp 9 where emp.deptno = dept.deptno) 10 as emp tab type ) 11 from dept 12 / View created. Назначение конструкций CAST и MULTISET вам уже знакомо - с их помощью коррелированный подзапрос преобразуется в набор типа вложенной таблицы. Для каждой строки в таблице DEPT мы запрашиваем всех сотрудников соответствующего отдела. С помощью конструкции WITH OBJECT IDENTIFIER серверу Oracle можно сообщить, какой столбец (или столбцы) однозначно идентифицируют строку в представлении. Это позволяет серверу автоматически создать ссылку на объект (object reference), что и обеспечивает возможности работы с этим представлением как с объектной таблицей. 1422 Глава 20 Созданное представление можно использовать: scott@TKYTE816> select dname, d.emps 2 from dept or d DNAME EMPSCEMPNO, ENAME, JOB, MGR, HIREDATE, S ACCOUNTING RESEARCH SALES EMP TAB TYPE(EMP TYPE(7782, CRK , MANAGER, 7839, 09-JUN-81, 2450, NOLL), EMP TYPE(7 83 9, KING, PRESIDENT, NULL, 17-NOV-81, 5000, NULL), EMP TYPE(7 93 4, MILLER, CLERK, 7782, 23-JAN-82, 1300, NULL)) EMP TAB TYPE(EMP TYPE(73 69, SMITH, CLERK, 7902, 17-DEC-80, 800, NULL), EMP TYPE(7566, JONES, MANAGER, 7839, 02-APR-81, 2975, NULL) , EMP TYPE(77 88, SCOTT, ANALYST, 7566, 09-DEC-82, 3000, NULL), EMP TYPE(7 87 6, ADAMS, CLERK, 7788, 12-JAN-83, 1100, NULL), EMP TYPE(7 902, FORD, ANALYST, 7566, 03-DEC-81, 3000, NULL)) EMP TAB TYPE(EMP TYPE(7 499, ALLEN, SALESMAN, 7698, 20-FEB-81, 1600, 300), EMP TYPE(7 521, WARD, SALESMAN, 7698, 22-FEB-81, 1250, 500), EMP TYPE(7 654, MARTIN, SALESMAN, 7698, 28-SEP-81, 1250, 1400), EMP TYPE(7 698, BLAKE, MANAGER, 7839, 01-MAY-81, 2850, NULL), EMP TYPE(7 844, TURNER, SALESMAN, 7698, 08-SEP-81, 1500, 0), EMP TYPE(7 900, JAMES, CLERK, 7698, 03-DEC-81, 950, NULL)) OPERATIONS EMP TAB TYPE() 4 rows selected. scott@TKYTE816> select deptno, dname, loc, count(*) 2 from dept or d, table (d.emps) 3 group by deptno, dname, loc DEPTNO DNAME COUNT(*) 10 ACCOUNTING 20 RESEARCH 30 SALES 3 rows selected. NEW YORK DALLAS CHICAGO Итак, у нас есть реляционные таблицы и объектно-реляционное представление. Пользователю трудно определить, где - представление, а где - таблицы. Все возмож-
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |