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

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего

Профессионального образования

«Хабаровская государственная академия экономики и права»

Кафедра информационных технологий

Ю. В. Любицкий

 

Базы данных

 

Учебное пособие

 

 

Хабаровск 2005


ББК 3

Л 93

Любицкий Ю. В. Базы данных : учебное пособие. – Хабаровск:

РИЦ ХГАЭП, 2005. – 80 с.

 

Рецензенты: кафедра прикладной математики и

информатики ТОГУ, зав. кафедрой д-р физ.-мат. наук,

профессор А. Г. Зарубин;

зав. кафедрой прикладной математики ДВ ГУПС,

д-р техн. наук, профессор А. И. Кондратьев

 

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

Предназначено для студентов 2 – 4 курсов всех специальностей и форм обучения, изучающих дисциплину «Информационные системы в экономике».

 

Утверждено ИБС академии в качестве учебного пособия для студентов 2 – 4 курсов всех специальностей и форм обучения

 

 

Редактор Г. С. Одинцова

 

Подписано к печати Формат 60х84/16.

Бумага писчая. Офсетная печать. Усл. п. л. 4,7. Уч.-изд. л. 3,3.

Тираж 250 экз. Заказ №

 

680042, г. Хабаровск, ул. Тихокеанская, 134, ХГАЭП, РИЦ

 

© Хабаровская государственная академия экономики и права, 2005


Содержание

 

Предисловие. 4

Введение. 5

1. Основные понятия баз данных. 6

1.1. Банк данных и его компоненты.. 6

1.2. Модели данных. 10

2. Целостность баз данных. 19

3. Внутренняя организация СУБД.. 24

3.1. Общие положения. 24

3.2. Линейный список. 26

3.3. Инвертированный список. 27

3.4. Индексы.. 28

3.5. Хеширование. 32

3.6. Кластеризация. 37

4. Распределенная обработка данных. 38

4.1. Режимы работы с базой данных. 38

4.2. Архитектура «клиент-сервер». 39

4.3. Модели «клиент-сервер». 44

4.4. Управление распределенными данными. 48

5. Восстановление баз данных. 51

5.1. Транзакции. 51

5.2. Журнал транзакций. 52

5.3. Выполнение транзакций в многопользовательских системах. 53

6. Защита баз данных. 57

7. Основы проектирования реляционных баз данных. 59

7.1. Этапы проектирования. 59

7.2. Построение концептуальной модели предметной области. 60

7.3. Логическое проектирование базы данных. 65

7.4. Нормализация отношений. 69

7.5. Автоматизированные технологии проектирования баз данных. 74

Заключение. 76

Библиографический список. 80

 


Предисловие

 

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

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

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

Пособие ориентировано на студентов общеэкономических специальностей, поэтому перечисленные вопросы рассмотрены на начальном, понятийном уровне. Для получения более подробной и детальной информации следует обратиться к специальным книгам, сведения о некоторых из которых приводятся в библиографическом списке [ 1, 2, 4 – 6, 10 – 12, 14].

Целью пособия является ознакомление студентов с общетеоретическими основами построения, проектирования и функционирования баз данных. Поэтому в нем практически не рассматриваются технологии работы с конкретной СУБД. Только по мере необходимости отдельные теоретические положения иллюстрируются на примере СУБД MS Access, используемой в ХГАЭП в рамках лабораторного практикума по дисциплине «Информационные системы в экономике».

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

Автор считает своим долгом выразить признательность преподавателям кафедры информационных технологий ХГАЭП Комовой О.С. и Сандалову В.С. за критические замечания и полезные советы, сделанные в ходе обсуждения данного пособия.

 

Введение

 

Деятельность специалистов, работающих в различных сферах экономики, неразрывно связана со сбором, хранением и обработкой больших объемов информации. Потребности общества, появление компьютерной техники, разработка и совершенствование методов и технологий решения перечисленных задач привели к созданию и быстрому развитию автоматизированных информационных систем (АИС), основной целью которых является информационное обеспечение основной деятельности пользователей.

