Единое окно доступа к образовательным ресурсам

Введение в системы баз данных: Учебное пособие

Голосов: 3

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

Приведенный ниже текст получен путем автоматического извлечения из оригинального PDF-документа и предназначен для предварительного просмотра.
Изображения (картинки, формулы, графики) отсутствуют.
         r3
      ФИО                          Этап      Начисления (руб)
      Семенов Т. Т.                Этап 1    1000
      Просов СМ.                   Этап 1    2000
      Мехова И.И.                  Этап 1    500
      Семенов Т. Т.                Этап 2    500
      Просов СМ.                   Этап 2    500
      Мехова И.И.                  Этап 2    1000
      Просов СМ.                   Этап 3    1000
      Мехова И.И.                  Этап 3    1000
      Чемцов Я.Ю.                  Этап 3    2000
      Чемцов Я.Ю.                  Этап 4    2000
      Яров И.М.                    Этап 4    3000

     Для запросов будет использоваться и расширенная база данных
Сессия, представленная таблицами cо схемами:
     S1 = (ФИО, Дисциплина, Оценка) — содержащей сведения о
результатах сессии;
     S2= (ФИО, Группа) — содержащей сведения о составе групп;
     S3 = (Группа, Дисциплина) — содержащей перечень экзаменов,
подлежащих сдаче.

     s1
     ФИО              Дисциплина                    Оценка
     МурС.М.          Физика                        4
     Цуканов Т.Т.     Физика                        5
     Думская М.Т.     Физика                        3
     Дрозд Г.Р.       Физика                        4
     МурС.М.          История                       4
     Цуканов Т.Т.     История                       5
     Думская М.Т.     История                       3
     Цуканов Т.Т.     Математика                    5
     Думская М.Т.     Математика                    4
     Дрозд Г.Р.       Математика "                  5
     Петрова СО.      Экономика                     5
     Часов И.И.       Электротехника                4
     Иванова Я. С.    Электротехника                5
     Крисе P.O.       Электротехника                3
     Часов И.И.       Иностр_язык                   5
     Иванова Я.С.     Иностр_язьгк                  4
     Часов И.И.       Экономика                     4
     Иванова Я.С.     Экономика                     4
     Крисе P.O.       Экономика                     5
     Фирсова Л.Р.     Экономика                     3


                                       112


     s2                                        s3
     ФИО            Группа                 Группа     Дисциплина
     МурС.М.        02-КТ-21               02-КТ-21   Физика
     Цуканов Т.Т.   02-КТ-21               02-КТ-21   История
     Думская М.Т.   02-КТ-21               02-КТ-21   Математика
     Дрозд Г.Р.     02-КТ-21               02-КТ-12   Экономика
     Петров С.О.    02-КТ-12               02-КТ-12   Электротехника
     Часв И.И.      02-КТ-12               02-КТ-12   Иностр. язык
     Иванова Я.С.   02-КТ-12
     Крисс Р.О.     02-КТ-12
     Фирсова Л.Р.   02-КТ-12

     Запрос 11
     БД НИР. Вывести список сотрудников отдела 03, которые
участвовали в выполнении Этапа_3.
     Запрос будет выглядеть следующим образом:
     SELECT r3.ФИО, r3.Этап
     FROM rl, r3
     WHERE       rl.Отдел = '03' AND
           rl.ФИО = r3.ФИО AND
           r.Этап = 'Этап_3';
     Результат запроса:

      ФИО           Этап
      ПросовС.М.    Этап_3
      Мехова И.И.   Этап_3

     Запрос 12
     Вывести группы, в которых по одной дисциплине на экзаменах
получено больше одной пятерки.
     Запрос будет выглядеть следующим образом:
     SELECT s2.Группа
     FROM s1, s2
     WHERE s1.ФИО = s2.ФИО AND
     s1.Оценка = 5
     GROUP BY s2.Группа , s1.Дисциплина
     HAVING count (*)> 1;
     Результатом выполнения раздела HAVING является сгруппированная
таблица, содержащая только те группы строк, для которых результат
вычисления условия поиска есть TRUE.
     Результат запроса:

      Группа
      02-КТ-21
      02-КТ-12


                                113


     Дадим пример запроса, где будет использован предикат NOT EXISTS.
