8c7f6c03

Таблицы хранимых и синтезированных объектов


Первая возможность моделирования групп из объектов в Oracle известна по предыдущей статье: это таблицы "исконных" объектов (object tables) и таблицы "виртуальных", или "синтезированных" объектов (object views). Исконные объекты хранятся как самостоятельные сущности в БД, а синтезированные дают только видимость объектов (по потребительским свойствам почти не отличимую от истинных объектов) на основе данных, хранимых в обычных или объектных таблицах.

И те и другие позволяют иметь в БД неупорядоченные списки объектов. Ниже приводится пример создания двух списков сотрудников, проживающих в Москве и Ленинграде. Принадлежность сотрудников отделам задается специальной таблицей:

DROP TYPE employee_typ FORCE;

DROP TABLE e_moscow;

DROP TABLE e_leningrad;

DROP TABLE employment;

CREATE TYPE employee_typ AS OBJECT (

ename    VARCHAR2(50),

    job      VARCHAR2(10))

/

CREATE TABLE e_moscow OF employee_typ;

CREATE TABLE e_leningrad OF employee_typ;

INSERT INTO e_moscow VALUES (

    'Scott',

    'Manager');

...

INSERT INTO e_leningrad VALUES (

    'Smith',

    'Salesman');

...

CREATE TABLE employment (

       dname VARCHAR2(50),

        employee REF employee_typ);



INSERT INTO employment VALUES (

       'Operations',

       (SELECT REF(m) FROM e_moscow m WHERE m.ename = 'Scott'));

...

Этот способ, однако, не лишен своих ограничений. Например, по данным таблицы EMPLOYMENT нельзя понять, проживает ли сотрудник в Москве или Ленинграде. Нельзя переселить сотрудника из Москвы в Ленинград (можно только удалить его из одной таблицы и создать в другой объект с теми же атрибутами) и так далее.



Содержание раздела