Автоматизированные информационные системы обеспечивают формирование, хранение и обновление больших массивов информации, оперативный поиск в них необходимых пользователю сведений с возможным их дальнейшим обобщением и анализом.

В развитии АИС можно выделить два поколения.

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

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

Происхождение терминов «база данных» и «управление базами данных» окончательно не установлено. Возможно, впервые понятие базы данных было введено в июне 1963 г., когда по инициативе военно-воздушных сил и службы аэрокосмической разведки США в г. Санта-Моника был организован симпозиум по теме «Разработка и использование машиноуправляемых баз данных» [ 9 ].

В программу симпозиума входили четыре рабочих заседания, названия которых вполне подходят для рабочих секций сегодняшних конференций [ 9 ]:

1. Факторы, определяющие требования к содержимому баз данных.

2. Критерии, влияющие на структуру и проектирование баз данных.

3. Методика сбора данных и поддержание баз данных.

4. Экономические аспекты управления базами данных.

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

 

1. Основные понятия баз данных

 

1.1. Банк данных и его компоненты

 

Существует множество определений банка данных.

Например, в «Толковом словаре по вычислительным системам» [ 13 ] дается следующее определение:

Банк данных – это система, предоставляющая услуги по хранению и поиску данных определенной группе пользователей и по определенной тематике (например, биологические виды, статистика торговли, цены на товары).

Определение банка данных, опубликованное в отраслевых руководящих материалах по созданию банков данных Государственного комитета по науке и технике (ГКНТ) [ 13 ]:

Банк данных – это система специальным образом организованных данных (баз данных), программных, технических, языковых, организационно-методических средств, предназначенных для обеспечения централизованного накопления и коллективного многоцелевого использования данных.

Приводимые определения в какой-то мере дополняют друг друга, так как характеризуют понятие банка данных под разными углами зрения.

Основными функциями банка данных (БнД) являются:

1. Хранение информации, ее защита и восстановление после сбоев в работе.

2. Периодическое изменение хранимых данных.

3. Поиск и отбор необходимых данных по запросам пользователей и прикладных программ.

4. Обработка найденных данных и вывод результатов в заданной форме.

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

Структуру банка данных можно представить в виде рис. 1:

 

 
 

 


Рис. 1. Схема банка данных

 

Следовательно, банк данных состоит из следующих компонентов:

1. Базы данных – именованной совокупности данных, организованных по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования данными.

2. Системы управления базами данных (СУБД) – комплекса программных и языковых средств, предназначенных для создания, ведения и использования баз данных.

3. Словаря (справочника) базы данных – информации о базе данных, используемой СУБД для доступа к хранимой в ней информации.

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

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

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

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

Система управления базами данных включает:

· ядро СУБД, обеспечивающее организацию ввода, обработки и хранения данных;

· компоненты, обеспечивающие настройку системы;

· средства тестирования;

· сервисные программы, обеспечивающие восстановление базы данных, ее защиту и т. д.;

· трансляторы для используемых языковых средств.

В качестве примеров СУБД можно привести MS Access, Paradox, FoxPro, Clarion, Clipper, MS SQL Server, Oracle, Informix и т. д.

При обращении к базе данных СУБД использует информацию, хранящуюся в ее словаре:

· логическую схему БД, описания структур хранения данных;

· сведения о допустимых значениях и форматах представления данных;

· сведения о полномочиях пользователей при работе с данными;

· характеристики физического размещения данных.

Словарь базы данных может храниться в отдельном файле или непосредственно в файле базы данных (MS Access).

Пользователей банков данных можно разделить на три большие группы.

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

2. Прикладные программисты. В обязанности этой группы пользователей входит написание, отладка и внедрение прикладных программ (приложений), использующих информацию из базы данных. В основном для этого используются универсальные языки программирования: С++, Pasсal, Delphi и др.

3. Администраторы банка данных (АБД). Пользователи этой группы реализуют сложные задачи проектирования, создания, организации и поддержки работы банков данных. Администратор банка данных должен быть профессиональным специалистом в области информационных технологий и обеспечивать выполнение следующих функций [ 2, 4 ]:

· анализа предметной области, для которой создается банк данных;

· проектирования логической структуры БД;

