Файл: Базы Данных Теор. Экзамен.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.08.2021

Просмотров: 1282

Скачиваний: 11

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Примерный перечень вопросов и типовых заданий для промежуточного контроля по учебной дисциплине «Базы данных»

Тема 1. Введение, основные понятия определения. Этапы развития баз данных. Принципы организации современных БД и СУБД

Тема 2. Реляционная модель данных, реляционная алгебра

Тема 4. Операторы манипулирования данными языке SQL

Тема 5. Проектирование баз данных

Тема 6. Многопользовательский режим работы с БД. Модели «клиент-сервер» в системах баз данных. Архитектура серверов баз данных

Тема 7. Транзакции, оперативная обработка транзакций (OLTP)

Тема 8. Встроенный SQL. Понятие курсора

Тема 9. Хранимые процедуры как базовый компонент серверной части информационных систем

Тема10. Триггеры как механизм поддержки семантической целостности в БД

Тема 11. Физические модели баз данных

11.2.1. Стратегия разрешения коллизий с областью переполнения

11.2.2. Организация стратегии свободного замещения

Моделирование отношения 1:М с использованием однонаправленных указателей

Основной файл F1

Структура подчиненного файла:

Алгоритм нахождения нужных записей подчиненного файла

Типовые задания

 

Рис. 6.6. Размещение клиента и сервера на различных машинах

 

Проблемы, возникающие в модели «один к одному», решаются в архитектуре систем с выделенным сервером, который способен обрабатывать запросы от многих клиентов. Сервер единственный обладает монополией на управление данными и взаимодействует одновременно со многими клиентами (рис. 6.7).

Рис. 6.7. Многопотоковая односерверная архитектура

 

Логически каждый клиент связан с сервером отдельной нитью (thread), или потоком, по которому пересылаются запросы. Такая архитектура получила название многопотоковой односерверной (multi-threaded). Она позволяет значительно уменьшить нагрузку на операционную систему, возникающую при работе большого числа пользователей.

Кроме того, возможность взаимодействия с одним сервером многих клиентов позволяет в полной мере использовать разделяемые объекты (начиная с открытых файлов и кончая данными из системных каталогов), что значительно уменьшает потребности в памяти и общее число процессов операционной системы. Например, системой с архитектурой «один к одному» будет создано 100 копий процессов СУБД для 100 пользователей, тогда как системе с многопотоковой архитектурой для этого понадобится только один серверный процесс.

Однако такое решение имеет свои недостатки. Так как сервер может выполняться только на одном процессоре, возникает естественное ограничение на применение СУБД для мультипроцессорных платформ. Если компьютер имеет, например, четыре процессора, то СУБД с одним сервером используют только один из них, не загружая оставшиеся три. В некоторых системах эта проблема решается вводом промежуточного диспетчера. Подобная архитектура называется архитектурой виртуального сервера (virtual server) (рис. 6.8).

Рис. 6.8. Архитектура с виртуальным сервером

 

В этой архитектуре клиенты подключаются не к реальному серверу, а к промежуточному звену, называемому диспетчером, который выполняет только функции диспетчеризации запросов к актуальным серверам. В этом случае нет ограничений на использование многопроцессорных платформ. Количество актуальных серверов может быть согласовано с количеством процессоров в системе.

Однако и эта архитектура не лишена недостатков, потому что здесь в систему добавляется новый слой, который размещается между клиентом и сервером, что увеличивает трату ресурсов на поддержку баланса загрузки актуальных серверов (load balancing) и ограничивает возможности управления взаимодействием «клиентсервер». Во-первых, становится невозможным направить запрос от конкретного клиента конкретному серверу; во-вторых, серверы становятся равноправными — нет возможности устанавливать приоритеты для обслуживания запросов.

Подобная организация взаимодействия «клиентсервер» может рассматриваться как аналог банка, где имеется несколько окон кассиров, и специальный банковский служащий — администратор зала (диспетчер) направляет каждого вновь пришедшего посетителя (клиента) к свободному кассиру (актуальному серверу). Система работает нормально, пока все посетители равноправны (имеют равные приоритеты), однако стоит лишь появиться посетителям с высшим приоритетом, которые должны обслуживаться в специальном окне, как возникают проблемы. Учет приоритета клиентов особенно важен в системах оперативной обработки транзакций, однако именно эту возможность не может предоставить архитектура систем с диспетчеризацией.


