
Предложение commit work
Предложение COMMIT WORK имеет следующий синтаксис:
COMMIT [WORK]
Ключевое слово WORK может быть опущено. Предложение COMMIT WORK обеспечивает выполнение следующих действий: • фиксируются, то есть делаются видимыми всем пользователям системы все изменения в базе данных, сделанные в текущей транзакции;
уничтожаются все точки сохранения для данной транзакции;
завершается транзакция;
освобождаются объекты, заблокированные в процессе выполнения транзакции.
Хорошим стилем разработки кода прикладных программ является явное завершение транзакций использованием предложения COMMIT WORK. Рекомендуется выдавать предложение COMMIT WORK и перед завершением сеанса. Использование такой практики обеспечит автоматический откат неуспешной транзакции с прогнозируемым результатом при аварийном завершении прикладного процесса, вызванного программным или аппаратным сбоем.
В процессе выполнения транзакции, в которой содержатся операторы изменения данных, происходит выполнение следующих действий:
сервер создает в собственной памяти специальные записи в сегментах отката;
сервер выполняет формирование соответствующих записей в журнальный файл;
производятся изменения в буферах базы данных. Когда транзакция явно или неявно завершается, выполняется следующий набор операций:
транзакция помечается как зафиксированная;
если записи из журнального файла еще не записаны в файлы базы данных, то выполняется запись в долговременную память (память на магнитных дисках);
заблокированные строки и таблицы освобождаются.
После выполнения предложения COMMIT (возможно, с некоторой временной задержкой), информация из кеша, размешенного в оперативной памяти сервера, записывается в долговременную память. После фиксации транзакции освобождается пространство из сегментов отката.
Точки сохранения (savepoint) используются для разделения длительной транзакции на более мелкие элементы. В большой транзакции, выполняющей значительные изменения в базе данных, целесообразно сохранять частичные изменения в определенных точках, чтобы при возникновении сбоя выполнять откат не к точке старта транзакции, а к последней успешно выполненной точке сохранения.
Предложение SAVEPOINT имеет следующий синтаксис:
SAVEPOINT имя_контролъной_точки
Параметр имя_контрольнои_точки задает идентификатор, который соответствует правилам именования объектов базы данных. Если значение параметра имя_контролъ-ной_точки совпадает с ранее использованным значением, информация о предыдущей точке сохранения теряется. Число различных точек сохранения на транзакцию зависит от версии сервера Oracle и может быть изменено заданием соответствующего параметра файла INIT<sid>.ORA.
Предложение rollback work
Это предложение служит для отмены транзакции и имеет следующий синтаксис:
ROLLBACK[WORK] [TO[SAVEPOINT] имя_контрольной_точки]
Использование ключевого слова WORK необязательно. Использование предложения ROLLBACK без фразы ТО SAVEPOINT приводит к выполнению следующих действий:
завершению выполнения транзакции;
отмене всех изменений в текущей транзакции;
очистке точек сохранения для текущей транзакции;
отмене всех блокировок транзакции.
Использование предложения ROLLBACK с фразой ТО SAVEPOINT приводит к выполнению следующих действий:
откату только части транзакции, то есть отмене части изменений в базе данных, произведенных операторами транзакции;
фиксации данных, измененных до точки сохранения;
освобождению всех блокировок строк, выполненных после создания последней точки сохранения, но не освобождению блокировок уровня транзакции.
Все эти технические детали приведены только для того, чтобы еще раз проиллюстрировать принципиальное различие между работой СУБД промышленного уровня и персональной СУБД типа dBase. Более сложные механизмы проведения и синхронизации операций в многопользовательском варианте работы СУБД обеспечивают высокую отказоустойчивость, способность к восстановлению и требуемую степень согласованности данных.
ВАРІАНТ 10
1. Нормализация отношений. Использование функциональных и многозначных зависимостей для нормализации отношений. Нормализация с использованием ER-диаграмм
Модель "сущность-связь" (Entity-Relationship model, или ER-модель) представляет собой высокоуровневую концептуальную модель данных, которая была разработана Ченом (Chen) в 1976 году с целью упрощения задачи проектирования баз данных. Данная модель данных представляет собой набор концепций, которые описывают структуру базы данных и связанные с ней транзакции обновления и извлечения данных. Основная цель разработки высокоуровневой модели данных заключается в создании модели пользовательского восприятия данных и согласовании большого количества технических аспектов, связанных с проектированием базы данных. Следует особо подчеркнуть, что концептуальная модель данных не зависит от конкретной СУБД или аппаратной платформы, которая используется для реализации базы данных.
Основные концепции модели "сущность-связь" включают типы сущностей, типы связей и атрибуты.
Нормализация БД при использовании метода сущность-связь выполняется последовательностью действий
Шаг 1. Каждая простая сущность превращается в таблицу. Простая сущность - сущность, не являющаяся подтипом и не имеющая подтипов. Имя сущности становится именем таблицы.
Шаг 2. Каждый атрибут становится возможным столбцом с тем же именем; может выбираться более точный формат. Столбцы, соответствующие необязательным атрибутам, могут содержать неопределенные значения; столбцы, соответствующие обязательным атрибутам, - не могут.
Шаг 3. Компоненты уникального идентификатора сущности превращаются в первичный ключ таблицы. Если имеется несколько возможных уникальных идентификатора, выбирается наиболее используемый. Если в состав уникального идентификатора входят связи, к числу столбцов первичного ключа добавляется копия уникального идентификатора сущности, находящейся на дальнем конце связи (этот процесс может продолжаться рекурсивно). Для именования этих столбцов используются имена концов связей и/или имена сущностей.
Шаг 4. Связи многие-к-одному (и один-к-одному) становятся внешними ключами. Т.е. делается копия уникального идентификатора с конца связи "один", и соответствующие столбцы составляют внешний ключ. Необязательные связи соответствуют столбцам, допускающим неопределенные значения; обязательные связи - столбцам, не допускающим неопределенные значения.
Шаг 5. Индексы создаются для первичного ключа (уникальный индекс), внешних ключей и тех атрибутов, на которых предполагается в основном базировать запросы.
Шаг 6. Если в концептуальной схеме присутствовали подтипы, то возможны два способа:
все подтипы в одной таблице (а)
для каждого подтипа - отдельная таблица (б)
При применении способа (а) таблица создается для наиболее внешнего супертипа, а для подтипов могут создаваться представления. В таблицу добавляется по крайней мере один столбец, содержащий код ТИПА; он становится частью первичного ключа.
При использовании метода (б) для каждого подтипа первого уровня (для более нижних - представления) супертип воссоздается с помощью представления UNION (из всех таблиц подтипов выбираются общие столбцы - столбцы супертипа).
Шаг 7. Имеется два способа работы при наличии исключающих связей:
общий домен (а)
явные внешние ключи (б)
Если остающиеся внешние ключи все в одном домене, т.е. имеют общий формат (способ (а)), то создаются два столбца: идентификатор связи и идентификатор сущности. Столбец идентификатора связи используется для различения связей, покрываемых дугой исключения. Столбец идентификатора сущности используется для хранения значений уникального идентификатора сущности на дальнем конце соответствующей связи.
Если результирующие внешние ключи не относятся к одному домену, то для каждой связи, покрываемой дугой исключения, создаются явные столбцы внешних ключей; все эти столбцы могут содержать неопределенные значения.
2. Язык PL/SQL. Типы данных языка PL/SQL. Формирование типа переменной на основе типа полей таблицы (%TYPE %ROWTYPE).
PL/SQL — это процедурное расширение Oracle стандартного языка SQL. В этой главе будут рассмотрены вопросы: структура программы, переменные, константы и типы данных PL/SQL, операторы управления выполнением программы и обработки исключительных ситуаций; различные виды программ PL/SQL: хранимые процедуры, функции, пакеты и триггеры.
Всякая программа на PL/SQL состоит из трех блоков:
блоки описаний, исполнительного блока и блока обработки исключительных ситуации. Исполнительный блок может быть структурирован с использованием операторных скобок BEGIN и END.
Синтаксически программа на PL/SQL оформляется следующим образом:
DECLARE
Операторы …
BEGIN
Операторы …
EXEPTION
Операторы …
END;
Типы переменных определяются допустимыми типами при объявлении типов полей таблиц в базе данных.
Тип |
Диапазон представления |
BINARY_INTEGER |
-2 147 483 648 +2 147 483 647 |
NATURAL |
0 +2 147 483 647 |
POSITIVE |
1 +2 147 483 647 |
NUMBER |
±1.0E-129 ± 9.99E125 |
DEC |
=/= |
DECIMAL |
=/= |
DOUBLE_PRECISION |
=/= |
FLOAT |
=/= |
INT |
=/= |
INTEGER |
=/= |
REAL |
=/= |
SMALLINT |
=/= |
CHAR |
Строка до 32767 символов ASCII |
CHARACTER |
=/= |
STRING |
=/= |
VARCHAR |
Строка переменной длины до 32767 символов ASCII |
VARCHAR2 |
=/= |
LONG |
Строка до 2 147 483 647 символов ASCII |
RAW |
Двоичные данные до 32767 байт |
LONG RAW |
Двоичные данные до 2 147 483 647 байт |
BOOLEAN |
TRUE или FALSE |
DATE |
От 1 января 14712 до н.э. до 31 декабря 314712 н.э. |
ROWIND |
18 байт в формате ВВВВВВВВ.RRRR.FFFF |
Для объявления переменной с типом, соответствующим типу атрибута таблицы, используется ключевое слово %TYPE. Например
Для объявления переменной, которая может содержать одну строку таблицы (все поля), используется свойство %ROWTYPE.
Например:
A3 T1%ROWTYPE
Язык SQL не позволяет объявлять массивов. Однако массивы можно моделировать таблицами, строки которых проиндексированы двоичными числами. Переменные типа таблица задаются в два этапа: первоначально задается имя типа, а затем имя переменной этого типа. Объявление таблиц имеет вид:
TYPE имя IS TABLE OF тип_столбца INDEX BY BINARY_INTEGER;