· определения правил поддержания данных в согласованном состоянии;

· первоначальной загрузки и ведения БД;

· защиты данных;

· восстановления БД после сбоев;

· анализа функционирования БД с возможной ее модернизацией для увеличения производительности системы;

· взаимодействия с конечными пользователями;

· подготовки и поддержания системных средств.

При работе с настольной СУБД (например MS Access) функции конечного пользователя, прикладного программиста и администратора банка данных может осуществлять один человек. Если создается банк данных, предназначенный для информационного обслуживания деятельности крупной организации или фирмы, может потребоваться объединение усилий большого количества высококвалифицированных специалистов: системных аналитиков, проектировщиков структур данных и технологических процессов обработки информации, системных и прикладных программистов, инженеров по обслуживанию технических средств [ 4 ].

 

1.2. Модели данных

 

Данные, хранящиеся в БД, должны быть организованы по определенным правилам.

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

Существующие базы данных разработаны на основе иерархической, сетевой, реляционной, объектно-ориентированной моделей данных или их подмножеств.

Иерархическая модель данных

Иерархическая модель данных (ИМД) представляет собой древовидную (иерархическую) структуру. В вершинах дерева находятся совокупности свойств данных, описывающих некоторый объект. В терминологии ИМД эти совокупности называются сегментами. Сегмент, у которого нет вышележащего уровня иерархии, называется корневым.

Рассмотрим структуру иерархической базы данных торгового предприятия, имеющего филиалы в нескольких городах, в каждом из которых есть несколько магазинов, имеющих склады для хранения товаров (рис. 2).

Любой блок, изображенный на схеме, представляет собой сегмент, состоящий из нескольких полей, каждое из которых характеризует собой некоторое свойство сегмента. Например, для сегмента Филиал такими свойствами могут быть название города, где находится филиал торгового предприятия, его почтовый и юридический адреса, факс и т. д. Свойствами сегмента Склад могут быть номер склада, его площадь и т. д. Корневым является сегмент Филиал.

Совокупность конкретных значений полей сегмента называется экземпляром сегмента или записью: г. Амурск – ул. Победы, 3 – 18-67-53. Следовательно, один блок на схеме отображает множество фактических записей (экземпляров сегмента).


 
 

 

 


Рис. 2. Иерархическая база данных

 

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

Основные свойства иерархической модели данных.

1. Каждый из подчиненных сегментов связан только с одним сегментом вышележащего уровня иерархии. Связи между сегментами одного уровня не допускаются.

2. Между сегментами двух уровней могут поддерживаться только связи «один ко многим» (один филиал – много магазинов, один склад – много товаров) или «один к одному» (один филиал – один директор).

Недостатки иерархической модели данных:

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

2. Сложность изменения. Например, при закрытии некоторого склада товары перераспределяются между другими складами. Эта операция потребует кардинального изменения структуры базы данных.

3. Жесткость структуры, не позволяющая учесть в базе данных отдельные реальные ситуации. Например, товары, хранящиеся на одном складе, предназначены нескольким магазинам.

4. Сложность эксплуатации. Работа с иерархическими базами данных требует значительной квалификации пользователей в области программирования. В частности, в СУБД IMS фирмы IBM для описания общей схемы базы данных и блока связи каждого пользователя с базой данных использовался язык программирования Assembler. Для выборки данных из БД – специализированный язык DL/1, для обработки полученной информации – языки PL/1 или Кобол.

Перечисленные причины привели к тому, что иерархическая модель данных в настоящее время практически не используется.

Сетевая модель данных

Стандарт сетевой модели данных впервые был определен в 1975 г. организацией CODASYL (Conference of Data System Languages).

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

 
 

 


Рис. 3 Сетевая база данных

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

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

Достоинствами сетевой модели данных по сравнению с иерархической моделью являются ее гибкость, возможность образования произвольных связей, экономичность. Недостатки – высокая сложность, практически исключающая возможность ее эксплуатации пользователями, не являющимися специалистами в области информационных технологий, ослабленный контроль целостности связей между объектами базы данных [ 15 ].

