Чем дольше данные хранятся в буфере, тем больше вероятность
того что данные, требуемые пользовательским запросом на чтение или модификацию, находятся не во внешней памяти , а в буфере. Следовательно, чем дольше данные будут храниться в буфере, тем выше будет производительность системы. Однако очень долго хранить данные в буферах нельзя. Так как если данные постоянно читаются, то затрачивается очень много оперативной памяти. А длительное хранение модифицированных данных снижает надежность системы, т.к. при отказе содержимое оперативной памяти может быть потеряно.
Поэтому число буферов и максимальное время нахождения данных в каждом буфере (время освобождения) выбирается на основе компромисса между производительностью и надежностью системы.
СУБД должна управлять буферами. Эта функция возлагается на диспетчер буферов. Диспетчер определяет, какой буфер должен заполняться, а какой освобождаться.
Каждая СУБД использует разные правила буферизации (освобождения буферов). Наиболее распространенными являются следующие 4 правила:
1. Чем реже используется буфер (т.е. страницы данных, находящиеся в буфере), тем быстрее он освобождается (правило LRU- lastrecentlyused).
2. Правило FIFO: первым пришел – первым вышел.
3. Превышение заданного порога времени. Если время хранения данных в буфере больше заданного времени, то буфер освобождается.
4. Правило принудительного сброса буферов, использованных активными транзакциями при проведении системной контрольной точки.(см. тему 4).
Рис. 1.11 поясняет процесс использования буферов прикладными программами. Когда прикладная программа обращается к СУБД с запросом записи данных (на языке SQL), то эти данные из рабочей области прикладной программы сначала попадают в буфер и некоторое время там хранятся. Затем диспетчер файлов отсылает данные буфера (в виде страницы) операционной системе, которая записывает их во внешнюю память.
При запросе на чтение данных процесс практически аналогичен: сначала диспетчер буферов ищет необходимые данные в одном из буферов и, если не находит, то из внешней памяти считывается страница, помещается в буфер, из буфера данные поступают в рабочую область.
Рис. 1.11 Использование буферов прикладными программами
Следует отметить одну важную деталь: обмен данными между буферами и внешней памятью происходит на уровне страниц, а между буферами и рабочими областями – на уровне строк. То есть пользователь отсылает строки и получает строки.
1.8. Структура встроенного языка
Все современные СУБД имеют собственные языки программирования, называемые встроенными или базовыми. Так, СУБД Oracleиспользует язык PL/SQL, СУБД MSSQL– язык Transact-SQL, СУБД Paradox– язык PAL, СУБД Access– язык MicrosoftAccessBasic (MAB) и т.д.
Главная причина, по которой разные фирмы используют для своих СУБД разные языки, в основном связана с рекламой. Оправданием обычно служит стремление использовать язык, наиболее адаптированный к особенностям конкретной СУБД. Хотя последнее очень трудно доказуемо. На рис.1.12 показана типовая структура встроенного языка.
Рис.1.12. Типовая структура встроенного языка
Результаты работы генераторов запросов и отчетов, редактора форм могут использоваться и в режиме диалога, и в режиме прикладных программ. Иными словами, пользователи могут работать с создаваемыми запросами, отчетами и формами в обоих режимах.
Генераторы запросов
Генераторы запросов предназначены для облегчения создания запросов к БД. Они строятся по принципу “Querybyexample” – создание запроса по образцу. Пользователю предоставляется бланк (бланк QBE), на котором он отмечает основные реквизиты запроса (рис.1.13).
Рис. 1.13.Запрос на бланке QBE
Из рис. видно, что на бланке отмечаются поля, данные из которых подлежат выборке, и задаются условия выборки.
Отметим, что от пользователя фактически не требуются знания языка SQL. При формировании запроса генератор автоматически создает запрос на SQL на основании реквизитов заполненной формы.
Результат исполнения запроса – выходной набор представляется пользователю в виде таблицы.
Основной слабостью генераторов запросов является то, что они позволяют создавать только сравнительно несложные запросы (в которых используются несложные вычислительные операции и задаются несложные условия отбора).
Редакторы форм
Редакторы форм служат для разработки экранных форм. Формы обеспечивают:
1. Удобный ввод и вывод информации
2. Размещение управляющих элементов (кнопок, меню, переключателей и т.д.)
3. Вывод справочной информации
Источниками выводимых данных являются таблицы или запросы ( точнее, выходные наборы ранее выполненных запросов).
Генераторы отчетов
Генераторы отчетов служат для создания выходных документов по БД – отчетов. Их характерной особенностью является наличие средств управления печатью. Источниками данных для отчетов являются таблицы и запросы.
Отчеты имеют некоторые общие черты и с запросами, и с формами. По своей сути отчет – это тот же запрос на выборку данных. Однако, как правило, это достаточно простая выборка, выполненная при простых условиях отбора. Иными словами, генераторы отчетов не позволяют задавать сложные условия отбора. Именно поэтому при формировании отчета часто используют выходные наборы запросов.
Другим важным аспектом, отличающим запросы от отчетов, является группировка записей.
Группировка в запросах направлена в первую очередь на обеспечение групповых операций (нахождение для группы значений минимума, максимума, среднего, суммы и т.д).
Группировка в отчетах ориентирована в первую очередь на удобное представление данных (выделение групп строк). При этом можно задать несколько уровней группировки. Каждый уровень группировки оформляется как самостоятельный отчет со своими разделами заголовка и примечаниями (только колонтитулы, по понятным причинам, являются общим для всего отчета). На рис.1.14 представлен отчет с группировкой строк по дате выписки товара.
Рис. 1.14 Отчет с группировкой строк
С формами отчеты часто объединяет общий принцип вывода данных. Однако вывод на формах ориентирован в первую очередь на экран, а не на бумагу.
Компиляторы встроенного языка
Компиляторы встроенного языка служат для преобразования операторов этого языка в машинные коды (как и для любого другого алгоритмического языка). Компиляторы используются только программистами на стадии разработки и отладки прикладных программ. Конечные пользователи их не используют.
Лекция 6
Описание таблиц выполняется с помощью оператора CREATETABLE.
Описание включает:
1. Задание имен столбцов таблицы и указание типов данных для этих столбцов
2. Задание первичного ключа таблицы
3. Задание внешнего ключа
Пункты 1 и 3 могут отсутствовать, если соответствующие ключи не задаются.
При наличии внешнего ключа дополнительно задаются ограничения ссылочной целостности:
ON DELETE {CASCADE| NO ACTION}
Если указано ключевое слово CASCADE, то при удалении строки из главной (родительской) таблицы соответствующие строки в зависимой (дочерней) таблице тоже будут удалены. При указании ключевого слова
NOACTION в подобном случае будет выдано сообщение об ошибке.
Пример.
Создать связанные таблицы, которые позволяют внешнему ключу EMPNO в таблице ABC создать ссылки на EMPNO в таблице EMP с правилом DELETECASCADE.
CREATE TABLE EMP
(EMPNO INT NOT NULL,
LNAME VARCHAR (15),
FNAME CHAR (10),
DEPTNO SMALLINT,
HIREDATE DATE,
JOB VARCHAR (15)),
PRIMARY KEY (EMPNO));
CREATE TABLE ABC
(EMPNO INT,
SALARY DECIMAL (9,2),
REVIEW LONG VARCHAR,
FOREIGN KEY (EMPNO) REFERENCES EMP
ON DELETE CASCADE);
Здесь первый оператор CREATETABLE описывает таблицу ЕМР с полями
EMPNO, LNAME, FNAME, DEPTNO, HIREDATE, JOB. В качестве первичного ключа используется поле EMPNO (при этом указано, что оно не может содержать неопределенные значения).
Второй оператор CREATETABLE описывает таблицу АВС с полями
EMPNO, SALARY, REVIEW. Первичный ключ не определен. Внешним ключом является поле EMPNO, значения которого ссылаются на соответствующие значения в таблице ЕМР. При удалении строк из родительской таблицы ЕМР осуществляется каскадное удаление строк из таблицы АВС.
1.11.Задание ограничений целостности: общих, доменов и семантики
Термин целостность используется для описания точности и корректности данных, хранящихся в БД. Иными словами, под целостностью подразумевается, что пользователям БД разрешается выполнять над ней некоторые действия и эти действия выполняются корректно [8].
Можно дать и другое определение: целостность означает защиту БД от некорректных действий санкционированного пользователя.
Для поддержки целостности СУБД должна содержать сведения о тех правилах, которые пользователю не следует нарушать при модификации БД (при выполнении операций UPDATE, DELETE, INSERT). Кроме того СУБД должна следить за выполнением заданных правил. Эти правила принято называть ограничениями целостности.
Кроме рассмотренных выше ограничений ссылочной целостности стандарт языка SQL поддерживает также ограничения домена, ограничения семантики и общие ограничения – «утверждения».
Домен – это набор допустимых значений для одного или нескольких атрибутов.
Каждый атрибут отношения определяется на некотором домене. Домены могут отличаться для каждого из атрибутов (т.е. для каждого атрибута может использоваться свой домен). Однако два или более атрибута могут определяться на одном и том же домене .