Язык SQL -3 и СУБД Oracle 8. |
Попытки совместить средства манипулирования данными реляционной модели и способы описания внешнего мира объектно-ориентированной модели получили развитие в языке SQL -3. 1) Характеристики объекта определяется описанием строки таблицы. Поэтому вводится специальная возможность описания нового типа данных: Create type Address ( number char (6), street char (30), aptno integer, city char (30), state char (2), zip integer ); На основе нового типа могут быть определены таблицы, например: Create table Addresses of Address; Новые типы допускается использовать и для определения столбцов (т.е. игнорируется требование атомарности атрибутов реляционной модели): Сreate table People of new type Person ( name char (30), address Address, birthdate date, ); Наследование определяется с помощью фразы under . Create type Employee under Person ( empno char(10), dept ref(Department) ); Здесь атрибут dept является ссылкой на объект, хранящийся в таблице Department . Т.е. в понятиях реляционной модели в этом столбце должен быть записан внешний ключ, указывающий на на одну из строк таблицы Department . На самом деле, в SQL -3 предполагается, что каждый объект имеет уникальный идентификатор - OID , именно он используется при создании ссылок на объекты. Также в операторе CREATE TABLE можно определить и методы доступа к вновь созданным типам данных: Create table People of new type Person ( name char(30), address Address, birthdate date function age(:р ref(Person)) return date; begin current_age:=:р.birthdate-current_date; return current _ age ; end ; ); В этом примере задана функция age , которая вычисляет текущий возраст объекта типа Person , хранимого в таблице People . К данной функции можно обращаться из оператора SELECT . Oracle8i совместим с минимальным уровнем ANSI/ISO (SQL92). Он поддерживает большинство возможностей, заложенных в более продвинутые уровни SQL92, и даже некоторые из SQL3, но зачастую эти возможности реализованы в нем по-своему. В Oracle создан свой язык для создания триггеров, хранимых процедур и просто скриптов (в Oracle их принято называть безымянными блоками). Этот язык получил название PL/SQL (Program Language SQL). Внешней процедурой в Oracle является подпрограмма, хранимая в DLL, или метод элемента библиотеки Java-класса. В версии 8.0 были введены объектные типы данных. Такие типы данных можно применять при создании локальных и пакетных переменных, при объявлении колонок БД и при объявлении типа записи в таблицах БД. Причем в случае, когда объект олицетворяет всю запись целиком в качестве первичного ключа, используется так называемая объектная ссылка ( REF ). REF является вполне самостоятельным типом данных и может использоваться для ссылки на такую объектную запись из других таблиц. Объекты поддерживают только инкапсуляцию, но не поддерживают не наследования, не полиморфизма. |