По указанным причинам СУБД, построенные на основе сетевой модели (IDMS, db_VistaIII и др.), не получили широкого распространения [ 15 ].

Реляционная модель данных

Реляционная модель данных (РМД) положена в основу большинства современных СУБД. Достоинствами модели являются простота размещения данных и удобство их интерпретации.

Реляционная модель ориентирована на организацию данных в виде таблиц (отношений).

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

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

Рассмотрим таблицу базы данных торгового предприятия, в которой хранятся сведения о поставщиках товаров (табл. 1.1):

Таблица 1.1

Поставщики

 

Код Название Город
Волна Хабаровск
Парус Владивосток
Звезда Хабаровск
Парус Иркутск

 

Таблица имеет имя Поставщики, названия столбцов таблицы Код,Название,Город представляют собой строку заголовков.

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

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

Данные в одном поле могут иметь значения только из некоторой совокупности допустимых значений, называемой домéном. Например, для поля Код таблицы Поставщики домéном является совокупность целых трехзначных чисел, для поля Город– названий городов. Для каждого поля таблицы должен быть задан конкретный тип данных. Для поля Код он является числовым, для полей Название и Город– текстовым. Обратите внимание, что понятие типа данных шире, чем домена: числа могут быть не только целыми трехзначными, но и дробными, отрицательными и т. д.

К таблицам РМД предъявляются следующие требования:

1. Значения данных, расположенные на пересечении любых строки и столбца, должны быть неделимыми (атомарными, элементарными). Это требование означает, что в каждой ячейке таблицы может находиться только одно значение.

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

3. Порядок следования записей может быть произвольным.

4. В таблице не должно быть одинаковых записей.

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

Первичным ключом таблицы Поставщики является поле Код. Поля Название и Город не могут являться первичными ключами, так как в них имеются повторяющиеся значения (см. табл. 1.1). Первичный ключ, определенный по одному полю таблицы, называется простым.

В ситуации, когда в таблице нет поля с уникальными значениями данных, первичный ключ может быть определен по нескольким полям. Например, в таблице Поставки товаров, в которой ведется учет партий товаров, поступивших в магазин, первичным ключом является совокупность полей Артикули Дата поставки (табл. 1.2):

Таблица 1.2

Поставки товаров

 

Название товара Артикул Количество Дата поставки Шифр поставщика
Костюм 10.12.05
Сапоги 10.12.05
Туфли 11.12.05
Костюм 11.12.05
Костюм 12.12.05
Костюм 12.12.05
Туфли 12.12.05

 

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

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

Предположим, в таблице Дополнительные сведенияхранится подробная информация об организациях, поставляющих товары (табл. 1.3):

 

Таблица 1.3

Дополнительные сведения

 

Поставщик Директор Телефон Адрес № договора
Иванов П. Л. 64-12-83 Мира, 4
Сеидов О. А. 22-17-12 Победы, 18
Цой О. М. 39-18-34 Блюхера, 1
Лодис С. С. 46-19-23 Пушкина, 1

 

В таблицу Дополнительные сведениявключены всего пять полей, но их может быть гораздо больше: ИНН организации, Банк организации, Главный бухгалтер и т. д. Очевидно, что такие сведения могут быть востребованы для учета поступающих товаров значительно реже, чем хранящиеся в таблице Поставщики.

Свяжем таблицы Поставщики и Дополнительные сведения с помощью полей Код и Поставщик. Сравнивая значения данных в этих полях и выбирая сочетания записей, для которых они совпадают, можно получить ответы, например, на такие запросы: «Кто является директором организации «Парус» из Владивостока?» (Сеидов О.А.); «Какой адрес у организации «Волна»?» (Мира, 4). Приведенный пример демонстрирует связь между таблицами «один к одному» – одной записи в таблице Поставщики соответствует одна запись в таблице Дополнительные сведения.

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

На самом деле никакого противоречия не существует – поле Шифр поставщика является внешним ключом таблицы Поставки товаров. Внешний ключ – это поле или группа полей таблицы, которые не являются первичным ключом в данной таблице, но являются первичным ключом в другой таблице.