Современное решение проблемы СУБД для мультипроцессорных платформ заключается в возможности запуска нескольких серверов базы данных, в том числе и на различных процессорах. При этом каждый из серверов должен быть многопотоковым. Если эти два условия выполнены, то есть основания говорить о многопотоковой архитектуре с несколькими серверами, представленной на рис. 6.9.

Рис. 6.9. Многопотоковая мультисерверная архитектура

 

Она также может быть названа многонитиевой мультисерверной архитектурой. Эта архитектура связана с распараллеливанием выполнения одного пользовательского запроса несколькими серверными процессами.

Существует несколько возможностей распараллеливания выполнения запроса. В этом случае пользовательский запрос разбивается на ряд подзапросов, которые могут выполняться параллельно, а результаты их выполнения потом объединяются в общий результат выполнения запроса. Тогда для обеспечения оперативности выполнения запросов их подзапросы могут быть направлены отдельным серверным процессам, а потом полученные результаты объединены в общий результат. В данном случае серверные процессы не являются независимыми процессами, такими, как рассматривались ранее. Эти серверные процессы принято называть нитями (treads), и управление нитями множества запросов пользователей требует дополнительных расходов от СУБД, однако при оперативной обработке информации в хранилищах данных такой подход наиболее перспективен.



Тема 7. Транзакции, оперативная обработка транзакций (OLTP)

  1. Что такое свойства ACID? Как эти свойства связаны с понятием «транзакции»?

Свойство атомарности выражается в том, что транзакция должна быть выполнена в целом или не выполнена вовсе.

  • Свойство согласованности гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных.

  • Свойство изолированности означает, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это выглядит так, как будто они выполняются параллельно.

  • Свойство долговечности трактуется следующим образом: если транзакция завершена успешно, то те изменения в данных, которые были ею произведены, не могут быть потеряны ни при каких обстоятельствах (даже в случае последующих ошибок).


  1. Может ли в транзакцию заключить несколько запросов SELECT? Да, если это не противоречит свойствам ACID.

  2. Почему в простой модели транзакций не выделено явным образом начало транзакции, как СУБД определит начало транзакции? транзакция начинается с первого SQL-оператора, инициируемого пользователем или содержащегося в программе, который изменяет текущее состояние базы данных

  3. Как при выполнении одиночных операторов манипулирования данными, которые выполняются в интерактивном режиме, поддерживается механизм транзакций? Строгая очерёдность выполнения данных операторов.

  4. Если при удалении данных нарушается принцип ссылочной целостности, то СУБД не позволит удалить данные. Как здесь работает механизм транзакций, какое действие выполняется? Транзакция не сработает полностью по принципу атомарности.

  5. Какие проблемы могут возникнуть при параллельном выполнении транзакций?


  • проблема потери результатов обновления;

  • проблема незафиксированной зависимости (чтение «грязных» данных, неаккуратное считывание);

  • проблема несовместимого анализа.


  1. Что такое фантомы, когда они появляются? Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций — чтение одновременно нескольких строк, удовлетворяющих некоторому условию. Т.е за 2 выборки строк транзакция А получает разные результаты.

  2. Что такое «грязные данные» и когда возможно чтение грязных данных? Транзакция B изменяет данные в строке. После этого транзакция A читает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные. В результате транзакция А считывает не существующие данные, которых не было и нет.

  3. Как связаны уровни изолированности пользователей и проблемы при параллельном выполнении транзакций? Выше уровень изолированости – больше проблем при параллельном выполнении транзакций исчезает.

  4. Вы работаете трейдером, какой уровень изолированности Вы бы выбрали и почему? Определённо SERIALIZABLE. Нам нужно получить чистые данные для нашей работы.

  5. Что такое блокировки, какого типа блокировки используются при параллельном обслуживании транзакций? Два типа блокировок – чтения и записи. При этом если 2 транзакции используют одинаковый тип блокировок, появляются проблемы при параллельном обслуживании(несовместимый анализ – ReadWrite, чтение грязных данных при WriteRead, и потеря обновления при Write-Write). При этом первая транзакция всегда начинается с блокировки чтения(Shared Locks).

  6. Что такое эквивалентные планы выполнения смеси транзакций? Есть 2 различные смеси транзакций, а результат, получаемый ими выходит одинаковый.

  7. Вы разрабатываете программу генерации отчета для ЦБ России, какой уровень изолированности Вы бы выбрали и почему? Опять же SERIALIAZBLE. Иначе мы можем получить грязные данные, а в отчёте ЦБ это смертельно.

  8. Что такое процедура тиражирования данных, какое у нее альтернативное название? Тиражирование данных — это асинхронный перенос изменений объектов исходной базы данных (source database) в БД, принадлежащие различным узлам распределенной системы. Альт. Назв – репликация данных.