Его возможности удобно проиллюстрировать в тексте многотабличного
запроса.

     Запрос 13
     Вывести список тех студентов, кто должен был сдавать экзамен по
истории, но пока еще не сдавал,
     Запрос будет выглядеть следующим образом:
     SELECT ФИО
     FROM s2,S3
     WHERE s2.Гpyппa=s3.Группа AND
     Дисциплина = 'История' AND NOТ EXISTS (SELECT ФИО
     FROM SI
     WHERE ФИО = а.ФИО AND
     Дисциплина = 'История');
     Результат запроса:

      ФИО
      Дрозд Г. Р.

      Напомним, что предикат EXISTS истинен, когда подзапрос не пуст, то
есть содержит хотя бы один кортеж, в противном случае предикат EXISTS
ложен. Предикат ют EXISTS — истинен только тогда, когда подзапрос пуст.
      Обработка такого запроса состоит в том, что для каждого студента,
обучающегося в группе, студентам которой необходимо сдавать экзамен
по истории, проверяется истинность предиката NOT EXISTS. ИСТИННОСТЬ его
устанавливается по факту присутствия во внутреннем запросе значений.
Если подзапрос пуст, то данный студент еще не сдавал экзамен по
истории, предикат кот EXISTS имеет значение TRUE, И ФИО студента
помешается в результирующую таблицу вывода.

9.2. Операторы манипулирования данными

9.2.1. Оператор ввода данных INSERT
      Оператор ввода данных INSERT имеет следующий синтаксис:
      INSERT INTO имя таблицы [(<список столбцов>)] VALUES
(<список значений}
      Подобный синтаксис позволяет ввести только одну строку в таблицу.