С помощью связывания таблиц Поставщики и Поставки товаров по ключевым полям, можно получить ответы на запросы: «Какая организация поставила костюмы 10 декабря 2005 г.?» (Волна); «Из каких городов были привезены туфли?» (Хабаровск, Иркутск).

Связывая таблицы Поставки товаров и Дополнительные сведения, можно получить ответы на запросы: «Какой номер телефона у организации, поставившей костюмы с артикулом 500?» (64-12-83); «В соответствии с каким договором поставлялись костюмы с артикулом 400?» (№ 35).

Рассмотренные примеры очень просты. При работе с реальными базами данных можно выполнять более сложные запросы, связывая одновременно несколько таблиц. При этом не исключено, что для каждой связи будут использованы разные поля таблиц и типы ключей (простые или составные). Нет необходимости поддерживать постоянные связи между таблицами – они могут быть созданы в любой момент, когда возникнет соответствующая потребность.

Для связывания таблиц, данные в связующих полях обязательно должны быть получены из одного домена. Имена связующих полей могут отличаться друг от друга (Код, Шифр поставщика, Поставщик), расположение связующих полей в таблицах может быть произвольным (см. табл. 1.1 – 1.3).

Объектно-ориентированная модель данных

Создание объектно-ориентированных СУБД считается одним из наиболее перспективных направлений в области разработки новых типов баз данных.

Объектно-ориентированные СУБД базируются на идеях, сформулированных в объектно-ориентированных языках программирования (наследования, инкапсуляции и полиморфизма). Предметная область представляется в виде множества классов объектов. Структура и поведение объектов одного класса (например, товаров базы данных торгового предприятия) являются одинаковыми.

Объект обладает следующими характеристиками [ 12 ]:

1. Имеет уникальный идентификатор, однозначно определяющий объект.

2. Принадлежит к некоторому классу, обладающему определенными поведением и свойствами.

3. Может обмениваться сообщениями с другими объектами.

4. Имеет некоторую внутреннюю структуру. Объекты, внутренняя структура которых скрыта от пользователей (известно только, какие функции может выполнять данный объект), называются инкапсулированными.

Поведение объекта задается с помощью методов его класса – операций, которые можно применять к объекту. Способность применять один и тот же метод для разных классов называется полиморфизмом [ 2 ].

В объектно-ориентированной модели возможно создание нового класса объектов на основе уже существующего класса. Этот процесс называется наследованием. Новый класс, называемый подклассом существующего класса (суперкласса), наследует все свойства и методы суперкласса [ 4 ]. Кроме того, для него могут быть определены дополнительные свойства и методы.

Объектно-ориентированная СУБД позволяет хранить объекты и обеспечивает их совместное использование различными приложениями. Для этого она должна обладать следующими компонентами [ 12 ]:

1. Языком баз данных, который позволяет декларировать классы объектов, а затем создавать, сохранять, извлекать и удалять объекты.

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

Для практической реализации объектно-ориентированных баз данных применяются два подхода [ 12 ]:

1. Используется язык объектно-ориентированного программирования (например, С++), дополненный средствами, позволяющими при необходимости сохранять объекты после завершения программы, с помощью которой они были созданы.

2. Основой является реляционная система, к которой добавляются объектно-ориентированные компоненты.

Недостатки объектно-ориентированных баз данных [ 12 ]:

1) отсутствуют необходимое унифицированное теоретическое обоснование и стандартизованная терминология;

2) не существует формально сформулированной методологии проектирования баз данных;

3) отсутствуют средства создания нерегламентированных запросов;

4) нет общих правил поддержания согласованности данных.

В заключение можно отметить, что объектно-ориентированные базы данных в настоящее время очень сложны в проектировании и эксплуатации, что ограничивает их практическое применение. Поэтому, несмотря на продолжающиеся интенсивные исследования, объектно-ориентированная модель данных пока поддерживается лишь немногими СУБД (POET, Jasmine, Versant, Iris) [ 15 ].


2. Целостность баз данных

 

Одной из важнейших задач, решаемой СУБД, является поддержание в любой момент времени взаимной непротиворечивости, правильности и точности данных, хранящихся в БД. Этот процесс называется обеспечением целостности базы данных.

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

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

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

