- •Белорусский государственный университет модели данных и субд Учебное пособие
- •Введение
- •Раздел 5 посвящен семантическим или инфологическим моделям, используемым в современных программных системах поддержки проектирования, называемых case-системами (Computer Aided Software Engineering).
- •Раздел 10 посвящен вопросам распределенной обработки данных, здесь рассматриваются проектирование распределенных систем обработки данных, уделяется большое внимание фрагментации данных.
- •1. Основные понятия и определения теории баз данных.
- •1.1. Причины возникновения систем баз данных.
- •1.3. Системы управления базами данных.
- •2. Классификация моделей данных.
- •2.1. Моделирование данных.
- •2.2. Иерархическая модель.
- •2.3. Сетевая модель.
- •2.4. Реляционная модель.
- •2.5. Объектно-ориентированная модель.
- •2.6. Объектно-реляционная модель.
- •2.7. Многомерная модель.
- •3. Реляционная алгебра и реляционное исчисление.
- •3.1. Реляционная алгебра.
- •3.2. Реляционное исчисление.
- •4. Проектирование реляционных баз данных на основе нормализации.
- •4.1. Нормализация отношений, цели нормализации.
- •4.2. Структура функциональных зависимостей.
- •4.2.1. Функциональные зависимости и их свойства.
- •4.2.2. Ключи схем отношений.
- •4.2.3. Полные и неполные функциональные зависимости.
- •4.2.4. Покрытие множеств зависимостей.
- •4.2.5. Декомпозиция схем отношений.
- •4.2.6. Декомпозиции, сохраняющие зависимости.
- •4.3 Нормальные формы отношений.
- •4.3.1. Первая и вторая нормальные формы схем отношений.
- •4.3.2. Третья нормальная форма схем отношений.
- •4.3.4. Четвертая нормальная форма схем отношений.
- •4.3.5. Пятая нормальная форма схем отношений.
- •5. Семантическое моделирование
- •5.1. Цели и средства семантического моделирования.
- •5.2. Метод “сущность-связь”.
- •5.3. Этапы моделирования.
- •5.4. Правила формирования отношений.
- •Формирование отношений для связи 1:1.
- •Формирование отношений для связи 1:м.
- •6. Структура субд и основные функции.
- •6.1. Типовая организация современной субд.
- •6.2. Поддержка языков бд.
- •6.3. Управление данными во внешней памяти.
- •6.4. Управление буферами оперативной памяти.
- •6.5. Управление транзакциями.
- •6.6. Журнализация и восстановление после сбоев.
- •7. Управление транзакциями.
- •7.1. Свойства транзакций. Проблемы параллельного выполнения.
- •7.2. Консервативные методы управления транзакциями.
- •7.2.1. Метод блокировки.
- •7.2.2. Метод временных отметок.
- •7.3. Оптимистические методы управления транзакциями.
- •7.4. Уровень детализации блокируемых элементов данных.
- •8. Восстановление базы данных после сбоев.
- •8.1. Основные принципы и функции восстановления.
- •8.3. Создание контрольных точек.
- •8.4. Методы восстановления.
- •9. Защита баз данных.
- •9.1. Основные понятия.
- •9.2. Компьютерные средства защиты.
- •9.3. Некомпьютерные средства защиты.
- •10. Распределенные базы данных
- •10.1. Основные концепции.
- •10.2. Функции распределенных субд.
- •10.3. Разработка распределенных реляционных баз данных.
- •10.4. Распределение данных.
- •10.5. Фрагментация.
- •10. 6. Обеспечение прозрачности в рсубд.
- •11. Введение в субд oracle.
- •11.1. Характеристика субд Oracle.
- •11.2. Объекты базы данных Oracle.
- •11.4. Архитектура базы данных Oracle.
- •11.5. Архитектура экземпляра базы данных Oracle.
- •11.6. Формирование базы данных и экземпляра Oracle.
- •12. Основы языка sql.
- •12.1. Алфавит и лексемы языка sql.
- •12.2. Типы данных языка sql.
- •12.3. Операторы языка sql.
- •12.4. Операции языка sql.
- •12.5. Функции языка sql.
- •12.6. Создание, модификация и удаление таблиц.
- •12.7. Выбор информации из базы данных.
- •13. Основы языка pl/sql.
- •13.1. Алфавит и лексемы языка.
- •13.3. Типы данных и объявление переменных.
- •13.4. Операторы.
- •13.5. Курсоры.
- •13.6. Обработка исключительных ситуаций.
- •13.7. Триггеры базы данных.
- •13.8. Хранимые процедуры и функции.
- •13.9. Пакеты.
- •13.10. Объекты.
- •Литература
13.10. Объекты.
Объекты представляют собой совокупность данных, объединенных с методами обработки этих данных. Данные, входящие в объект (считается, что они образуют структуру), носят название атрибутов. В качестве методов обычно используются процедуры и функции.
Для работы с объектами необходимо вначале определить объектный тип, после чего можно объявлять переменные данного типа. В объявляемых объектных типах можно использовать в качестве параметра ранее созданные объектные типы.
Созданные объектные типы могут быть типом для переменных; использоваться в качестве атрибутов для других типов; являться строкой в таблице; являться столбцом в таблице; могут быть частью объектного представления.
Основное назначение объектных типов: перенести скрипты SQL или хранимые процедуры, функции и пакеты в методы обрабатываемого объекта.
Создание объектного типа. Объектный тип состоит из:
заголовка объектного типа;
тела объектного типа.
Каждая из этих частей компилируется отдельно, и пока не будет откомпилирован заголовок объектного типа, не будет компилироваться и его тело.
Для создания заголовка объектного типа используется следующий синтасис:
CREATE [ OR REPLACE] TYPE [. схема] имя_типа AS OBJECT
( имя_атрибута тип_атрибута,
имя_атрибута тип_атрибута,
….
[{MAP|ORDER} MEMBER описание_функции,]
[MEMBER описание_процедуры,]
[MEMBER описание_функции,]
…..);
Для создания тела объектного типа используется следующий синтасис:
CREATE [ OR REPLACE] TYPE BODY имя_типа AS
{MAP|ORDER} MEMBER функции,
MEMBER процедуры,
MEMBER функции,
…..);
причем, в теле объектного типа должны быть реализованы все объявленные в заголовке процедуры и функции.
Замечания.
Создать объектный тип можно либо в своей схеме (надо иметь полномочия CREATE TYPE) или в чужой схеме (для этого надо иметь полномочия CREATE ANY TYPE).
Описание атрибутов происходит так же, как и для типа записи, но запрещается задание значений по умолчанию.
Так как объектные типы хранятся в БД, то типы атрибутов должны быть только те, которые есть в языке SQL (но не в языке PL\SQL), причем помимо этого, запрещено использование типов данных: LONG, LONG ROW, NCHAR, NVARCHAR2, NCLOB.
Запрещается при указании типа атрибута использовать %TYPE, %ROWTYPE.
Методы MAP, ORDER – специальные методы, предназначенные для реализации упорядочения создаваемых на базе объектного типа реальных экземпляров объекта. При объявлении объектного типа можно использовать только один из этих методов. Когда создается объект, который является структурой, то необходимо определить порядок проверки условий, и именно MAP и ORDER устанавливают этот порядок. Если один из этих методов присутствует, то можно осуществить сравнение объектов не только в операторах SQL, но и в операторах PL\SQL. Если их нет, то объекты можно проверять только на эквивалентность и только в операторах SQL.
Метод MAP всегда представляется функцией, которая не имеет параметров, и типом возвращаемого значения которой могут быть только DATE, NUMBER, VARCHAR2. Ее смысл в том, что она на основании анализа данного объекта возвращает значение указанного типа, которое может быть использовано для упорядочивания объекта.
Метод ORDER всегда имеет два параметра: первый является встроенным (так называемый SELF), а второй параметр передается в эту функцию. В результате возвращается значение (типа DATE, NUMBER, VARCHAR2), по которому можно судить о соотношении этих двух переданных функции объектов. Вызов любой из этих функций происходит автоматически.
Любой метод объекта вызывается следующим образом: имя_объекта.имя_метода(…). Все, что касается списка параметров подчинено тем же правилам, как и для хранимых процедур и функций. Методы также могут быть перегружаемыми.
Если в момент выполнения метода возникает исключение, то процедура завершает свою работу, причем выходным параметрам типа OUT и IN OUT ничего не присваивается, если же были выполнены какие-то изменения в SELF, то они также ликвидируются.
После создания объектного типа при необходимости можно выполнить компиляцию его или отдельных частей, используя оператор:
ALTER TYPE имя_типа COMPILE
[SPECIFICATION| BODY]
Если для объектного типа используются какие-то объекты, и они претерпели изменения, то объектный тип становится недействительным, и его надо перекомпилировать.
Если необходимо добавить к данному типу спецификации новых методов, то используют оператор:
ALTER TYPE имя_типа REPLACE AS OBJECT
(спецификации)
но в спецификации необходимо повторить все спецификации старых методов и добавить новые методы.
Удаление объектного типа производится следующим оператором:
DROP TYPE [.схема] имя_типа [FORCE]
При этом, если используем опция FORCE, то объектный тип удаляется принудительно, несмотря на имеющиеся связи. Если данный параметр отсутствует, то объектный тип будет удален только в том случае, если на него нет ссылок.
Замечание.
У объектного типа может не быть методов.
Объекты могут быть двух типов: устойчивые (те, которые хранятся в таблицах, т.е. являются либо строками, либо столбцами таблицы); и неустойчивые (все остальные).
Пример.
Создать объектный тип, содержащий сведения об отделе.
CREATE[OR REPLACE] TYPE DEPT_ T AS OBJECT
(ID NUMBER(2), -- номер отдела
NAME VARCHAR2(15), -- фамилия начальника
LOC VARCHAR2(15)); -- месторасположение отдела
Создать таблицу, строкой которой будет данный объектный тип.
CREATE TABLE DEPT OF DEPT_T;
Такая таблица называется объектной таблицей, объектом является строка, атрибуты которой определены в объектном типе DEPT_T и ID, NAME, LOC являются столбцами таблицы.
Вставка новых значений в таблицу осуществляется через конструктор.
Конструктор – это функция, создаваемая системой по умолчанию, имя которой совпадает с именем типа, а список параметров – со списком атрибутов и возвращаемым типом является объект.
INSERT INTO DEPT
VALUES(DEPT_T(30,'JONSON','CHIKAGO'));
Для того чтобы создать объектную таблицу, в целях сопряжения с реляционными методами, которые были до этого в БД, допускается и обычная вставка, при условии, что в списке атрибутов нет других встроенных объектных типов.
INSERT INTO DEPT
VALUES(20,'SCOTT','WASHINGTON');
В таком случае можно выполнять операции DELETE и UPDATE как над обычными реляционными таблицами.
Создать таблицу, столбцом которой является объектный тип.
CREATE TABLE EMP
(EMPNO NUMBER(4),
ENAME VARCHAR2(11),
OTDEL DEPT_T);
В данном случае ввести данные без конструктора нельзя, т.е. ввод новых значений будет иметь вид:
INSERT INTO EMP
VALUES(1111,'KLARK',DEPT_T(40,'JONSON','ATLANTA'));
В противном случае будет выдана ошибка.
Выбрать информацию можно с помощью обычного оператора SELECT:
SELECT * FROM EMP;
На экран будет выведено:
EMPNO ENAME OTDEL(ID, NAME, LOC)
1111 KLARK DEPT_T(40,'JONSON','ATLANTA')
Т.е. OTDEL рассматривается как единое целое, и обратиться непосредственно к какому-то отдельному элементу нельзя.
Если необходимо выбрать некоторую информацию по объекту, то выполнить эку операцию как в реляционной БД нельзя.
SELECT ENAME FROM EMP
WHERE OTDEL=DEPT_T(40,'JONSON','ATLANTA');
Тоже самое касается операторов DELETE, UPDATE.
Это не совсем удобно, поэтому на практике такие таблицы строят следующим образом, учитывая, что существует таблица, где эти строки присутствуют:
CREATE TABLE EMP12
(EMPNO NUMBER(4),
ENAME VARCHAR2(11),
OTDEL REF DEPT_T);
REF – ссылка на объект, которая получает адрес объекта.
Когда формируется объектная таблица, где объекты – строки, то каждому объекту присваивается уникальный номер (идентификатор). Если даже объект удаляется, этот номер никакому другому объекту никогда не присваивается. Номер может достигать значения 2128.
Для вставки информации в такую таблицу, используют следующую конструкцию:
INSERT INTO EMP
SELECT 1111,'JOHN', REF(D)
FROM DEPT1 D
WHERE ID=10
Строка с ID=10 имеет уникальный номер, с помощью REF(D) получаем адрес объекта, и он станет на место третьего параметра.
В данном случае необходимо использовать синонимы. D не является синонимом в чистом виде, это так называемая переменная корреляции.
Если необходимо просмотреть нашу таблицу, то можно использовать следующий оператор:
SELECT * FROM EMP;
Но в этом случае на экран выведется следующее:
EMPNO ENAME OTDEL
1111 KLARK (здесь будет выведено ОЧЕНЬ длинное число)
Поэтому для выдачи более понятной информации используем:
SELECT EMPNO, ENAME, DEREF(OTDEL) FROM EMP12;
В результате получим:
1111 KLARK DEPT_T(40,'JONSON','ATLANTA')
Здесь DEREF возвращает по ссылке объект.
Если необходимо изменить, то:
UPDATE EMP SET ENAME='SASHA'
WHERE DEREF(OTDEL)=DEPT_T(40,'JONSON','ATLANTA');
Так как ссылку никому присваивать нельзя, в противном случае выдаст ошибку, что присваивается слишком большое значение.