Тема 8. Встроенный SQL. Понятие курсора

  1. В чем отличие процесса трансляции операторов SQL от трансляции текста программ на любом традиционном языке программирования? В SQL отсутствуют традиционные операторы, организующие циклы, позволяющие объявить и использовать внутренние переменные, организовать анализ некоторых условий и возможность изменения хода программы в зависимости от выполненного условия. В общем случае можно назвать SQL подъязыком, который служит исключительно для управления базами данных. Для создания приложений, настоящих программ необходимо использовать другие, базовые языки программирования, в которые операторы языка SQL будут встраиваться.

  2. Зачем требуется обращаться к базе мета-данных при трансляции SQL-операторов? А как иначе мы можем проверить правильность введённых имён отношений и так далее?

  3. В чем смысл плана выполнения запроса, может ли этот план изменяться? Изменяться может, некоторые приложения СУБД позволяют выполнить часть плана заранее, можно грохнуть оптимизацию, но это нежелательно из-за возрастания обработки неоптимизированного запроса.

  4. Что происходит при выполнении оператора описания курсора? определяет выполняемый запрос, задает имя курсора и связывает результаты запроса с заданным курсором.

  5. Каков формат операторов описания курсора и оператора открытия курсора? Чем отличается функции оператора открытия курсора от оператора описания курсора? DECLARE не является исполняемым, в отличие от OPEN. DECLARE описывает связь и структуру БД с курсором, когда как OPEN устанавливает указатель записей (курсор) перед первой строкой виртуального набора строк результата.

  6. Каков механизм связывания результатов перемещения по курсору с переменными базового языка программирования? Приведите примеры соответствующих операторов?

  7. Что такое чувствительный курсор, каковы операторы описания данного курсора? Если при выполнении запроса не будет получено ни одной строки, как поведет себя курсор? курсоры "видят" все изменения, выполненные другими курсорами. Операторы те же.

  8. Что дает установка свойства нечувствительности курсора, ускоряется или замедляется при этом выполнение соответствующего запроса и почему? Параметр INSENSITIVE (нечувствительный) определяет режим создания набора строк, соответствующего определяемому курсору, при котором все изменения в исходных таблицах, произведенные после открытия курсора другими пользователями, не видны в нем. Такой набор данных нечувствителен ко всем изменениям, которые могут проводиться другими пользователями в исходных таблицах, этот тип курсора соответствует некоторому мгновенному слепку с БД. 


СУБД более быстро и экономно может обрабатывать такой курсор, поэтому если для вас действительно важно рассмотреть и обработать состояние БД на некоторый конкретный момент времени, то имеет смысл создать «нечувствительный курсор».

  1. Вы разрабатываете приложение, которое подсчитывает начисление процентов по вкладам клиентов банка, какой курсор Вы будете использовать и почему? Нечувствительный, нам важно показать не сам процесс начисления, а слепок на определённый момент времени.

Тема 9. Хранимые процедуры как базовый компонент серверной части информационных систем

  1. Каков синтаксис описания хранмой процедуры с параметрами? Что такое параметр хранимой процедуры и какие типы параметров Вы знаете? Однако кроме имени хранимой процедуры все остальные параметры являются необязательными. Процедуры могут быть процедурами или процедурами-функциями. И эти понятия здесь трактуются традиционно, как в языках программирования высокого уровня. Хранимая процедура-функция возвращает значение, которое присваивается переменной, определяющей имя процедуры. Процедура в явном виде не возвращает значение, но в ней может быть использовано ключевое слово OUTPUT, которое определяет, что данный параметр является выходным.

Рассмотрим несколько примеров простейших хранимых процедур.

/* процедура проверки наличия экземпляров данной книги

параметры:

@ISBN шифр книги

процедура возвращает значение, равное количеству экземпляров

Если возвращается ноль, то это значит, что нет свободных экземпляров данной книги в библиотеке.

*/

CREATE PROCEDURE COUNT_EX (@ISBN varchar(12))

AS

/* определим внутреннюю переменную, которая будет хранить количество экземпляров искомой книги. Количество — это целое число, поэтому наша переменная @ TEK _ COUNT имеет целочисленный тип */

DECLARE @ TEK _ COUNT int

/* выполним соответствующий оператор SELECT

Будем считать только экземпляры, которые в настоящий момент находятся не на руках у читателей, а в библиотеке */

select @TEK_COUNT = count(*) FROM EXEMPLAR WHERE ISBN = @ISBN AND READER_ID Is NULL AND EXIST = True

/* 0 — ноль означает, что нет ни одного свободного экземпляра данной книги в библиотеке */

RETURN @TEK_COUNT

Мы присвоили возвращаемое значение самой процедуре. Такой способ аналогичен механизму использования функций. Это возможно только в том случае, когда возвращается целое число. Если тип возвращаемого значения иной, то необходимо определить специальным образом возвращаемые, выходные параметры процедуры, которых в общем случае может быть несколько.

  1. Есть хранимая процедура, которая считает количество экземпляров книги в библиотеке count_books(@isbn)

Eсть хранимая процедура, которая считает количество экземпляров данной книги на руках у читателей count_read(@isbn)

Как сосчитать количество свободных экземпляров данной книги, напишите оператор. См. вопрос 117.


  1. Каков формат оператора вызова хранимой процедуры с параметрами? Что возвращает оператор RETURN? Каковы ограничения на его применение в хранимой процедуре? EXEC <имя процедуры> <значение_входного_параметра1>...

<имя_переменной_для_выходного параметра1>... Оператор RETURN в СУБД MS SQL возвращает значение целочисленной переменной и прекращает выполнение. Возвращаемое значение должно быть целочисленным.

  1. Что такое план выполнения процедуры? При выполнении процедуры план выполнения строится заново каждый раз или нет, поясните. План, в соответствии с которым процедура выполняется. Построение заново происходит при заданном RECOMPILE. При новых данных старый план может быть просто неэффективным, потому и необходимо перестраивать план выполнения.

  2. Чем отличается использование входных и выходных параметров при вызове процедуры, покажите на примере.

  3. Чем отличаются хранимые процедуры от пользовательских функций? В MS SQL SERVER 2000 существует множество заранее определенных функций, позволяющих выполнять самые разнообразные действия. Однако может возникнуть необходимость использовать некоторые специфичные функции. Для этого начиная с версии 8.0 (2000) появилась возможность описывать функции самим и хранить такие функции в виде полноценного объекта БД, наравне с хранимыми процедурами, представлениями и т. д. Удобство применения функций, определяемых пользователем очевидно: их, в отличие от хранимых процедур можно встраивать непосредственно в оператор SELECT, причем можно их использовать как для получения конкретных значений (в разделе SELECT), так и в качестве источника данных (в разделе FROM). При использовании UDF в качестве источников данных преимущество их использования перед представлениями заключается в том, что UDF в отличие от представлений могут иметь входные параметры, с помощью которых можно влиять на результат работы функции. Функции, определяемые пользователем, могут быть трех видов: скалярные функции, Inline-функции и многооператорные функции, возвращающие табличный результат.


Тема10. Триггеры как механизм поддержки семантической целостности в БД

  1. Приведите формат оператора создания триггера. Чем отличаются триггера After и Insdead of? Какой командой можно запустить триггер? Простейший оператор создания триггера типа DML имеет вид:

CREATE TRIGGER имя_триггера

ON [таблица | представление ]

[ WITH ENCRYPTION ]

{

{FOR | AFTER | INSTEAD OF }{[DELETE] [,] [INSERT] [,] [UPDATE] }

[WITH APPEND]

[NOT FOR REPLICATION]

AS

{ IF UPDATE (столбец_i)

[ {AND | OR} UPDATE (столбец_j)]

[ … n]

| IF (COLUMNS_UPDATED() {побитовый_оператор} битовая_маска )

{оператор_сравнения} битовая_маска_столбца [… n ]

}

инструкции_SQL [ … n ]

}

} В параметре FOR задается тип триггера AFTER (после выполнения операции модификации) и INSTEAD OF (вместо выполнения операции модификации) . Триггер AFTER запускается после успешного завершения SQL. Триггер типа INSTEAD OF запускается вместо операции модификации