Ограничения целостности могут определяться:

· спецификой предметной области (возраст сотрудников организации может находиться в диапазоне от 16 до 80 лет);

· непосредственно информационными характеристиками (артикул товара должен быть целым числом).

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

Рассмотрим проблемы поддержания целостности баз данных на примере реляционной СУБД. Следует отметить, что приводимые далее рассуждения в общем виде справедливы и для других моделей данных [ 3 ].

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

Ограничения целостности для полей

Большая часть ограничений целостности для полей обеспечивает выполнение требования, приведенного в п. 1.2 – данные в одном поле могут иметь значения только из некоторой совокупности допустимых значений, называемой домéном. Практическая реализация этого требования может осуществляться разными способами:

1. Для поля устанавливается конкретный тип данных: текстовый, числовой, дата/время, логический и т. д. Это не позволяет вводить, например, в числовое поле текст или даты, в поле с типом данных дата/время – числа.

2. Домен указывается непосредственно – перечислением входящих в него значений или с помощью указания диапазона допустимых значений.

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

Тип данных создаваемого поля выбирается из предложенного списка доступных типов. При необходимости с помощью свойства поля Размер поля можно уточнить область определения размещаемых в нем данных. Указывается максимальный размер данных, сохраняемых в поле: количество символов для тестовых полей; размеры поля для числовых полей: байт (целое число от 0 до 255), целое (число в диапазоне от минус 32768 до 32768), одинарное с плавающей точкой и т. д.

При непосредственном задании домена необходимые параметры можно указать в свойстве поля Условие на значение. Например, если в структуру торгового предприятия входят три магазина: «Парус», «Волна» и «Лотос», для поля Название магазина некоторой таблицы, в которое вводятся соответствующие значения, целесообразно предусмотреть следующее ограничение целостности:

 

Условие на значение “Парус” OR “Волна” OR “Лотос”

 

В результате попытка ввести в поле Название магазина другие значения будет восприниматься как ошибка.

Если известно, что цены товаров должны находиться в диапазоне от 100 до 100 000 рублей, ограничение целостности для поля Цена должно иметь вид:

 

Условие на значение >= 100 AND <=100000

 

Частным случаем определения домена можно считать автоматическое (по умолчанию) задание конкретного значения данных в некотором поле (в MS Access свойство поля Значение по умолчанию).

Некоторые нарушения целостности полей таблиц базы данных СУБД контролирует автоматически. Например, в поле, для которого определен тип данных дата/время, невозможно ввести значения 10.15.05 или 35.01.05.

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

Для полей таблиц могут поддерживаться и другие ограничения целостности.

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

2. Контролируется уникальность значений данных в поле. Если поле является простым первичным ключом таблицы, проверка уникальности значений данных в этом поле выполняется СУБД автоматически. При наличии в таблице вероятных простых ключей, можно исключить ввод в соответствующие поля повторяющихся значений данных. Для этого в MS Access для этих полей в свойстве Индексированное полеустанавливается значение Да (Совпадения не допускаются).

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

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

Ограничения целостности для записей

В рамках данного вида ограничений может контролироваться согласованность значений данных в разных полях записей. Например, в каждой записи таблицы базы данных магазина хранится информация о конкретном товаре. Количество товаров, проданных магазином за отчетный период (поле Продано), не может превышать количества товаров, имеющихся в магазине на начало периода (поле Наличие товара).

Для задания этого ограничения целостности в MS Access необходимо вызвать диалоговое окно свойств таблицы и в свойстве Условие на значение ввести необходимые условия:

 

[Наличие товара] >= [Продано]

Ограничения целостности для таблиц

Эти ограничения целостности проверяют согласованность данных в различных записях одной таблицы.

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

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

Ограничения целостности для таблиц в основном реализуются специально созданными для этого программами (процедурами) [ 3 ].

Ограничения целостности для связей между таблицами

Ограничения целостности этого типа позволяют обеспечить согласованность данных в связующих полях (первичном и внешнем ключах) нескольких таблиц.