Например, введем нового студента в таблицу s2 БД Сессия:
      INSERT INTO s2 ( ФИО, Группа) VALUES ('Сидоров П.П.', '02-КТ-
21');
      Задание списка столбцов необязательно тогда, когда, как в данном
случае, вводится строка с заданием значений всех столбцов. При таком
вводе предполагается, что информация будет вводиться в том порядке, в

                                  114


котором они описаны в операторе CREATE TABLE. Так как в
рассматриваемом примере вводится полная строка, то можно не задавать
список столбцов, ограничиться только заданием перечня значений, в этом
случае оператор ввода будет выглядеть следующим образом:
     INSERT INTO S2
     VALUES ('Сидоров П.П.', '02-КТ-21');
     Между списком имен столбцов и списком значений должно быть
следующее соответствие:
   • количество элементов в обоих списках должно быть одинаковым;
   • между положением элементов в списках должно быть строгое
     соответствие, которое определяется слева направо: первый элемент
     одного списка соответствует первому элементу второго списка и т.
     д.;
   • типы данных соответствующих элементов списков должны быть
     одинаковые и принадлежать к одному и тому же домену.

9.2.2. Оператор удаления данных DELETE
      Оператор удаления данных позволяет удалить одну или несколько
строк из таблицы в соответствии с условиями, которые задаются для
удаляемых строк. Синтаксис оператора DELETE следующий:
      DELETE FROM имя_таблицы
      [WHERE условия_Отбора]
      Условия отбора определяют, какие строки должны быть удалены.
Если условия отбора не задаются, то из таблицы удаляются все
существующие в ней строки. Однако это не означает, что удаляется вся
таблица. Исходная таблица остается, но она остается пустой,
незаполненной.
      Например, если нам надо удалить результаты прошедшей сессии, то
мы можем удалить все строки из отношения s1 следующим оператором:
      DELETE FROM s1;
      Условия отбора в части WHERE имеют тот же вид, что и условия
фильтрации в операторе SELECT. Эти условия определяют, какие строки из
исходного отношения будут удалены. Например, исключение по какой-
либо причине студента Крисса P.O. из таблицы s2 можно выполнить
оператором:
      DELETE FROM s2
      WHERE ФИО = 'Крисс P.O.';

9.2.3. Операция обновления данных UPDATE
      Операция обновления данных UPDATE требуется тогда, когда
требуется изменить содержимое базы данных. Данный оператор, также как
и другие операторы обновления информации БД, применяется к одной
конкретной таблице и имеет следующий формат:


                                 115


      UPDATE имя_таблицы
      SET имя_столбца1 = новое_значение1 [,имя__стол0ца2 =
новое_значение2...]
      [WHERE условие_отбора]
      Здесь в предложении UPDATE указывается имя обновляемой таблицы,
в предложении SET указываются имена столбцов и новые данные. Новые
данные должны быть совместимы с теми данными, которые они призваны
заменить.
      Часть WHERE является необязательной, также как и в операторе
DELETE. Она играет здесь ту же роль, что и в операторе DELETE, —
позволяет отобрать строки, к которым будет применена операция
модификации. Если условие отбора не задается, то операция модификации
будет применена ко всем строкам таблицы.
      Рассмотрим операцию обновления данных таблицы базы данных
НИР. Предположим, что решено все начисления специалистам увеличить
на 10%. Операция обновления информации в связи с этим будет выглядеть
следующим образом:
      UPDATE r3
      SET Начисления = Начисления * 1.1;
      В том случае, когда модификацию информации необходимо
производить
      выборочно, требуется использование предложения WHERE. Допустим,
что в БД Сессия следует произвести изменение данных, поскольку
студентка Думская М.Т. пересдала экзамен по физике и получила оценку
"отлично" вместо "удовлетворительно". Для решения поставленной задачи
необходимо выполнить следующую операцию:
      UPDATE sI SET s1.Оценка = 5
      WHERE sI.ФИО = 'Думская М.Т.' AND
      s1.Дисциплина = 'ФИЗИКА';

9.3. Операторы определения данных

9.3.1. Создание таблиц
      Создание таблицы осуществляется посредством оператора CREATE
TABLE. ЕГО упрошенная версия выглядит следующим образом:
      CREATE TABLE Имя_таблииы
      ( Имя_столбца Тип_данъи [NULL | NOT NULL ] [,...]}
      Оператор такого вида приведет к созданию таблицы с именем
<Имя_таблицы>, которая будет содержать столько столбцов, сколько их
задано в операторе. При определении столбца необходимо задать его имя,
тип данных, к которому будут относиться значения этого столбца, а также
определить, можно ли в качестве значения рассматриваемого столбца
использовать ключевое слово NULL. Ключевым словом NULL помечается


                                  116


такой столбец, который может содержать неопределенные значения.
Определения столбцов первичных ключей отношений всегда должны
содержать ключевые слова ROT NULL.
      Для того чтобы создать таблицу s1 БД СЕССИЯ, необходимо
использовать оператор вида
      CREATE TABLE s1 (
            ФИО             VARCHAR (20)          NOT NULL,
            Дисциплина           VARCHAR (20)            NOT NULL,
            Оценка          SMALLINT                     NOT NULL);
      Полное описание оператора CREATE TABLE ДОЛЖНО включать
средства поддержки целостности данных. Такие средства представляют
собой     спецификаторы,   позволяющие     задать     ограничения   для
предотвращения попыток нарушить согласованность данных. Базовое
определение оператора CREATE TABLE имеет следующий формат:
      CREATE TABLE имя_таблицы
      ({ имя_столбца тип_даных [NOT NULL] [UNIQUE]
      [DEFAULT значение по умолчанию]
      [CHECK (условие проверки на допустимость) [,...] }
      [PRIMARY KEY (список столбцов),]
      {[UNIQUE (список столбцов),] [,...]}
      {[FORING KEY {список столбцов внешних ключей)
      REFERENCES имя родительской таблицы [(список столбцов
ключей-кандидатов)],
      [MATCH {PARTIAL | FULL}
      [ON UPDATE правило ссылочной целостности]
      [ON DELETE правило ссылочной целостности]] [,...]}
      {[CHECK (условие проверки на допустимость)] [,...]})

     Перепишем оператор создания таблицы s1 БД Сессия следующим
образом:
     CREATE TABLE sI (
     ФИО              VARCHAB (20)        NOT NULL,
     Дисциплина            VAHCHAR (20)        NOT NULL,
     Оценка           SMALLINT                 NOT NULL);
     PRIMARY KEY (ФИО, Дисциплина),
     FORING KEY ФИО REFERENCES S2
     ON UPDATE CASCADE
     ON DELETE CASCADE);
     Учитывая то, что операторы языка SQL транслируются в режиме
интерпретации, создавать таблицы необходимо в определенном порядке:
вначале родительские, а затем дочерние. В противном случае появятся
сообщения об ошибке в том случае, когда в определении дочерней



                                  117


таблицы будут присутствовать ссылки на еще не существующую
родительскую таблицу.

9.3.2. Обновление таблиц
      В уже созданную таблицу изменения могут быть внесены с помощью
оператора ALTER TABLE, который имеет следующий обобщенный формат:
      ALTER TABLE имя_таблицы
      [ADD [COLUMN] имя столбца тип даных [NOT NULL] [UNIQUE]
      [DEFAULT значение по умолчанию] [CHECK (условие проверки на
допустимость)]]
      [DROP [COLUMN] ] имя_столбца [RISTRICT | CASCADE]]
      [ADD [CONSTRAINT [имя ограничения)] ограничение]
      [DROP CONSTRAINT имя ограничения [RISTRICT I CASCADE]]
      [ALTER [COLUMN] SET DEFAULT значение по умолчанию]
      [ALTER (COLUMN] DROP DEFAULT]
      В данном формате предусмотрены возможности для выполнения
ряда действий:
   • добавить новый столбец в существующую таблицу — ADD
      COLUMN;
   • удалить столбец из существующей таблицы — DROP COLUMN;
   • добавить в определение таблицы новое ограничение — ADD
      CONSTRAINT;
   • удалить из определения таблицы существующее ограничение —
      DROP
   • CONSTRAINT;
   • задать для существующего столбца значение по умолчанию —
      ALTER [COLUMN] SET DEFAULT;
   • отменить установленное для столбца значение по умолчанию
      ALTER [COLUMN] DROP DEFAULT.
      Добавить в таблицу s1 столбец Группа, содержащий символьный тип
данных, можно с помощью оператора:
      ALTER TABLE s1
      ADD Группа varchar (7) NOT NULL;

9.3.2. Удаление таблиц
      Ставшая ненужной таблица может быть удалена из базы данных
оператором
      DROP TABLE имя таблицы [RISTRICT I CASCADE].
      Ключевые слова RISTRICT И CASCADE используются для определения
условий удаления таблицы в том случае, если в базе данных присутствуют
ее дочерние таблицы. Ключевое слово RISTRICT при наличии в базе данных
зависимых от удаляемой таблицы объектов вызовет отмену удаления.
Ключевое слово CASCADE в этой ситуации вызовет автоматическое

                                 118


удаление всех объектов базы данных, существование которых зависит
отданной таблицы.
     Удалим таблицу s1:
     DROP TABLE s1;

9.3.3. Операторы создания и удаления индексов
      Поскольку базы данных предназначены для хранения больших
объемов     информации,     эффективность    их   использования   в
информационных системах во многом определяется скоростью выборки
данных. Для увеличения скорости выборки в БД обычно используют
специальную структуру, которая называется индексом. Стандарт языка
SQL не предусматривает использование индексов. Но тем не менее
разработчики СУБД охотно идут на включение средств поддержки
индексов в систему, несмотря на то, что наличие индекса увеличивает
нагрузку на систему из-за необходимости обновлять его при каждом
изменении данных таблицы, поскольку существенное повышение скорости
запросов окупает данные затраты.
      Операторы создания и удаления индекса имеют следующий формат.
Создать индекс:
      CREATE [UNIQUE] INDEX имя_индекса
      OK имя_таблицы (столбец [ASC| DESC] [,_.])

      Удалить индекс:
      DROP INDEX имя_индекса
      Если в операторе CREATE INDEX используется квалификатор UNIQUE,
TO уникальность значений индекса автоматически поддерживается
системой. Для каждого из ключевых столбцов можно указать порядок
следования значений: по возрастанию — ASC (используется по умолчанию)
и по убыванию — DESC

10. Обеспечение функционирования баз данных
      Восстановление
      Восстановление в системе управления базами данных (СУБД)
означает восстановление самой базы данных, т.е. возвращение БД в
правильное состояние. Основной принцип, на котором строится такое
восстановление – это избыточность, которая организуется на физическом
уровне.
      Транзакции
      Транзакция – это логическая единица работы. Рассмотрим пример.
Предположим, что отношение P (отношение деталей) включает атрибут
TOTQTY, представляющий собой общий объем поставок для каждой
детали. Значение TOTQTY для любой определенной детали
предполагается равным сумме всех значений QTY для всех поставок


                                 119


данной детали. На рис. 10.1. показано добавление в базу данных новой
поставки со значением 1000 для поставщика S5 и детали P1.

 BEGIN TRANSACTION;

            INSERT ({S#:’S5’, P#:’P1’, QTY:1000}) INTO SP;
            IF ошибка THEN GO TO UNDO;

            UPDATE P WHERE P# = ’P1’ TOTQTY:=TOTQTY+1000;
            IF ошибка THEN GO TO UNDO;

            COMMIT TRANSACTION;
            GO TO FINISH;

 UNDO:      ROLLBACK TRANSACTION;

 FINISH:    RETURN;

                       Рис.10.1 Пример транзакции

      В приведенном примере предполагается, что речь идет об атомарной
операции. На самом деле добавление новой поставки – это выполнение
двух обновлений в базе данных (Insert добавляет новую поставку к
отношению SP, а Update обновляет значение TOTQTY для детали P1).
Кроме того, в базе данных между двумя обновлениями временно
нарушается требование, что значение TOTQTY для детали P1 равно сумме
всех значений QTY для этой детали. Таким образом, транзакция – не
просто одиночная операция системы баз данных, а скорее согласование
нескольких таких операций. В общем, это преобразование одного
согласованного состояния базы данных в другое, причем в
промежуточных точках база данных находится в несогласованном
состоянии.
      Системный компонент, обеспечивающий атомарность называется
администратором транзакций, а ключами к его выполнению служат
операторы Commit transaction и Rollback Transaction.
   • Оператор Commit transaction сигнализирует об успешном окончании
      транзакции и что база данных находится вновь в согласованном
      состоянии, а все обновления могут быть зафиксированы, т.е. стать
      постоянными.
   • Оператор Rollback Transaction сигнализирует о неудачном окончании
      транзакции и что база данных находится в несогласованном
      состоянии, а все обновления могут быть отменены.
      Система поддерживает файл регистрации (журнал регистрации), где
записываются детали всех операций обновления, в частности новое и
старое значения модифицируемого объекта. Таким образом, при


                                     120


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

10.1. Восстановление транзакции
      Транзакция начинается с успешного выполнения оператора Begin
Transaction и заканчивается успешным выполнение либо оператора
Commit, либо оператора Rollback. Оператор Commit устанавливает так
называемую точку фиксации, которая соответствует концу логической
единице работы и , следовательно, точке, в которой база данных находится
в согласованном состоянии. Выполнение же оператора Rollback
возвращает базу данных в состоянии, в котором она находилась во время
выполнения оператора Begin Transaction, т.е. в предыдущую точку
фиксации.
      Из этого следует, что транзакция – это не только логическая единица
работы, но и также единица восстановления при неудачном выполнении
операций.
      Таким образом, транзакции обладают четырьмя важными
свойствами: атомарность, согласованность, изоляция и долговечность.
Атомарность. Транзакции атомарны (выполняется все или ничего).
Согласованность. Транзакции защищают БД согласованно, т.е.
транзакции переводят одно согласованное состояние БД в другое без
обязательной поддержки согласованности в промежуточных точках.
Изоляция. Транзакции отделены друг от друга. Это означает, что при
запуске множества конкурирующих друг с другом транзакций, любое
обновление определенной транзакции будет скрыто от остальных до тех
пор, пока эта транзакция выполняется.
Долговечность. Когда транзакция выполнена, ее обновления сохраняются,
даже если в следующий момент произойдет сбой системы.

10.2 Восстановление системы
      Система должна быть готова к восстановлению не только после
небольших локальных нарушений, таких как невыполнение операции в
пределах определенной транзакции, но также и после глобальных
нарушений типа сбоев питания ЦПУ. Местное нарушение по определению
поражает только транзакцию, в которой оно произошло. Глобальное
нарушение поражает сразу все транзакции, что приводит к значительным
для системы последствиям.
      Существует два вида глобальных нарушений:
      Отказы системы (например, сбои в питании), поражающие все
выполняющиеся в данный момент транзакции, но физически не
разрушающие базу данных в целом. Такие нарушения в системе также
называют аварийным отказом программного обеспечения.


                                   121



    
Яндекс цитирования Яндекс.Метрика