Рассмотрим таблицы Поставщики (табл. 1.1) и Поставки товаров (табл. 1.2). Эти таблицы связаны между собой с помощью ключевых полей Коди Шифр поставщика. Таблица Поставщики является главной таблицей, таблица Поставки товаров – подчиненной. Значения данных в связующих полях получены из одного домена, представляющего в рассматриваемом примере множество положительных целых трехзначных чисел.

Нарушение целостности связи между таблицами возможно при возникновении следующих ситуаций:

1. В главной таблице удаляется запись, для которой существуют связанные записи в подчиненной таблице. Действительно, если в таблице Поставщики удалить первую запись (код поставщика равен 345), база данных будет находиться в несогласованном состоянии – неизвестно, какая фирма осуществила поставки, представленные первой, четвертой и пятой записями таблицы Поставки товаров (см. табл. 1.2).

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

2. В главной таблице изменяются значения данных в поле (полях) первичного ключа, если существуют связанные с ними значения в поле (полях) внешнего ключа подчиненной таблицы (например, в таблице Поставщики код поставщика, равный 345, изменяется на значение 725, а такого значения в поле Шифр поставщика таблицы Поставки товаров нет).

3. В поле (полях) внешнего ключа подчиненной таблицы вводятся значения данных, отсутствующие в поле (полях) первичного ключа главной таблицы (например, в таблицу Поставки товаров нельзяввести шифр поставщика 750, которого нет в поле Код таблицы Поставщики).

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

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

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

В качестве ограничения целостности может быть использован запрет на обновление данных в отдельных полях, записях или таблицах БД [ 3 ]. Очевидно, что должны быть защищены от случайных изменений, например, данные о реализованных поставках товаров, справочники о номенклатуре и характеристиках выпускаемых изделий и т.д.

Ограничения целостности могут создаваться при описании баз данных (декларативный способ) или в программах обработки данных (процедурный способ). Рекомендуется применять декларативный способ, так как создаваемые с его помощью только один раз ограничения целостности будут использоваться многократно при выполнении различных действий с данными. Кроме того, в декларативном способе используется более высокий уровень языковых средств [ 3 ].

 

3. Внутренняя организация СУБД

 

3.1. Общие положения

 

Данные на внешних носителях информации (например, магнитных или оптических дисках) хранятся в виде файлов. Запись данных во внешнюю память и чтение их из нее реализуются операционной системой компьютера, предоставляющей прикладным программам (в том числе и СУБД) услуги по вводу-выводу информации и управлению памятью. Обработка файлов операционной системой на логическом уровне выполняется с помощью файловой системы, на физическом уровне – системы управления файлами.

Наибольшую производительность работы СУБД обеспечивают физические устройства хранения данных прямого доступа (магнитные и оптические диски и т. д.), обеспечивающие непосредственное считывание необходимой информации, если известно ее местоположение. Оптимальным является размещение данных в файлах прямого доступа, позволяющих выбирать нужные записи базы данных без просмотра всего содержимого файла. Для ускорения поиска информации применяются различные структуры хранения данных (способы их упорядочивания). Существенное внимание специалистов к разработке структур хранения и технологий методов доступа к данным определяется необходимостью сокращения числа дисковых операций ввода-вывода данных из-за относительно большого времени доступа к внешним устройствам [ 2 ].

Данные в процессе работы считываются и записываются страницами – блоками фиксированных размеров (в зависимости от используемой системы обычно 2, 4 или 8 килобайт) [ 12 ]. Каждая страница, хранящаяся на диске, имеет свой уникальный идентификатор, указывающий на физическое место ее хранения. Этот идентификатор используется системой управления файлами для чтения страницы и ее записи после изменения размещенных на ней данных в то же место на диске, откуда страница была считана.

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

На одной странице могут храниться одна или несколько записей с данными. После считывания из внешней памяти в оперативную память необходимой страницы выполняется выборка и обработка нужной записи. Для этого используется идентификационный номер записи, состоящий из двух частей: номера страницы и параметра, определяющего место расположения записи на странице [ 2 ].

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

В различных СУБД рассмотренная общая схема может быть реализована по разным принципам. Например, в СУБД Paradox каждая таблица или другой объект базы данных представляют собой отдельный файл, в СУБД MS Access все таблицы, запросы, отчеты, схема базы данных и т.д. хранятся в одном файле с расширением .mdb.

 

СУБД

 
 

 


Обращения к файлам

 
 

 


Файловая система

 
 

 


Обращения к логическим страницам

 
 

 


Система управления файлами

 
 

 


Доступ к физическим страницам

       
   
 
 

 

 


Рис. 4. Обращение СУБД к данным на диске

 

 

3.2. Линейный список

 

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

Таблица 3.1

Сведения о поставках товаров в магазин

 

Номер накладной Название товара Артикул Количество Дата поставки
Костюм 10.12.05
Сапоги 10.12.05
Туфли 11.12.05
Костюм 11.12.05
Костюм 12.12.05
Костюм 12.12.05
Туфли 12.12.05

 

При поиске информации, соответствующей некоторым критериям (например, товаров с определенным названием или артикулом), линейный список необходимо просмотреть полностью от первой до последней записи. Это приводит к тому, что рассматриваемая структура хранения, обеспечивая оптимальные требования к минимальному объему выделяемой памяти на внешних устройствах, является неэффективной по быстродействию.

 

3.3. Инвертированный список

 

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

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


Таблица 3.2

Сведения о поставках товаров в магазин

 

Номер накладной Название товара Артикул Количество Дата поставки
Туфли 11.12.05
Туфли 12.12.05
Сапоги 10.12.05
Костюм 12.12.05
Костюм 12.12.05
Костюм 10.12.05
Костюм 11.12.05

 

Полученный инвертированный список позволяет выполнять быстрый поиск информации по данным в поле Артикул, не требуя просмотра всех записей (например, при поиске сведений о товарах, артикулы которых менее 300, достаточно извлечь и рассмотреть только первые четыре записи).

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

 

3.4. Индексы

 

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

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

Построение индекса и его обновление выполняется автоматически самой СУБД. Файл базы данных, для которого создан хотя бы один индекс, называется индексированным файлом.

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

Таблица 3.3

Сведения о поставках товаров в магазин

 

Номер накладной Название товара Артикул Количество Дата поставки Номер страницы
Костюм 10.12.05
Сапоги 10.12.05
Туфли 11.12.05
Костюм 11.12.05
Костюм 12.12.05
Костюм 12.12.05
Туфли 12.12.05

 

Индекс, созданный для поля Название товара, обеспечивающий быстрый поиск данных в этом поле, будет иметь вид (табл. 3.4):

Таблица 3.4

Индекс Товар

 

Название товара Номера страниц
Костюм 1, 4, 5, 6
Сапоги
Туфли 3, 7

 

Поиск и выборка нужных записей в базе данных осуществляются в следующей последовательности:

1. Выбирается индекс, соответствующий условию поиска (например Товар, если в запросе выполняется поиск товара с конкретным названием).

2. В индексе находится строка с заданным условием поиска (например Туфли).

3. Из найденной строки выбираются номера страниц, где хранятся искомые записи.

4. Полученные номера страниц используются для чтения необходимой информации.

Большинство СУБД реализует этот процесс автоматически, без участия пользователя.

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

Например, для поля Дата поставкитабл. 3.3 создан также индекс Дата (табл. 3.5):

Таблица 3.5

Индекс Дата

 

Дата поставки Номера страниц
10.12.05 1, 2
11.12.05 3, 4
12.12.05 5, 6, 7

 

При выполнении запроса «Найти сведения о туфлях, поступивших 11 декабря 2005 г.», номера страниц в индексе Товар для значения данных Туфли будут сравниваться с номерами страниц значения 11.12.05в индексе Дата. В результате будет выбран номер страницы, встречающийся в обоих индексах, равный 3.

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

Проиллюстрируем процесс создания индексов на примере MS Access.

Если индекс создается по одному полю, необходимо выполнить действия:

1. Открыть таблицу в режиме Конструктора.

2. Активизировать поле, для которого создается индекс.

3. Выбрать свойство поля Индексированное поле.

4. Выбрать для данного свойства одно из значений: