АСТРАХАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Документационное обеспечение управления»
А.Е. МАРТЬЯНОВА...
23 downloads
231 Views
4MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
АСТРАХАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Документационное обеспечение управления»
А.Е. МАРТЬЯНОВА БАЗЫ ДАННЫХ И ЗНАНИЙ
Допущено редакционно-издательским советом Астраханского государственного технического университета в качестве учебного пособия для студентов высших учебных заведений, обучающихся по специальности 032001.65 «Документоведение и документационное обеспечение управления» 2-е изд.
Астрахань 2009
2
Мартьянова А.Е. Базы данных и знаний
УДК 681.3.016 (075) ББК 32.973.233-018я7 Рецензенты: Кафедра прикладной информатики в экономике Астраханского государственного технического университета (заведующий кафедрой – к.т.н., доц. И.Ю. Квятковская), Е.С. Кузнецова – к.э.н., доц., ведущий специалист Экономического отдела Астраханского отделения № 8625 Сбербанка РФ, Кафедра общих математических и естественнонаучных дисциплин Астраханского филиала Саратовского государственного социально-экономического университета (заведующий кафедрой – д.т.н., проф. И.А. Палагина) Учебное пособие рассмотрено и рекомендовано к печати на заседании кафедры __ИСУИ__ (протокол № 7 от 13.03.2006 г.) Мартьянова А.Е. Базы данных и знаний.: Учебное пособие. 2-е изд. – Астрахань: Изд-во АГТУ, 2009. – 291 с. Настоящее учебно-методическое пособие подготовлено по материалам учебного курса «Базы данных и знаний» для специальности 032001.65 «Документоведение и документационное обеспечение управления». Пособие состоит из четырех частей. В пособии большое внимание уделено вопросам проектирования баз данных и языку SQL. Первая часть посвящена вопросам проектирования баз данных и реализации базы данных в приложении MS Access. Вторая часть посвящена вопросам создания в среде Microsoft Visual Basic интерфейса приложения, работающего с базой данных. Третья часть посвящена вопросам реализации базы данных с помощью СУБД Microsoft SQL Server. Четвертая часть включает в себя работу, посвященную проектированию простейшей экспертной системы.
2
Мартьянова А.Е. Базы данных и знаний
3
СОДЕРЖАНИЕ ВВЕДЕНИЕ ...................................................................................................... 5 ЧАСТЬ I ............................................................................................................ 6 Работа I. Архитектура БД. Проектирование БД на основе принципов нормализации. Системный анализ предметной области. Инфологическое моделирование ................................................................ 6 Работа II. Инфологическое моделирование (продолжение). Даталогическое проектирование. Получение реляционной схемы из ER-диаграммы............................................................................................. 22 Работа III. Даталогическое проектирование (продолжение). Нормализация отношений ......................................................................... 31 Работа IV. Даталогическое проектирование (продолжение). Физическое проектирование ..................................................................... 43 Работа V. Запросы на языке SQL в MS Access. Реализация приложения «Учебный процесс» в MS Access.............................................................. 60 ЧАСТЬ II ......................................................................................................... 81 Работа VI. Создание БД MS Access надстройкой Visual Data Manager в среде Visual Basic ....................................................................................... 81 Работа VII. Построение запросов к БД MS Access на языке SQL в среде Visual Basic с помощью Query Builder ................................................... 106 Работа VIII. Разработка интерфейса приложения. Разработка форм для приложения в среде Visual Basic. Создание форм вручную. Автоматизация создания формы............................................................. 118 Работа IX. Разработка интерфейса приложения. Разработка отчетов для приложения в среде Visual Basic ............................................................ 131
4
Мартьянова А.Е. Базы данных и знаний
Работа X. Разработка интерфейса приложения. Вывод результатов запроса в таблицу. Окончательная сборка проекта БД.........................161 ЧАСТЬ III ......................................................................................................178 Работа XI. MS SQL Server. Создание БД................................................178 Работа XII. MS SQL Server. Таблицы. Заполнение БД .........................214 Работа XIII. MS SQL Server. Диаграммы. Запросы к БД. Представления ...........................................................................................230 Работа XIV. MS SQL Server. Изменение данных в БД .........................249 Работа XV. MS SQL Server. Управление SQL Server............................255 Работа XVI. SQL Server. Создание соединений с сервером баз данных. Управление данными................................................................................266 ЧАСТЬ IV ......................................................................................................283 Работа XVII. Проектирование простейшей экспертной системы........283 СПИСОК ПРИМЕРНЫХ ТЕМ КУРСОВЫХ РАБОТ ..............................291 СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ ....................................293
4
Мартьянова А.Е. Базы данных и знаний
5
ВВЕДЕНИЕ При написании данного учебно-методического автором пособия использовался опыт проведения лабораторных и лекционных занятий по дисциплине «Базы данных и знаний» на кафедре «Информационные системы управления и информатика» Астраханского государственного технического университета у студентов специальности 032001.65 «Документоведение и документационное обеспечение управления». Настоящее издание является вторым, исправленным и дополненным изданием данного пособия. В процессе изучения курса студенты знакомятся с современными средствами работы с базами данных и знаний и основами их проектирования, получают навыки самостоятельной работы с базами данных. В пособии большое внимание уделено вопросам проектирования баз данных и языку реляционных баз данных SQL. В процессе работы над лабораторным практикумом предполагается, что студент уже освоил соответствующий теоретический материал. Степень готовности студента к выполнению работы может контролироваться вопросами, которые помещаются в конце каждой работы. Там же приводятся задания к соответствующей лабораторной работе. Подготовка к лабораторным работам охватывает материал всех тем теоретического раздела. Пособие состоит из четырех частей. Части пособия тесно связаны между собой. Первая часть состоит из Работ I – V и направлена на приобретение навыков проектирования баз данных и реализации базы данных с помощью СУБД Microsoft Access. Вторая часть состоит из Работ V – X и направлена на приобретение навыков создания интерфейса приложения, работающего с базой данных, в среде Microsoft Visual Basic. Третья часть состоит из Работ XI – XVI и направлена на приобретение навыков работы с СУБД Microsoft SQL Server. Четвертая часть включает в себя Работу XVII, которая формирует представление о проектировании простейшей экспертной системы. Пособие включает в себя также список примерных тем курсовых работ. При написании пособия широко использовались источники, приведенные в списке использованной литературы. Автор в своем учебном пособии стремился представить материал таким образом, чтобы студент имел возможность не только под руководством преподавателя, но и самостоятельно приобрести навыки необходимые для дальнейшей практической работы с современными СУБД. Учебное пособие может быть полезно студентам других специальностей и всем тем, кто начинает изучать эту увлекательнейшую область человеческой деятельности – разработку баз данных и знаний.
6
Мартьянова А.Е. Базы данных и знаний
ЧАСТЬ I
Работа I. Архитектура БД. Проектирование БД на основе принципов нормализации. Системный анализ предметной области. Инфологическое моделирование Архитектура БД В процессе научных исследований, посвященных тому, как именно должна быть устроена СУБД, предлагались различные способы реализации. Самым жизнеспособным из них оказалась предложенная американским комитетом по стандартизации ANSI (American National Standards Institute) трехуровневая система организации БД [10]: 1. Уровень внешних моделей – самый верхний уровень, где каждая модель имеет свое «видение» данных. Этот уровень определяет точку зрения на БД отдельных приложений. Каждое приложение видит и обрабатывает только те данные, которые необходимы именно этому приложению. Например, система распределения работ использует сведения о квалификации сотрудника, но ее не интересуют сведения об окладе, домашнем адресе и телефоне сотрудника, и наоборот, именно эти сведения используются в подсистеме отдела кадров. 2. Концептуальный уровень – центральное управляющее звено, здесь БД представлена в наиболее общем виде, который объединяет данные, используемые всеми приложениями, работающими с данной БД. Фактически концептуальный уровень отражает обобщенную модель предметной области (объектов реального мира), для которой создавалась БД. Как любая модель, концептуальная модель отражает только существенные, с точки зрения обработки, особенности объектов реального мира. 3. Физический уровень – собственно данные, расположенные в файлах или в страничных структурах, расположенных на внешних носителях информации. Эта архитектура позволяет обеспечить логическую (между уровнями 1 и 2) и физическую (между уровнями 2 и 3) независимость при работе с данными. Логическая независимость предполагает возможность изменения одного приложения без корректировки других приложений, работающих с этой же БД. Физическая независимость предполагает возможность переноса хранимой информации с одних носителей на другие при сохранении работоспособности всех приложений, работающих с данной БД. 6
Мартьянова А.Е. Базы данных и знаний
7
В области проектирования и разработки систем баз данных используются различные средства моделирования, причем даже в рамках одной конкретной системы необходим целый комплекс моделей разного назначения [7]. Опубликованный в 1975 году отчет ANSI/X3/SPARC зафиксировал не только широкое признание концепций многоуровневой архитектуры систем баз данных, но и необходимость явного выделения специального концептуального уровня представления базы данных, единого для всех ее приложений и независимого от них. Кроме этого уровня предусматривались еще два уровня: внутренний уровень, который должен обеспечивать поддержку представления хранимой базы данных, и внешний, поддерживающий представления базы данных «с точки зрения» приложений. На каждом архитектурном уровне предполагалось использование той или иной модели данных. Кроме того, на внешнем (прикладном, пользовательском) уровне таких моделей может быть несколько. Модели, а также схемы, специфицируемые на их основе, называются соответственно внешней, концептуальной и внутренней. Как очевидно, конечной целью проектирования является построение конкретной базы данных, в той или иной степени воплощающей представление проектировщика о предметной области и задачах, решаемых пользователями с помощью созданной базы. Рассматривая базу данных как конкретную реализацию модели, мы по существу устанавливаем порядок процесса, отделяя этап определения принципов (то, какой база должна быть) от этапа воплощения этих принципов при реализации базы данных в конкретной среде СУБД, ОС и языках программирования. И как показывает практика, между реализациями баз данных и принципами их построения всегда есть расхождения. Различия являются следствием разных причин, но чаще всего это явный или неявный отказ от некоторых принципиальных ограничений, налагаемых, например, моделью данных или базовыми (встроенными) алгоритмами обработки в пользу частного решения, которое, по мнению проектировщика, будет более эффективно, например, для понимания или обработки данных. Важность отделения проектирования на абстрактном уровне от физической реализации состоит в том, что, объявляя принципы, мы конструктивно ограничиваем область применения. Во-первых, размерность и сложность задачи должна быть сокращена до такого уровня, чтобы реализация стала возможной в данных конкретных условиях – ресурсах среды, профессионализме проектировщика, подготовленности пользователя и т.д. Во-вторых, поскольку база данных по определению предназначена
8
Мартьянова А.Е. Базы данных и знаний
для многофункционального использования различными пользователями, и в то же время – для обслуживания запросов, не предвиденных при проектировании, такое явное объявление принципов позволит не вводить в заблуждение пользователя и не создавать приложения для решения задач, которые, в силу своего принципиального отличия от тех, которые рассматривались при проектировании, обусловят неэффективную обработку данных. Проектирование базы данных – это упорядоченный формализованный процесс создания системы взаимосвязанных описаний, то есть таких моделей предметной области, которые связывают (фиксируют) хранимые в базе данные с объектами предметной области, описываемыми этими данными. Прикладное назначение таких описаний состоит в том, чтобы пользователь, практически не имеющий представления об организации данных в БД (физическом размещении в памяти данных и механизмах их поиска), обращая запрос к базе, имел бы практическую возможность получить адекватную информацию о состоянии объекта предметной области. Проектирование начинается с анализа предметной области и выявления функциональных и других требований к проектируемой системе. Подробнее этот процесс мы рассмотрим ниже, а здесь отметим, что проектирование обычно выполняется человеком (группой людей) – системным аналитиком (а на практике чаще администратором базы данных), которым может быть как специально выделенный сотрудник, так и будущий пользователь базы данных, достаточно хорошо знакомый с машинной обработкой данных. Объединяя отдельные представления о содержимом базы данных, полученные в результате опроса пользователей, и свои представления о данных, которые могут потребоваться для решения практических задач, системный аналитик сначала создает обобщенное неформальное описание создаваемой базы данных. Это описание, выполненное с использованием естественного языка, математических выражений, таблиц, графов и других средств, понятных всем людям, работающим над проектированием базы данных, называют инфологической моделью. Такая человеко-ориентированная модель практически полностью независима от физических параметров среды хранения данных, которой может быть как память человека, так и ЭВМ. Поэтому инфологическая модель не изменяется до тех пор, пока какие-то изменения в реальном мире (той его части, которая отнесена к предметной области) не потре-
8
Мартьянова А.Е. Базы данных и знаний
9
буют изменения в модели соответствующего фрагмента описания, чтобы эта модель продолжала адекватно отражать предметную область. Остальные модели являются машинно-ориентированными. С их помощью СУБД дает возможность программам и пользователям осуществлять доступ к хранимым данным лишь по их именам, не заботясь о физическом расположении этих данных. Так как доступ к данным осуществляется с помощью конкретной СУБД, то модели должны быть представлены на языке описания данных этой СУБД. Такое описание, создаваемое по инфологической модели данных, называют даталогической моделью данных. Для размещения и поиска данных на внешних запоминающих устройствах СУБД использует физическую модель данных. Представленная трехуровневая архитектура (инфологический, даталогический и физический уровни) позволяет обеспечить независимость хранимых данных от использующих их программ. Хранимые данные могут быть переписаны на другие носители или их физическая структура может быть реорганизована, в том числе дополнена полями для новых приложений, но это повлечет лишь изменение физической и, возможно, даталогической модели данных. Главное, такие изменения физической и даталогической моделей не будут замечены существующими пользователями системы (окажутся «прозрачными» для них) так же, как не будут замечены и вновь подключаемые пользователи. Кроме того, независимость данных обеспечивает возможность создания новых приложений для решения новых задач без разрушения существующих. Проектирование БД на основе принципов нормализации Процесс проектирования БД на основе принципов нормализации представляет собой последовательность переходов от неформального словесного описания информационной структуры предметной области к формализованному описанию объектов предметной области в терминах некоторой модели [10]. В общем случае можно выделить следующие этапы проектирования: 1. Системный анализ и словесное описание информационных объектов предметной области. 2. Проектирование инфологической модели предметной области – частично формализованное описание объектов предметной области в терминах некоторой семантической модели, например, в терминах ERмодели. 3. Даталогическое или логическое проектирование БД, то есть описание БД в терминах принятой даталогической модели данных.
10
Мартьянова А.Е. Базы данных и знаний
4. Физическое проектирование БД, то есть выбор эффективного размещения БД на внешних носителях для обеспечения наиболее эффективной работы приложения. Если мы учтем, что между вторым и третьим этапами необходимо принять решение, с использованием какой стандартной СУБД будет реализовываться наш проект, то условно процесс проектирования можно представить последовательностью выполнения пяти соответствующих этапов (рис. I.1). Системный анализ предметной области
Инфологическое проектирование
Выбор СУБД
Даталогическое проектирование (Логическое проектирование)
Физическое проектирование
Рис. I.1. Этапы проектирования БД
Системный анализ предметной области С точки зрения проектирования БД в рамках системного анализа, необходимо осуществить первый этап, то есть провести подробное словесное описание объектов предметной области и реальных связей, которые присутствуют между описываемыми объектами. Желательно, чтобы данное описание позволяло корректно определить все взаимосвязи между объектами предметной области. В общем случае существуют два похода к выбору состава и структуры предметной области [10]: • Функциональный подход – он реализует принцип движения «от задач» и применяется тогда, когда заранее известны функции некоторой группы лиц и комплексов задач, для обслуживания информационных по10
Мартьянова А.Е. Базы данных и знаний
11
требностей которых создается рассматриваемая СУБД. В этом случае мы можем четко выделить минимальный необходимый набор объектов предметной области, которые должны быть описаны. • Предметный подход – когда информационные потребности будущих пользователей БД жестко не фиксируются. Они могут быть многоаспектными и весьма динамичными. Мы не может точно выделить минимальный набор объектов предметной области, которые необходимо описывать. В описание предметной области в этом случае включаются такие объекты и взаимосвязи, которые наиболее характерны и наиболее существенны для нее. БД, конструируемая при этом, называется предметной, то есть она может быть использована при решении множества разнообразных, заранее не определенных задач. Конструирование предметной БД в некотором смысле кажется гораздо более заманчивым, однако трудность всеобщего охвата предметной области с невозможностью конкретизации потребностей пользователей может привести к избыточно сложной схеме БД, которая для конкретных задач будет неэффективной. Чаще всего на практике рекомендуется использовать некоторый компромиссный вариант, который, с одной стороны, ориентирован на конкретные задачи или функциональные потребности пользователей, а с другой стороны, учитывает возможность наращивания новых приложений. Системный анализ должен заканчиваться подробным описанием информации об объектах предметной области, которая требуется для решения конкретных задач и которая должна храниться в БД, формулировкой конкретных задач, которые будут решаться с использованием данной БД с кратким описанием алгоритмов их решения, описанием выходных документов, которые должны генерироваться в системе, описанием входных документов, которые служат основанием для заполнения данными БД. Рассмотрим проектирование БД на примере предметной области «Учебный процесс». Описание предметной области Рассмотрим вариант, который ориентирован на конкретные задачи или функциональные потребности пользователей, а с другой стороны, учитывает возможность наращивания новых приложений. Пусть необходимо построить базу данных, содержащую информацию об учебном процессе в институте [2]: • списки студентов групп;
12
Мартьянова А.Е. Базы данных и знаний
• перечень изучаемых предметов; • преподавательский состав кафедр, обеспечивающих учебный процесс; • сведения о лекционных и практических занятиях в каждой из групп; • результаты сдачи экзаменов (зачетов) по каждому из проведенных занятий. В результате анализа предметной области выявляются документы – источники данных для создания базы данных. • Документы справочной информации. Справочная информация содержится в документах «Список студентов групп», «Список преподавателей кафедр», «Список изучаемых предметов». На рис. I.2, I.3 приведены формы справочных документов для студентов и преподавателей. • Документы учетной информации. Учетная информация про учебному процессу может быть представлена в планах проведения занятий в группах на текущий семестр, содержащих перечень лекционных и практических занятий по предметам (рис. I.4), а также в заполненных экзаменационных ведомостях (рис. I.5). Особо отметим, что документы предметной области не только дают возможность выявить структуру данных, но и являются основой для разработки форм ввода/вывода, отчетов для печати документов. Список студентов группы № _________ Номер студента
Фамилия И.О.
Год рож-
Адрес
дения
Балл при поступлении
Количество студентов ___________________ Средний балл в группе при поступлении ___________ Рис. I.2. Форма документа со списком студентов группы
12
Мартьянова А.Е. Базы данных и знаний
13
Список преподавателей кафедры Название кафедры ____________ Код кафедры ________ Телефон ______ Заведующий ____________
Таб. номер Фамилия И. О.
Уч. степень
Уч. звание
Рис. I.3. Форма документа со списком преподавателей кафедры
План проведения занятий в группе группа №___________ Название Код
семестр__________/текущий/
ФИО пре-
предмета предмета подавателя
Таб. номер
Вид
Часы
преподавателя занятия
Рис. I.4. Форма документа с перечнем занятий по предмету в группе
Экзаменационная ведомость Название предмета ______________________
Группа _________________
Преподаватель ______________________________ Вид сдачи ______________________________
№ п/п
Фамилия И.О. студента
Дата ___________________
Оценка
Подпись преподавателя
Рис. I.5. Форма документа-бланка экзаменационной ведомости
14
Мартьянова А.Е. Базы данных и знаний
Инфологическое моделирование Инфологическая модель применяется на втором этапе проектирования БД, то есть после словесного описания предметной области [10]. Процесс проектирования длительный и требует обсуждений с заказчиком и со специалистами в предметной области. Наконец, при разработке серьезных корпоративных информационных систем проект базы данных является тем фундаментом, на котором строится вся система в целом, и вопрос о возможном кредитовании часто решается экспертами банка на основании именно грамотно сделанного инфологического проекта БД. Следовательно, инфологическая модель должна включать такое формализованное описание предметной области, которое легко будет «читаться» не только специалистами по базам данных. И это описание должно быть настолько емким, чтобы можно было оценить глубину и корректность проработки проекта БД, и конечно, оно не должно быть привязано к конкретной СУБД. Выбор СУБД – это отдельная задача, для корректного ее решения необходимо иметь проект, который не привязан ни к какой конкретной СУБД. Инфологическое проектирование связано, прежде всего, с попыткой представления семантики предметной области в модели БД. Реляционная модель данных в силу своей простоты и лаконичности не позволяет отобразить семантику, то есть смысл предметной области. Ранние теоретико-графовые модели в большей степени отображали семантику предметной области. Они в явном виде определяли иерархические связи между объектами предметной области. Проблема представления семантики давно интересовала разработчиков, и в семидесятых годах было предложено несколько моделей данных, названных семантическими моделями. К ним можно отнести семантическую модель данных, предложенную Хаммером (Hammer) и МакЛеоном (McLeon) в 1981 году, функциональную модель данных Шипмана (Shipman), также созданную в 1981 году, модель «сущность-связь», предложенную Ченом (Chen) в 1976 году, и ряд других моделей. У всех моделей были свои положительные и отрицательные стороны, но испытание временем выдержала только последняя. И в настоящий момент именно модель Чена «сущность-связь», или «Entity Relationship», стала фактическим стандартом при инфологическом моделировании баз данных. Общепринятым стало сокращенное название ER-модель, большинство современных CASE-средств содержат инструментальные средства для описания данных в формализме этой модели. Кроме того, разработаны методы автоматического преобразования проекта БД из ER-модели в 14
Мартьянова А.Е. Базы данных и знаний
15
реляционную, при этом преобразование выполняется в даталогическую модель, соответствующую конкретной СУБД. Все CASE-системы имеют развитые средства документирования процесса разработки БД, автоматические генераторы отчетов позволяют подготовить отчет о текущем состоянии проекта БД с подробным описанием проектов БД и их отношений как в графическом виде, так и в виде готовых стандартных печатных отчетов, что существенно облегчает ведение проекта. В настоящий момент не существует единой общепринятой системы обозначений для ER-модели, и разные CASE-средства используют разные графические нотации, но, разобравшись в одной, можно легко понять и другие нотации. Модель «сущность-связь» Как любая модель, модель «сущность-связь» имеет несколько базовых понятий, которые образуют исходные кирпичики, из которых строятся уже более сложные объекты по заранее определенным правилам. Эта модель в наибольшей степени согласуется с концепцией объектно-ориентированного проектирования, которая в настоящий момент, несомненно, является базовой для разработки сложных программных систем, поэтому многие понятия вам могут показаться знакомыми, и если это действительно так, то тем проще вам будет освоить технологию проектирования баз данных, основанную на ER-модели. • Сущность, с помощью которой моделируется класс однотипных объектов. Сущность имеет имя, уникальное в пределах моделируемой системы. Так как сущность соответствует некоторому классу однотипных объектов, то предполагается, что в системе существует множество экземпляров данной сущности. Объект, которому соответствует понятие сущности, имеет свой набор атрибутов – характеристик, определяющих свойства данного представителя класса. При этом набор атрибутов должен быть таким, чтобы можно было различать конкретные экземпляры сущности. Например, у сущности «Сотрудник» может быть следующий набор атрибутов: Табельный номер, Фамилия, Имя, Отчество, Дата рождения, Количество детей, Наличие родственников за границей. Набор атрибутов, однозначно идентифицирующий конкретный экземпляр сущности, называется ключевым. Для сущности «Сотрудник» ключевым будет атрибут Табельный номер, поскольку для всех сотрудников данного предприятия табельные номера будут различны. Экземпляром сущности «Сотрудник» будет описание конкретного сотрудника предприятия. Одно из общепринятых графических обозначений сущности – прямоуголь-
16
Мартьянова А.Е. Базы данных и знаний
ник, в верхней части которого записано имя сущности, а ниже перечисляются атрибуты, причем ключевые атрибуты помечаются, например, подчеркиванием или специальным шрифтом (рис. I.6). СОТРУДНИК Табельный номер Фамилия Имя Отчество Количество детей Рис. I.6. Пример определения сущности в модели ER
Между сущностями могут быть установлены связи – бинарные ассоциации, показывающие, каким образом сущности соотносятся или взаимодействуют между собой. Связь может существовать между двумя разными сущностями или между сущностью и ей же самой (рекурсивная связь). Она показывает, как связаны экземпляры сущностей между собой. Если связь устанавливается между двумя сущностями, то она определяет взаимосвязь между экземплярами одной и другой сущности. Например, если у нас есть связь между сущностью «Студент» и сущностью «Преподаватель» и эта связь – руководство дипломными проектами, то каждый студент имеет только одного руководителя, но один и тот же преподаватель может руководить множеством студентов дипломников. Поэтому это будет связь «один-ко-многим» (1:М), один со стороны «Преподаватель» и многие со стороны «Студент» (рис. I.7). В разных нотациях мощность связи изображается по-разному. В нашем примере мы используем нотацию CASE системы POWER DESIGNER, здесь множественность изображается путем разделения линии связи на 3. Связь имеет общее имя «Дипломное проектирование» и имеет имена ролей со стороны обеих сущностей. Со стороны студента эта роль называется «Пишет диплом под руководством», со стороны преподавателя эта связь называется «Руководит» . Графическая интерпретация связи позволяет сразу прочитать смысл взаимосвязи между сущностями, она наглядна и легко интерпретируема. Связи делятся на три типа по множественности: один-к-одному (1:1), один-ко-многим (1:М), многие-ко-многим (М:М). Связь один-к-одному означает, что экземпляр одной сущности связан только с одним экземпляром другой сущности. Связь 1:М означает, что один экземпляр сущности, расположенный слева по связи, может быть связан с несколькими экземплярами 16
Мартьянова А.Е. Базы данных и знаний
17
сущности, расположенными справа по связи. Связь «один-к-одному» (1:1) означает, что один экземпляр одной сущности связан только с одним экземпляром другой сущности, а связь «многие-ко-многим» (М:М) означает, что один экземпляр первой сущности может быть связан с несколькими экземплярами второй сущности, и наоборот, один экземпляр второй сущности может быть связан с несколькими экземплярами первой сущности. Руководит
ПРЕПОДАВАТЕЛЬ Табельный номер Фамилия имя отчество Кафедра
Дипломное проектирование
СТУДЕНТ Номер зачетной книжки Фамилия Имя Отчество Группа
Пишет диплом
Рис. I.7. Пример отношения «один-ко-многим» при связывании сущностей «Студент» и «Преподаватель»
Например, если мы рассмотрим связь типа «Изучает» между сущностями «Студент» и «Дисциплина», то это связь типа «многие-комногим» (М:М), потому что каждый студент может изучать несколько дисциплин, но и каждая дисциплина изучается множеством студентов. Такая связь изображена на рис. I.8. •Между двумя сущностями может быть задано сколько угодно связей с разными смысловыми нагрузками. Например, между двумя сущностями «Студент» и «Преподаватель» можно установить две смысловые связи, одна – рассмотренная уже ранее «Дипломное проектирование», а вторая может быть условно названа «Лекции», и она определяет, лекции каких преподавателей слушает данный студент и каким студентам данный преподаватель читает лекции. Ясно, что это связь типа многие-комногим. Пример этих связей приведен на рис. I.8.
18
Мартьянова А.Е. Базы данных и знаний
Читает лекции
Лекции
ПРЕПОДАВАТЕЛЬ Табельный номер Фамилия имя отчество Кафедра Руководит
Слушает лекции
СТУДЕНТ Номер зачетной книжки Фамилия Имя Отчество Группа
Дипломное проектирование
Пишет диплом Рис. I.8. Пример моделирования связи «многие-ко-многим»
• Связь любого из этих типов может быть обязательной, если в данной связи должен участвовать каждый экземпляр сущности, необязательной – если не каждый экземпляр сущности должен участвовать в данной связи. При этом связь может быть обязательной с одной стороны и необязательной с другой стороны. Обязательность связи тоже поразному обозначается в разных нотациях. Мы снова используем нотацию POWER DESIGNER. Здесь необязательность связи обозначается пустым кружочком на конце связи, а обязательность перпендикулярной линией, перечеркивающей связь. И эта нотация имеет простую интерпретацию. Кружочек означает, что ни один экземпляр не может участвовать в этой связи. А перпендикуляр интерпретируется как то, что, по крайней мере, один экземпляр сущности участвует в этой связи. Рассмотрим для этого ранее приведенный пример связи «Дипломное проектирование». На нашем рисунке эта связь интерпретируется как необязательная с двух сторон. Но ведь на самом деле каждый студент, который пишет диплом, должен иметь своего руководителя дипломного проектирования, но, с другой стороны, не каждый преподаватель должен вести дипломное проектирование. Поэтому в данной смысловой постановке изображение этой связи изменится и будет таким, как представлено на рис. I.9.
18
Мартьянова А.Е. Базы данных и знаний
Руководит
19
ПРЕПОДАВАТЕЛЬ Табельный номер Фамилия имя отчество Кафедра
Дипломное проектирование
СТУДЕНТ Номер зачетной книжки Фамилия Имя Отчество Группа
Пишет диплом
Рис. I.9. Пример обязательной и необязательной связи между сущностями
Кроме того, в ER-модели допускается принцип категоризации сущностей. Это значит, что, как в объектно-ориентированных языках программирования, вводится понятие подтипа сущности, то есть сущность может быть представлена в виде двух или более своих подтипов – сущностей, каждая из которых может иметь общие атрибуты и отношения и/или атрибуты и отношения, которые определяются однажды на верхнем уровне и наследуются на нижнем уровне. Все подтипы одной сущности рассматриваются как взаимоисключающие, и при разделении сущности на подтипы она должна быть представлена в виде полного набора взаимоисключающих подтипов. Если на уровне анализа не удается выявить полный перечень подтипов, то вводится специальный подтип, называемый условно «Прочие», который в дальнейшем может быть уточнен. В реальных системах бывает достаточно ввести подтипизацию на двух-трех уровнях. Сущность имеет имя, уникальное в пределах модели. При этом имя сущности – это имя типа, а не конкретного экземпляра. Сущности подразделяются на сильные и слабые. Сущность является слабой, если ее существование зависит от другой сущности – сильной по отношению к ней. Например, сущность «Подчиненный» является слабой по отношению к сущности «Сотрудник»: если будет удалена запись, соответствующая некоторому сотруднику, имеющему подчиненных, то сведения о подчинении также должны быть удалены. Сущность может быть расщеплена на два или более взаимоисключающих подтипов, каждый из которых включает общие атрибуты и/или связи. Эти общие атрибуты и/или связи явно определяются один раз на
20
Мартьянова А.Е. Базы данных и знаний
более высоком уровне. В подтипах могут определяться собственные атрибуты и/или связи. В принципе выделение подтипов может продолжаться на более низких уровнях, но в большинстве случаев оказывается достаточно двух-трех уровней. Сущность, на основе которой определяются подтипы, называется супертипом. Подтипы должны образовывать полное множество, то есть любой экземпляр супертипа должен относиться к некоторому подтипу. Иногда для полноты множества надо определять дополнительный подтип, например, «Прочие». Подтип наследует свойства и связи супертипа. Например, тип сущности «Программист» является подтипом сущности «Сотрудник». Программисты обладают всеми свойствами сотрудников и участвуют во всех связях, однако обратные утверждения неверны.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Дайте определения банка данных, базы данных и базы знаний. 2. Перечислите функции СУБД. 3. Опишите роли пользователей банков данных. 4. Опишите трехуровневую систему организации баз данных. 5. Опишите назначение модели данных. 6. Перечислите этапы проектирования баз данных и кратко их охарактеризуйте. 7. Поясните необходимость системного анализа предметной области на примере будущей БД «Учебный процесс». 8. Дайте определение инфологического моделирования. 9. Дайте определение сущности. 10. Дайте определение атрибута сущности. 11. Поясните, как вы понимаете выражение: «Между сущностями могут быть установлены связи». 12. Перечислите типы связей между сущностями. ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Составьте список всех сущностей для будущего проекта БД «Учебный процесс». 2. Составьте наборы атрибутов, определяющих свойства объектов, которым соответствует понятие той или иной сущности предметной области «Учебный процесс». 20
Мартьянова А.Е. Базы данных и знаний
21
3. Назначьте ключевой атрибут для каждой сущности предметной области «Учебный процесс». 4. Установите связи между сущностями, выясните тип каждой связи (1:1, 1:М, М:М, обязательная, необязательная) между сущностями для предметной области «Учебный процесс». Оформите отчет по работе. 5.
22
Мартьянова А.Е. Базы данных и знаний
Работа II. Инфологическое моделирование (продолжение). Даталогическое проектирование. Получение реляционной схемы из ER-диаграммы Представим предметную область «Учебный процесс» как взаимодействие следующих сущностей: каждый «Студент» сдает экзамен или зачет по некоторому предмету согласно «Учебному плану». В учебном процессе участвует «Преподаватель», который осуществляет чтение учебного курса и контроль знаний «Студента». В учебном процессе также участвует «Кафедра», которая организовывает работу «Преподавателя». Обучение «Студента» ведется в «Группе» совместно с одногруппниками. На основании изучения предметной области выделим следующие сущности модели «сущность-связь» («Entity Relationship» - ER-модели): «Студент», «Группа», «Кафедра», «Преподаватель», «Учебный план» и изобразим их в виде графических обозначений (прямоугольник, в верхней части которого записано имя сущности, а ниже перечисляются атрибуты, причем ключевые атрибуты помечаются подчеркиванием) – см. рис. I.10 – I.14. Следует отметить, что для каждой сущности устанавливается свой код – ключевой атрибут, однозначно характеризующий сущность. Например, обычный номер студента в группе не может выполнять роль ключа, поскольку для каждой группы эти номера могут повторяться. Для преподавателя атрибут Табельный номер нежелательно брать в качестве ключевого, поскольку ведется электронный учет и каждому преподавателю присваивается уникальный номер идентификации. СТУДЕНТ Код студента Номер зачетной книжки Фамилия Имя Отчество Год рождения Адрес Домашний телефон Балл при поступлении Рис. I.10. Определение сущности «Студент» в модели ER
22
Мартьянова А.Е. Базы данных и знаний
ГРУППА Код группы Обозначение группы Количество студентов
Средний балл в группе при поступлении Рис. I.11. Определение сущности «Группа» в модели ER
КАФЕДРА Код кафедры Название кафедры Телефон Заведующий Рис. I.12. Определение сущности «Кафедра» в модели ER
ПРЕПОДАВАТЕЛЬ Код преподавателя Табельный номер Фамилия Имя Отчество Домашний адрес Домашний телефон Должность Ученая степень Ученое звание Рис. I.13. Определение сущности «Преподаватель» в модели ER
УЧЕБНЫЙ ПЛАН Код учебного плана Наименование предмета Программа Часы Вид занятия Семестр Вид сдачи Оценка Дата сдачи Рис. I.14. Определение сущности «Учебный план» в модели ER
23
24
Мартьянова А.Е. Базы данных и знаний
Для реализации дополнительных функций базы может потребоваться введение дополнительных атрибутов, например, номера зачетной книжки и домашнего телефона студента, домашнего адреса и домашнего телефона преподавателя, должности преподавателя, рабочей программы, даты сдачи экзамена (зачета) и т.д. Будем считать для простоты все связи обязательными. Между выделенными сущностями можно выделить, например, следующие связи: 1. «Студенты» объединены в «Группы» (связь М:1). 2. Работу «Преподавателей» организуют «Кафедры» (связь М:1). 3. «Преподаватели» преподают предметы согласно «Учебному плану» (связь 1:М). 4. «Студенты» сдают предметы по «Учебному плану» (связь М:М). Покажем теперь эти связи между всеми сущностями графически с использованием нотации POWER DESIGNER. Связь между сущностями «Студент» и «Группа» представлена на рис. I.15. Будем считать для простоты, что все студенты обязательно объединены в группы. ГРУППА Объединяет
Код группы Обозначение группы Количество студентов Средний балл при поступлении
СТУДЕНТ Код студента Номер зачетной книжки Фамилия Имя Отчество Год рождения Адрес Домашний телефон
Объединение в группы
Входит в состав
Рис. I.15. Моделирование связи между сущностями «Студент» и «Группа»
Аналогичным образом выглядит связь «Преподаватель» и «Кафедра». Изобразите ее самостоятельно. Для простоты предлагается считать, что каждый преподаватель обязательно работает на какой-нибудь из кафедр.
24
Мартьянова А.Е. Базы данных и знаний
25
На рис. I.16 показана версия полной ER-модели для базы данных «Учебный процесс». ГРУППА
КАФЕДРА
Код группы Обозначение группы Количество студентов Средний балл при поступлении
Код кафедры Название кафедры Телефон Заведующий
СТУДЕНТ Код студента Номер зачетной книжки Фамилия Имя Отчество Год рождения Адрес Домашний телефон Балл при поступлении
УЧЕБНЫЙ ПЛАН
ПРЕПОДАВАТЕЛЬ
Код учебного плана Наименование предмета Программа Часы Вид занятия Семестр Вид сдачи Оценка Дата сдачи
Код преподавателя Табельный номер Фамилия Имя Отчество Домашний адрес Домашний телефон Должность Ученая степень Ученое звание
Рис. I.16. Инфологическая модель «Учебный процесс»
Даталогическое проектирование Следующий этап проектирования – построение даталогической модели [10]. В рассматриваемом случае задача этого типа – преобразование ER-диаграммы в реляционную схему. В реляционных БД даталогическое или логическое проектирование приводит к разработке схемы БД, то есть совокупности схем отношений, которые адекватно моделируют абстрактные объекты предметной области и семантические связи между этими объектами. Основой анализ корректности схемы являются так называемый функциональные зависимости между атрибутами БД. Некоторые зависимости между атрибутами отношений являются нежелательными из-за побочных эффектов и аномалий, которые они вызывают при модификации БД. При этом под процессом модификации БД мы понимаем внесение новых данных в БД или удаление некоторых данных из БД, а также обновление значений некоторых атрибутов.
26
Мартьянова А.Е. Базы данных и знаний
Однако этап логического или даталогического проектирования не заканчивается проектированием схемы отношений. В общем случае в результате выполнения этого этапа должны быть получены следующие результирующие документы [10]: • Описание концептуальной схемы БД в терминах выбранной СУБД. • Описание внешних моделей в терминах выбранной СУБД. • Описание декларативных правил поддержки целостности базы данных. • Разработка процедур поддержки семантической целостности базы данных. • Однако перед тем как описывать построенную схему в терминах выбранной СУБД, нам надо выстроить эту схему. • Мы должны построить корректную схему БД, ориентируясь на реляционную модель данных. Модель предметной области разрабатываемой системы должна быть представлена в терминах модели данных концептуального уровня выбранной конкретной СУБД. Эту стадию называют логическим (или даталогическим) проектированием базы данных, а ее результатом является концептуальная схема базы данных, включающая определение всех информационных элементов (единиц) и связей, в том числе задание типов, характеристик и имен. Хотя даталогическое проектирование оперирует не физическими записями, а логическими понятиями, связанными со структурой базы данных, тем не менее особенности представления данных, правила и языки агрегирования и манипулирования данными имеют определяющее влияние. Не все виды связей, например, «многие ко многим», могут быть непосредственно отображены в логической модели. Кроме того, может быть много вариантов отображения инфологической модели предметной области в даталогическую модель базы. Здесь следует учитывать влияние двух следующих значимых факторов, связанных с практикой разработки базы данных. Во-первых, связи предметной области могут отображаться двумя путями: как декларативным – в логической схеме, так и процедурным – отработкой связей через программные модули, обрабатывающие (связывающие) соответствующие хранимые данные. Во-вторых, существенным фактором может оказаться характер обработки информации. Например, частые обращения к совместно обрабатываемым данным, очевидно, предполагают их совместное хранение, а
26
Мартьянова А.Е. Базы данных и знаний
27
данные (особенно большого объема), к которым обращаются редко, целесообразно хранить отдельно от часто используемых. Рассмотрим по шагам общий подход к построению реляционной базы данных на основе инфологической модели, представленной ERдиаграммой [7]. Получение реляционной схемы из ER-диаграммы 1. Каждая простая сущность превращается в таблицу (отношение). Имя сущности становится именем таблицы. 2. Каждый атрибут становится возможным столбцом с тем же именем. Столбцы, соответствующие необязательным атрибутам, могут содержать неопределенные значения; столбцы, соответствующие обязательным атрибутам, – не могут. Если атрибут является множественным, то для него строится отдельное отношение. 3. Компоненты уникального идентификатора сущности превращаются в первичный ключ. Если имеется несколько возможных уникальных идентификаторов, выбирается наиболее используемый. Если в состав уникального идентификатора входят связи, то к числу столбцов первичного ключа добавляется копия уникального идентификатора сущности, находящейся на дальнем конце связи (этот процесс может продолжаться рекурсивно). Для именования этих столбцов используются имена концов связей и/или имена сущностей. 4. Связи «многие-к-одному» и «один-к-одному» становятся внешними ключами. То есть создается копия уникального идентификатора с конца связи «один», и соответствующие столбцы составляют внешний ключ. 5. Разрешение связей типа «многие-ко-многим». Так как в реляционной модели данных поддерживаются между отношениями только связи типа «один-ко-многим», а в ER- модели допустимы связи «многие-комногими», то необходим специальный механизм преобразования, который позволит отразить множественные связи, неспецифические для реляционной модели, с помощью допустимых для нее категорий. Это делается введением специального дополнительного отношения, которое связано с каждым исходным связью «один-ко-многим», атрибутами этого отношения являются первичные ключи связываемых отношений. 6. Индексы создаются для первичного ключа (уникальный индекс), а также внешних ключей и тех атрибутов, которые будут часто использоваться в запросах. 7. Если в концептуальной схеме присутствуют подтипы, то возможны два варианта.
28
Мартьянова А.Е. Базы данных и знаний
Все подтипы хранятся в одной таблице, которая создается для самого внешнего супертипа, а для подтипов создаются представления. В таблицу добавляется по крайней мере один столбец, содержащий код ТИПА, и он становится частью первичного ключа. Во втором случае для каждого подтипа создается отдельная таблица (для более нижних – представления) и для каждого подтипа первого уровня супертип воссоздается с помощью представления UNION (из всех таблиц подтипов выбираются общие столбцы – столбцы супертипа). 8. Если остающиеся внешние ключи все принадлежат одному домену, то есть имеют общий формат, то создаются два столбца: идентификатор связи и идентификатор сущности. Столбец идентификатора связи используется для различения связей. Столбец идентификатора сущности используется для хранения значений уникального идентификатора сущности на дальнем конце соответствующей связи. Если результирующие внешние ключи не относятся к одному домену, то для каждой связи, покрываемой дугой исключения, создаются явные столбцы внешних ключей. Правила разрешения связей ER-диаграммы Существует шесть простых правил генерации отношений [15]. Правило 1. Если степень бинарной связи равна 1:1 и класс принадлежности обеих сущностей является обязательным, то требуется только одна таблица. Первичным ключом этой таблицы может быть ключ любой из двух сущностей. Правило 2. Если степень бинарной связи равна 1:1 и класс принадлежности одной сущности является обязательным, а другой – необязательным, то необходимо построение двух таблиц. Под каждую сущность необходимо выделить одну таблицу. При этом первичный ключ сущности должен служить первичным ключом для соответствующей таблицы. Кроме того, ключ сущности, для которой класс принадлежности является необязательным, добавляется в качестве атрибута в таблицу, выделенную для сущности с обязательным классом принадлежности. Правило 3. Если степень бинарной связи равна 1:1 и класс принадлежности ни одной из сущностей не является обязательным, то необходимо использовать три таблицы: по одной для каждой сущности (ключи сущностей служат в качестве первичных в соответствующих таблицах), и одной для
28
Мартьянова А.Е. Базы данных и знаний
29
связи. Среди своих атрибутов таблица, выделяемая для связи, будет иметь по одному ключу каждой сущности. Правило 4. Если степень бинарной связи равна 1:M и класс принадлежности M-связной сущности является обязательным, то достаточным является использование двух таблиц (по одной на каждую сущность), при условии, что ключ каждой сущности служит в качестве первичного ключа для соответствующей таблицы. Помимо этого, ключ 1-связной сущности должен быть добавлен как атрибут в таблицу, отводимую n-связной сущности. Правило 5. Если степень бинарной связи равна 1:M и класс принадлежности M-связной сущности является необязательным, то необходимо формирование трех таблиц – по одной для каждой сущности, причем ключ каждой сущности служит первичным ключом соответствующей таблицы, и одной таблицы для связи. Связь должна иметь среди своих атрибутов ключи обеих сущностей. Правило 6. Если степень бинарной связи равна M:M, то для хранения данных необходимы три таблицы: по одной для каждой сущности, причем ключ каждой сущности используется в качестве первичного ключа соответствующей таблицы, и одной таблицы для связи. Последняя таблица должна иметь в числе своих атрибутов ключи обеих сущностей.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию Сколько сущностей содержит ER-модель для БД «Учебный 1. процесс»? Перечислите их. Какие бинарные связи наблюдаются в ER-модели для БД 2. «Учебный процесс»? Перечислите их. Рассмотрите по шагам общий подход к построению реляци3. онной базы данных на основе инфологической модели, представленной ER-диаграммой. Сформулируйте шесть правил генерации отношений при ис4. пользовании исходных бинарных связей между сущностями. 5. Рассмотрите все бинарные связи ER-диаграммы «Учебный процесс» типа M:M. Есть ли необходимость специального преобразования связей согласно сформулированным правилам?
30
Мартьянова А.Е. Базы данных и знаний
6. Рассмотрите все бинарные связи ER-диаграммы «Учебный процесс» типа 1:M. Есть ли необходимость специального преобразования связей согласно сформулированным правилам? ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Рассмотрите бинарную связь типа M:M между сущностями «Студент» и «Учебный план». Попытайтесь разрешить ее введением специального дополнительного отношения согласно изложенному правилу 6. 2. Рассмотрите все бинарные связи типа 1:M обязательного класса принадлежности M-связной сущности: между сущностями «Группа» и «Студент», между сущностями «Кафедра» и «Преподаватель», между сущностями «Преподаватель» и «Учебный план» ERдиаграммы «Учебный процесс». Разрешите эти связи согласно правилу 4. 3. Изобразите ER-модель БД «Учебный процесс». 4. Предположите, что связь между сущностями «Студент» и «Группа» типа 1:M имеет необязательный класс принадлежности Mсвязной сущности. По какому правилу разрешается такая связь? Попытайтесь описать ее. 5. Оформите отчет по работе.
30
Мартьянова А.Е. Базы данных и знаний
31
Работа III. Даталогическое проектирование (продолжение). Нормализация отношений В рассматриваемом нами примере «Учебный процесс» существующие связи между сущностями являются бинарными, поскольку каждая связь связывает только две сущности. Такие связи встречаются наиболее часто. В рассматриваемом примере наблюдаются бинарные связи типа 1:M с обязательным классом принадлежности n-связной сущности и связи типа M:M, поэтому воспользуемся правилами 4 и 6 для формирования реляционной модели из инфологической модели (рис. I.16). Первые шаги преобразования состоят в превращении каждой сущности в отношение (таблицу). Связь типа М:М, которую называют «сущность-связь», тоже превращается в отдельное отношение. Каждое свойство становится атрибутом – столбцом соответствующей таблицы. 1. После реализации первого шага каждая простая сущность превращается в таблицу с тем же именем. Таким образом, имеем следующие таблицы: «Группа», «Студент», «Кафедра», «Преподаватель», «Учебный план». 2. Каждый атрибут становится столбцом с тем же именем. Столбцы, соответствующие необязательным атрибутам, могут содержать неопределенные значения; столбцы, соответствующие обязательным атрибутам, – не могут. 3. Компоненты уникальных идентификаторов сущностей превращаются в первичные ключи соответствующих отношений. Например, первичным ключом таблицы «Учебный план» назначим столбец Код учебного плана. 4. Связи «многие-к-одному» становятся внешними ключами. Необходимо преобразовать связи во внешние ключи. На стороне «многие» в отношение согласно правилу 4 должен быть добавлен как внешний ключ первичный ключ отношения со стороны «один». Например, в отношение «Студент» должен быть добавлен для связи с отношением «Группа» внешний ключ «Код группы» из отношения «Группа», где он является первичным ключом. 5. Связи типа «многие-ко-многим». В ER-диаграмме наблюдается связь этого типа между сущностями «Студент» и «Учебный план». Рассмотрим эту связь «многие-ко-многим». Согласно правилу 6 должно быть создано третье отношение – для связи между отношениями. Назовем это отношение «Успеваемость». В число атрибутов нового отноше-
32
Мартьянова А.Е. Базы данных и знаний
ния «Успеваемость» поместим ключи отношений «Студент», «Учебный план»: Код студента, Код учебного плана, сочетание которых и образует уникальный ключ нового отношения «Успеваемость» (рис. I.17). ГРУППА
КАФЕДРА
Код группы Обозначение группы Количество студентов Средний балл при поступлении
Код кафедры Название кафедры Телефон Заведующий
1
1
М
М
СТУДЕНТ Код студента Номер зачетной книжки Фамилия Имя Отчество Год рождения Адрес Домашний телефон Балл при поступлении Код группы
УЧЕБНЫЙ ПЛАН
ПРЕПОДАВАТЕЛЬ
Код учебного плана Наименование предмета Программа Часы Вид занятия Семестр Вид сдачи Оценка Дата сдачи Код преподавателя
Код преподавателя Табельный номер Фамилия Имя Отчество Домашний адрес Домашний телефон Должность Ученая степень Ученое звание Код кафедры
1
М
1
1
М УСПЕВАЕМОСТЬ Код студента Код учебного плана
М
Рис. I.17. Преобразование связи типа «многие-ко-многим» реляционной схемы «Учебный процесс»
Нормализация отношений Корректной назовем схему БД, в которой отсутствуют нежелательные зависимости между атрибутами отношений [10]. Процесс разработки корректной схемы реляционной БД называется даталогическим (логическим) проектированием БД. Проектирование схемы БД может быть выполнено двумя путями: 32
Мартьянова А.Е. Базы данных и знаний
33
• путем декомпозиции (разбиения), когда исходное множество отношений, входящих в схему БД заменяется другим множеством отношений (число их при этом возрастает), являющихся проекциями исходных отношений; • путем синтеза, то есть путем компоновки из заданных исходных элементарных зависимостей между объектами предметной области схемы БД. Классическая технология проектирования реляционных баз данных связана с теорией нормализации, основанной на анализе функциональных зависимостей между атрибутами отношений. Понятие функциональной зависимости является фундаментальным в теории нормализации реляционных баз данных. Коснемся смысла этого понятия. Функциональные зависимости определяют устойчивые отношения между объектами и их свойствами в рассматриваемой предметной области. Именно поэтому процесс поддержки функциональных зависимостей, характерных для данной предметной области, является базовым для процесса проектирования. Процесс проектирования с использованием декомпозиции представляет собой процесс последовательной нормализации схем отношений, при этом каждая последующая итерация соответствует нормальной форме более высокого уровня и обладает лучшими свойствами по сравнению с предыдущей. Каждой нормальной форме соответствует некоторый определенный набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений. В теории реляционных БД обычно выделяется следующая последовательность нормальных форм: • первая нормальная форма (1НФ); • вторая нормальная форма (2НФ); • третья нормальная форма (3НФ); • нормальная форма Бойса-Кодда (НФБК); • четвертая нормальная форма (4НФ); • пятая нормальная форма, или форма проекции-соединения (5НФ). Основные свойства нормальных форм: • каждая следующая нормальная форма в некотором смысле улучшает свойства предыдущей; • при переходе к следующей нормальной форме свойства предыдущих нормальных форм сохраняются.
34
Мартьянова А.Е. Базы данных и знаний
В основе классического процесса проектирования лежит последовательность переходов от предыдущей нормальной формы к последующей. Однако в процессе декомпозиции мы сталкиваемся с проблемой обратимости, то есть возможности восстановления исходной схемы. Таким образом, декомпозиция должна сохранять эквивалентность схем БД при замене одной схемы на другую. Схемы БД называются эквивалентными, если содержание исходной БД может быть получено путем естественного соединения отношений, входящих в результирующую схему, и при этом не появляется новых кортежей (строк) в исходной БД. При выполнении эквивалентных преобразований сохраняется множество исходных фундаментальных функциональных зависимостей между атрибутами отношений. Функциональные зависимости определяют не текущее состояние БД, а все возможные ее состояния, то есть они отражают те связи между атрибутами, которые присущи реальному объекту, которые моделируется с помощью БД. Поэтому определить функциональные зависимости по текущему состоянию БД можно только в том случае, если экземпляр БД содержит абсолютно полную информацию (то есть никаких добавлений и модификаций БД не предполагается). В реальной жизни это требование не выполнимо, поэтому набор функциональных зависимостей задает разработчик, системный аналитик, исходя из глубокого системного анализа предметной области. Процесс нормализации – это разбиение таблицы на две или более с целью ликвидации дублирования данных и потенциальной их противоречивости. Окончательная цель нормализации сводится к получению такого проекта базы данных, в котором «каждый факт появляется лишь в одном месте». Использование ненормализованных таблиц может привести к нарушению целостности данных (противоречивости информации) в БД. Обычно различают следующие проблемы, возникающие при использовании ненормализованных таблиц [14]: • избыточность данных; • аномалии обновления; • аномалии удаления; • аномалии ввода.
34
Мартьянова А.Е. Базы данных и знаний
35
Избыточность данных Избыточность данных проявляется в том, что в нескольких записях таблицы БД повторяется одна и та же информация. Например, один преподаватель может вести несколько предметов. Тогда в общей таблице, содержащей сведения о преподавателях и предметах, которые ведут преподаватели, будут дублироваться личные данные преподавателей, ведущих несколько предметов столько раз, сколько предметов они ведут. Аномалии обновления Аномалии обновления тесно связаны с избыточностью данных. Предположим, что у преподавателя, ведущего несколько предметов, изменился адрес. Чтобы информация, содержащаяся в таблице, была корректной, необходимо будет внести изменения в те записи, в которых содержатся сведения об этом преподавателе. Если же исправление будет внесено не во все записи, то возникнет несоответствие информации, которое и называется аномалией обновления. Аномалии удаления Аномалии удаления возникают при удалении записей из ненормализованной таблицы. Пусть, например, в институте некоторые группы расформировываются. При этом следует удалить соответствующие записи в таблице, в которой содержатся сведения об этих группах. Однако удаление приведет к потере информации о студентах, обучающихся в этих группах. Такая потеря информации и называется аномалией удаления. (Можно привести и другой пример – удаление записей при отчислении всех студентов из группы может привести к потере информации о группе, в которой они обучались). Аномалии ввода Аномалии ввода возникают при добавлении в таблицу новых записей и обычно возникают, когда для некоторых полей таблицы заданы ограничения NOT NULL. Пусть в таблице имеется поле Оценка, в котором содержится информация об оценках студентов при сдаче экзамена. При записи в таблицу информации о студенте установить его оценку невозможно, так он еще не сдавал экзамен. Если для этого поля задать ограничение NOT NULL, то в таблицу нельзя будет ввести информацию о студенте. Это и называется аномалией ввода. Каждой нормальной форме соответствует некоторый определенный набор ограничений, и отношение находится в некоторой нормальной форме, если оно удовлетворяет свойственному данной форме набору ограничений [7, 10].
36
Мартьянова А.Е. Базы данных и знаний
Наиболее важные на практике нормальные формы отношений основываются на фундаментальном в теории реляционных баз данных понятии функциональной зависимости. Функционально зависимым считается такой атрибут, значение которого однозначно определяется значением другого атрибута. Функционально зависимые атрибуты обозначаются следующим образом: А → Б. Атрибут, указываемый в левой части, называется детерминантом. Первичный ключ таблицы является детерминантом, так как его значение однозначно определяет значение любого атрибута таблицы. Если для некоторых атрибутов А и Б всегда каждому значению А соответствует не более одного значения Б, то говорят, что атрибут Б функционально зависит от А. Если неключевой атрибут зависит только от части ключа, то говорят о частичной зависимости. Если неключевой атрибут зависит от всего составного ключа и не находится в частичной зависимости от его частей, то говорят о его полной функциональной зависимости от составного ключа. Если для некоторых атрибутов А, Б и В выполняются условия: Б функционально зависит от А (А → Б) и В функционально зависит от Б (Б → В), а обратная зависимость отсутствует (Б → А), то говорят, что В транзитивно зависит от А. Если в отношении каждому значению атрибута А соответствует множество значений атрибута Б, не связанных с другими атрибутами (этого же отношения), то говорят, что атрибут Б многозначно зависит от А. Отношение находится в первой нормальной форме (1НФ) тогда и только тогда, когда в любом допустимом значении этого отношения каждая его строка содержит только одно значение для каждого атрибута (столбца). Отношение находится во второй нормальной форме (2НФ), если оно удовлетворяет определению 1НФ и все его атрибуты (столбцы), не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом (нет атрибутов, зависящих от части первичного ключа). Отношение находится в третьей нормальной форме (3НФ), если оно удовлетворяет определению 2НФ и ни один из его неключевых атрибутов не связан функциональной зависимостью с любым другим неключевым атрибутом (отсутствуют транзитивные зависимости).
36
Мартьянова А.Е. Базы данных и знаний
37
Кодд и Бойс обосновали и предложили более строгое определение для 3НФ, которое учитывает, что в таблице может быть несколько первичных ключей. Отношение находится в нормальной форме Бойса-Кодда (НФБК) тогда и только тогда, когда любая функциональная зависимость между его атрибутами сводится к полной функциональной зависимости от возможного первичного ключа. В следующих нормальных формах (4НФ и 5НФ) учитываются не только функциональные, но и многозначные зависимости между атрибутами. Для того чтобы привести определения этих нормальных форм, введем понятие полной декомпозиции отношения. Полной декомпозицией отношения называют такую совокупность произвольного числа ее проекций, соединение которых полностью совпадает с содержимым отношения. Проекция – операция реляционной алгебры, создающая новое отношение путем исключения «ненужных» столбцов из имеющегося отношения. Отношение находится в пятой нормальной форме (5НФ) тогда и только тогда, когда в каждой его полной декомпозиции все проекции содержат возможный ключ. Отношение, не имеющее ни одной полной декомпозиции, также находится в 5НФ. Четвертая нормальная форма (4НФ) является частным случаем 5НФ, когда полная декомпозиция должна быть соединением ровно двух проекций. На практике непросто подобрать реальное отношение, которое находилось бы в 4НФ, но не было бы в 5НФ. Все полученные выше отношения «Группа», «Кафедра», «Преподаватель», «Студент», «Успеваемость», «Учебный план» находятся в первой нормальной форме, так как каждый столбец таблицы неделим и в рамках одного отношения нет столбцов с одинаковыми по смыслу значениями. Поля Оценка и Дата сдачи из отношения «Учебный план» следует перенести в отношение «Успеваемость», поскольку они будут зависеть от составного ключа отношения «Успеваемость», состоящего из полей Код студента и Код учебного плана (рис. I.18). Теперь все таблицы имеют первичные ключи, которые однозначно определяют строки и неизбыточны, и можно говорить то том, что таблицы находятся во второй нормальной форме.
38
Мартьянова А.Е. Базы данных и знаний
ГРУППА
КАФЕДРА
Код группы Обозначение группы Количество студентов Средний балл при поступлении
Код кафедры Название кафедры Телефон Заведующий
1
1
М
М
СТУДЕНТ Код студента Номер зачетной книжки Фамилия Имя Отчество Год рождения Адрес Домашний телефон Балл при поступлении Код группы
УЧЕБНЫЙ ПЛАН
ПРЕПОДАВАТЕЛЬ
Код учебного плана Наименование предмета Программа Часы Вид занятия Семестр Вид сдачи Код преподавателя
Код преподавателя Табельный номер Фамилия Имя Отчество Домашний адрес Домашний телефон Должность Ученая степень Ученое звание Код кафедры
1
М
1
1 М УСПЕВАЕМОСТЬ Код студента Код учебного плана Оценка Дата сдачи
М
Рис. I.18. II нормальная форма отношения «Учебный процесс»
Рассмотрим подробнее отношение «Учебный план», которое содержит перечень предметов текущего учебного плана [7]. Отношение следует привести к третьей нормальной форме. Первичным ключом отношения «Учебный план» служит столбец Код учебного плана, который однозначно характеризует каждый предмет учебного плана с точностью до семестра. То есть для предмета, протяженность изучения которого более одного семестра, в отношении будет отведено несколько строк – столько, сколько семестров длится изучение предмета. Тогда хранение наименований предметов в таблице «Учебный план» становится избы38
Мартьянова А.Е. Базы данных и знаний
39
точным: например, если изучение математики длится четыре семестра, то наименование «Математика» будет повторено в четырех записях и есть вероятность сделать четыре различные ошибки при вводе одного и того же наименования. Чтобы избежать этого, проведем декомпозицию отношения «Учебный план», выделив наименования предметов в отдельное отношение. В результате получим отношение «Предмет» со столбцами Код предмета и Наименование предмета, а в отношение «Учебный план» для связи с отношением «Предмет» поместим внешний ключ Код предмета. Будем считать, что Код предмета однозначно идентифицирует конкретный предмет, изучаемый студентами какой-либо специальности, например, предмет «Базы данных и знаний специальности 032001.65». Столбец Программа из отношения «Учебный план» следует поместить в отношение «Предмет», так как этот столбец связан функциональной зависимостью с ключевым атрибутом Код предмета, поскольку Программа предмета зависит от Кода предмета, характеризующего предмет, изучаемый студентами какой-либо специальности. Возможно выделение еще двух отдельных отношений «Вид сдачи» и «Вид занятия» из отношения «Учебный план». Мы не будет производить дальнейшую декомпозицию отношения «Учебный план» чтобы не увеличивать число таблиц и не затруднять в дальнейшем работу с базой данных «Учебный процесс». Таблицы находятся в нормальной форме Бойса-Кодда (НФБК). Например, в отношении «Кафедра» столбец Название кафедры тоже может быть первичным ключом, тогда, если предположить, что название кафедры уникально, то столбцы «Телефон» и «Заведующий» могут находиться в полной функциональной зависимости от него. То есть столбец Название кафедры является возможным ключом. Аналогично можно рассмотреть столбец Наименование предмета в отношении «Предмет», столбец Табельный номер в отношении «Преподаватель», столбец Номер зачетной книжки в отношении «Студент», столбец Название группы в отношении «Студент». Таким образом, рассматриваемая нами схема находится в нормальной форме Бойса-Кодда. На практике нормальная форма Бойса-Кодда в большинстве случаев достаточна, и приведением к ней процесс проектирования реляционной базы данных обычно заканчивается. Поэтому здесь не будем рассматривать другие нормальные формы, тем более что в работе они используются редко.
40
Мартьянова А.Е. Базы данных и знаний
Теперь можно говорить о базе данных «Учебный процесс», реляционная схема которой представлена следующими таблицами: «Группа» – содержит по одной строке для каждой из групп; «Студенты» – содержит по одной строке для каждого из студентов; «Кафедра» – содержит по одной строке для каждой из кафедр; «Преподаватель» – содержит по одной строке для каждого из преподавателей; «Предмет» – содержит по одной строке для каждого из предметов учебного плана какой-либо специальности; «Учебный план» – содержит по одной строке для каждого вида занятия по каждому предмету отдельного семестра; «Успеваемость» – содержит по одной строке для каждого результата сдачи отдельным студентом отдельного предмета. Таблицы базы данных «Учебный процесс» находятся в третьей нормальной форме: • каждый столбец таблицы неделим, и в рамках одной таблицы нет столбцов с одинаковыми по смыслу значениями (1НФ); • первичные ключи однозначно определяют запись и неизбыточны, все поля каждой из таблиц зависят от ее первичного ключа (2НФ); • значение любого поля, не входящего в первичный ключ, не зависит от значения другого поля, тоже не входящего в первичный ключ (3НФ). На рис. I.19 в графической форме изображены перечисленные таблицы, их столбцы, первичные и внешние ключи. Задание первичных и внешних ключей сопровождается построением дополнительных структур – индексов, обеспечивающих быстрый доступ к данным через значение ключа.
Рис. I.19. Структура базы данных «Учебный процесс»
40
Мартьянова А.Е. Базы данных и знаний
41
Следующий этап проектирования – определение типов данных, хранящихся в столбцах таблиц. Параллельно с заданием типа необходимо сформулировать ограничения целостности, связанные с типом, – перечень допустимых значений типа. Исходя из особенностей данных и их функционального назначения, требуется задать способ представления и границы возможных изменений для каждого из столбцов таблиц. При этом необходимо ответить на вопрос: данные каких типов должны храниться в столбцах и какова их максимальная длина (например, если в столбце предполагается хранить процентные значения, то достаточно будет целого типа данных длиной 1 байт, так как диапазон возможных значений – от 0 до 255; если для данных столбца выбирается тип «строка символов», то желательно указать максимальный размер данных столбца и т.п.). Далее, в каждой таблице должны быть выделены столбцы, которые обязательно должны быть заполнены при создании отдельной строки таблицы. Задание такого ограничения целостности не позволит, например, ввести в таблицу «Студенты» строку, в которой не указан код группы. Если подобные ограничения целостности не будут заданы, в таблице могут появиться строки, которые не будут учтены при выполнении функций по обработке данных: появление и таблице «Студенты» строки без кода группы приведет к ошибке при формировании ведомости. Следующий важный момент – задание для столбцов значений по умолчанию. Значение по умолчанию впоследствии будет автоматически вводиться в указанный столбец для каждой строки таблицы. Например, в столбец Дата сдачи таблицы «Успеваемость» при заполнении очередной строки может автоматически заноситься текущая дата.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Рассмотрите бинарные связи модели «Учебный процесс» типа 1:M с обязательным классом принадлежности n-связной сущности и связи типа M:M. Есть ли необходимость специального преобразования связи согласно сформулированным правилам? 2. Какая база данных называется корректной? 3. Сформулируйте два подхода (путем синтеза и путем декомпозиции) к проектированию БД. 4. Сформулируйте два основных свойства нормальных форм. 5. Сформулируйте цели нормализации.
42
Мартьянова А.Е. Базы данных и знаний
6. Изложите фундаментальное понятие реляционных баз данных – понятие функциональных зависимостей отношений. 7. Дайте определения первой, второй, третьей нормальной формам. 8. Дайте определение нормальной форме Бойса-Кодда. 9. Изложите процесс нормализации в общем виде до нормальной формы Бойса-Кодда. ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Изложите процесс приведения инфологической модели «Учебный процесс» к нормальной форме Бойса-Кодда. 2. Установите признаки NULL и NOT NULL для всех атрибутов схемы «Учебный процесс». 3. Перечислите все первичные (PRIMARY KEY) и внешние (FOREING KEY) ключи нормализованного отношения «Учебный процесс». 4. Реализуйте схему БД «Учебный процесс» в СУБД MS Access с назначением типов данных и создайте связи между отношениями. 5. Оформите отчет по работе.
42
Мартьянова А.Е. Базы данных и знаний
43
Работа IV. Даталогическое проектирование (продолжение). Физическое проектирование Таким образом, мы уже имеем схему базы данных «Учебный процесс», которую получили, воспользовавшись общими правилами перехода к реляционной модели данных. Она является корректной, поскольку в ней уже отсутствуют нежелательные отношения. Теперь необходимо решить вопрос о том, какую СУБД будем использовать и, затем, описать концептуальную схему в терминах выбранной СУБД. Необходимо также произвести описание внешних моделей в терминах выбранной СУБД. Воспользуемся для простоты уже хорошо нами освоенной ранее (с точки зрения технологии работы) СУБД MS Access. Для начала необходимо решить вопрос о назначении типа данных для каждого атрибута каждой сущности. Ниже приведены некоторые сведения, необходимые для решения этого вопроса [2]. Определение полей таблицы в СУБД MS Access Для определения поля в окне Таблица (Table) (рис. I.20) задаются Имя поля (Field Name), Тип данных (Data Type), Описание (Description) – краткий комментарий, а также свойства поля в разделе Свойства поля (Field Properties). На вкладке Общие (General) представлены строки свойств поля, в том числе максимальный размер, подпись (выводится в заголовке столбца), значение по умолчанию и др. На вкладке Подстановка (Lookup) в раскрывающемся списке свойства Тип элемента управления (Display Control) выбирается одно из значений: Поле, Список или Поле со списком. Имена полей и тип данных Имя поля (Field Name). Каждое поле в таблице должно иметь уникальное имя, удовлетворяющее соглашениям об именах объектов в Access. Оно является комбинацией из букв, цифр, пробелов и специальных символов, за исключением точки (.), восклицательного знака (!), надстрочного знака (`) и квадратных скобок ([ ]). Имя не может начинаться с пробела и содержать управляющие символы с кодами ASCII от 00 до 31. Максимальная длина имени – 64 символа.
44
Мартьянова А.Е. Базы данных и знаний
Рис. I.20. Окно определения структуры таблицы в режиме конструктора
Тип данных (Data Type). Тип данных определяется значениями, которые предполагается вводить в поле, и операциями, которые будут выполняться с этими значениями. В Access допускается использование девяти типов данных. Раскрывающийся список возможных типов данных вызывается нажатием кнопки списка при выборе типов данных каждого поля (рис. I.20): • Текстовый (Text) – тип данных по умолчанию. Текст или цифры, не участвующие в расчетах. Число символов в поле не должно превышать 255. Максимальное число символов, которое можно ввести в поле, задается в свойстве Размер поля (Field Size). Пустые символы в неиспользуемой части поля не сохраняются. • Поле MEMO (Memo). Длительный текст, например, некоторое описание или примечание. Максимальная длина – 65 535 символов. • Числовой (Number). Числовые данные, используемые в математических вычислениях. Конкретные варианты числового типа и их длина задаются в свойстве Размер поля (Field Size). Поле может иметь размер 1, 2, 4 и 8 байт (16 байт – только если для свойства Размер поля (Field Size) задано значение Код репликации). Для 44
Мартьянова А.Е. Базы данных и знаний
•
• •
•
•
•
45
проведения денежных расчетов определен другой тип данных – Денежный (Currency). Денежный (Currency). Денежные значения и числовые данные, используемые в расчетах, проводящихся с точностью до 15 знаков в целой и до 4 знаков – в дробной части. Длина поля 8 байт. При обработке числовых значений из денежных полей выполняются вычисления с фиксированной точкой (более быстрые, чем вычисления для полей с плавающей точкой). Кроме того, при вычислениях предотвращается округление. Учитывая эти обстоятельства, применительно к полям, в которых планируется хранить числовые значения с указанной точностью, рекомендуется использовать денежный тип данных. Дата/время (Date/Time). Значения даты или времени, относящиеся к годам с 100 по 9999 включительно. Длина поля 8 байт. Счетчик (AutoNumber). Тип данных поля, в которое для каждой новой записи автоматически вводятся уникальные последовательно возрастающие (на 1) целые числа или случайные числа. Значения этого поля нельзя изменить или удалить. Длина поля: 4 байта для длинного целого, для кода репликации – 16 байт. По умолчанию в поле вводятся последовательные значения. В таблице не может быть более одного поля этого типа. Используется для определения уникального ключа таблицы. Логический (Yes/No). Логические данные, которые могут иметь одно из двух возможных значений: Да/Нет, Истина/Ложь, Вкл./Выкл. (Yes/No; True/False; On/Off). Длина поля 1 бит. Поле объекта OLE (OLE Object). Объект (например, электронная таблица Microsoft Excel, документ Microsoft Word, рисунок, звукозапись или другие данные в двоичном формате), связанный или внедренный в таблицу Access. Длина поля – не более 1 Гбайт (ограничивается объемом диска). Гиперссылка (Hyperlink). Адрес гиперссылки, включающий путь к файлу на жестком диске в локальной сети (в формате UNC) или адрес страницы в Internet или intranet (URL). Кроме того, адрес может включать текст, вводимый в поле или в элементе управления, дополнительный адрес – расположение внутри файла или страницы, подсказку – текст, отображаемый в виде всплывающей подсказки. Если щелкнуть мышью на поле гиперссылки, Access выполнит переход на соответствующий объект, документ, Webстраницу или другое место назначения. Длина каждой из частей
46
Мартьянова А.Е. Базы данных и знаний
гиперссылки – не более 2048 знаков. Для полей типа OLE (OLE Object), MEMO (Memo) и Гиперссылка (Hyperlink) не допускается сортировка и индексирование. • Мастер подстановок (Lookup Wizard). Выбор этого тип данных запускает мастера подстановок. Мастер строит для поля список значений на основе полей из другой таблицы. Значения в такое поле будут вводиться из списка. Соответственно, фактически тип данных поля определяется типом данных поля списка. Возможно также определение поля со списком постоянных значений. Общие свойства полей Общие свойства задаются для каждого поля на вкладке Общие (General) и зависят от выбранного типа данных. Для отображения свойств поля необходимо установить курсор на строке соответствующего поля (см. рис. I.20). Приведем наиболее важные свойства полей. Размер поля (FieldSize) задает максимальный размер сохраняемых в поле данных. Для поля с типом данных Текстовый задается размер от 1 до 255 знаков (по умолчанию – 50 знаков). Для поля с типом данных Счетчик можно задать: • Длинное целое (Long Integer) – 4 байта; • Код репликации (Replication ID) – 16 байт. Для поля с типом данных Числовой можно задать: • Байт (Byte) (для целых чисел от 0 до 255, длина поля 1 байт); • Целое (Integer) (для целых чисел от – 32 768 до +32 767, занимает 2 байта); • Длинное целое (Long Integer) (для целых чисел от -2 147 483 648 до +2 147 483 647, занимает 4 байта); • Дробные с плавающей точкой 4 байт (Single) (для чисел от 3,4×1038 до +3,4×1038 с точностью до 7 знаков); • Дробные с плавающей точкой 8 байт (Double) (для чисел от 1,797×10308 до +1,797×10308 с точностью до 15 знаков); • Действительное (Decimal) (для целых чисел от -1038-1 до +1038-1 при работе с проектами, которые хранятся в файлах типа ADP, и от -1028-1 до +1028-1 – для файлов типа MDB, с точностью до 28 знаков, занимает 12 байт); • Код репликации. Глобальный уникальный идентификатор (Global Unique Identifier, GUID), занимает 16 байт. Поля такого типа используются Access для создания системных уникальных
46
Мартьянова А.Е. Базы данных и знаний
47
идентификаторов реплик, таблиц, записей и других объектов при репликации баз данных. Рекомендуется задавать минимально допустимый размер поля, который понадобится для сохранения значений, так как сохранение таких полей требует меньше памяти, и обработка данных меньшего размера выполняется быстрее. Уменьшение размера поля таблицы, имеющей данные, может привести к их искажению или полной потере. Изменение свойство Размер поля приводит к изменениям данных, которые нельзя отменить после их сохранения в конструкторе таблиц. Формат поля (Format) является форматом отображения заданного типа данных и задает правила представления данных при выводе их на экран или печать. В Access определены встроенные стандартные форматы отображения для полей с типами данных Числовой (Number), Дата/время (Date/Time), Логический (Yes/No) и Денежный (Currency). Ряд этих форматов совпадает с настройкой национальных форматов, определяемых в окне Язык и стандарты панели управления Microsoft Windows. Пользователь может создавать собственный формат для всех типов данных, кроме OLE, с помощью символов форматирования. Для указания конкретного формата отображения необходимо выбрать в раскрывающемся списке одно из значений свойства Формат поля (Format). Формат поля используется для отображения данных в режиме таблицы, а также применяется в форме или отчете при отображении этих полей. Число десятичных знаков (DecimalPlaces) задает для числового и денежного типов данных число знаков после запятой. Можно задать число от 0 до 15. По умолчанию (значение Авто (Auto)) это число определяется установкой в свойстве Формат поля (Format). Следует иметь в виду, что установка этого свойства не действует, если свойство Формат поля (Format) не задано или если выбрано значение Основной (General Number). Свойство Число десятичных знаков (Decimal Places) влияет только на количество отображаемых на экране десятичных знаков и не влияет на количество сохраняемых знаков. Для изменения числа сохраняемых знаков необходимо изменить свойство Размер поля (FieldSize). Подпись (Caption) поля задает текст, который выводится в таблицах, формах, отчетах. Значение по умолчанию (DefaultValue) определяет текст или выражение, которое автоматически вводится в поле при создании новой за-
48
Мартьянова А.Е. Базы данных и знаний
писи. Например, если задано значение =Now(), то в поле будет введена текущая дата и время. При добавлении записи в таблицу можно оставить значение, введенное по умолчанию, или ввести другое. Свойство Значение по умолчанию (DefaultValue) используется только при создании новой записи. Изменение значения свойства не влияет на существующие записи. Максимальная длина значения свойства составляет 255 знаков. Данное свойство не определено для полей с типом данных Счетчик (AutoNumber) или Поле объекта OLE (OLE Object). Условие на значение (ValidationRule) позволяет осуществить контроль ввода, задает ограничения на вводимые значения, запрещает ввод при нарушении условий и выводит текст, заданный свойством Сообщение об ошибке (ValidationText). Сообщение об ошибке (ValidationText) задает текст сообщения, выводимый на экран при нарушении ограничений, заданных свойством Условие на значение (ValidationRule). Элементы управления, созданные в формах или отчетах на основе таблицы, наследуют установленные для этого поля свойства. Благодаря этому не требуется определять свойства индивидуально для каждого связанного с полем элемента управления. Тип элемента управления На вкладке Подстановка (Lookup) в окне конструктора (см. рис. I.20) задается свойство Тип элемента управления (DisplayControl). Это свойство определяет, будет ли отображаться поле в таблице или в форме в виде Поля (Text Box), Списка (List Box) или Поля со списком (Combo Box). Таким образом определяется вид элемента управления, используемого по умолчанию для отображения поля. Если для поля выбран тип элемента управления Список (List Box) или Поле со списком (Combo Box), на вкладке Подстановка (Lookup) появляются дополнительные свойства, которые определяют источник данных для строк списка и ряд других характеристик списка. В качестве источника данных для списка выбирается таблица, с которой осуществляется постоянная связь, что обеспечивает актуальное состояние списка. Если при определении типа поля был выбран Мастер подстановок (Lookup Wizard), то значения свойств на вкладке Подстановка (Lookup) будут заполнены мастером. Ниже, в табл. I.1 – I.7 представлены параметры структуры таблиц базы данных «Учебный процесс» с типами данных столбцов и предлагаемыми ограничениями целостности.
48
Мартьянова А.Е. Базы данных и знаний
49
Таблица I.1. Описание свойств полей таблицы ГРУППА Имя поля
Клю- Уничевое кальполе ное поле
Код груп- Перпы вичн. Обозначение группы Количество студентов
Да
Обязательное поле Да
Да
Да
Средний балл в группе при поступлении
Тип данных
Размер
Числовой Текстовый
Целое
Число десятичных знаков
Условие на значение
Сообщение об ошибке
Количество студентов больше допустимого! Ошибка в оценке!
8
Нет
Числовой
Байт
>=0 And <=35
Нет
Числовой
Оди- 2 нар. с плав. точкой
>2 And <=5 Or 0
Таблица I.2. Описание свойств полей таблицы СТУДЕНТ Имя поля
Ключевое поле
2 Код сту- Пердента вичн. Код груп- Внеш. пы Номер зачетной книжки Фамилия Имя Отчество Год рождения
Уникальное поле
Обязательное поле
3
4
1
Тип данных
Размер
Да
Да
5 Числовой
Нет
Да
Числовой
6 Длинное целое Целое
Да
Да
Текстовый
10
Да Нет Нет Нет
Текстовый Текстовый Текстовый Числовой
15 15 15 Целое
Число десятичных знаков 7
50
Мартьянова А.Е. Базы данных и знаний Окончание таблицы I.2
1 Адрес Домашний телефон Балл при поступлении
2
3
4 Нет Нет
5 Текстовый Текстовый
Нет
Числовой
6
7
25 10 Одинар. 2 с плав. точкой
Таблица I.3. Описание свойств полей таблицы КАФЕДРА Имя поля
Ключевое поле Первичн.
Код кафедры Название кафедры Телефон Заведующий Фото
Уникальное поле Да
ОбязаТип данных тельное поле Да Числовой
Размер
Нет
Да
Текстовый
20
Нет Нет Нет
Текстовый 10 Текстовый 15 Поле объекта OLE
Целое
Таблица I.4. Описание свойств полей таблицы ПРЕПОДАВАТЕЛЬ Имя поля
Ключевое поле Код преподава- Пертеля вичн. Код кафедры Внеш. Табельный номер Фамилия Имя Отчество Домашний адрес Домашний телефон Должность Ученая степень Ученое звание
Уникальное поле Да
ОбязаТип данных тельное поле Да Числовой
Размер
Нет Да
Да Да
Числовой Текстовый
Целое 10
Да Нет Нет Нет Нет
Текстовый Текстовый Текстовый Текстовый Текстовый
15 15 15 25 10
Нет Нет Нет
Текстовый Текстовый Текстовый
15 15 10
50
Целое
Мартьянова А.Е. Базы данных и знаний
51
Таблица I.5. Описание свойств полей таблицы ПРЕДМЕТ Имя поля
Ключевое поле
Код предмета Наименование предмета Программа
Первичн.
Уникальное Обязаполе тельное поле Да Да Да
Нет
Тип ных
дан- Размер
Числовой Текстовый
Целое 20
Поле MEMO
Таблица I.6. Описание свойств полей таблицы УЧЕБНЫЙ ПЛАН Имя поля
Ключевое поле
Уникальное поле
Обязательное поле
Тип дан- Размер ных
Код учебного плана Код преподавателя Код предмета Часы
Первичн.
Да
Да
Числовой
Целое
Внеш.
Нет
Да
Числовой
Целое
Внеш.
Нет
Да
Числовой
Целое
Нет
Числовой
Целое
Нет
Текстовый Числовой Текстовый
10
Вид занятия Семестр Вид сдачи
Нет Нет
Байт 10
Число десятичных знаков
2
Условие на значение
Сообщение об ошибке
>0 And <=300
Число часов не более 300!
52
Мартьянова А.Е. Базы данных и знаний Таблица I.7. Описание свойств полей таблицы УСПЕВАЕМОСТЬ
Имя поля
Ключевое по- Униле кальное поле
Внеш. Код студента Внеш. Код учебного плана Оценка
Дата сдачи
Первичн. совместно
Да
Обязательное поле
Тип данных
Размер
Да
Числовой
Да
Числовой
Длинное целое Целое
Нет
Числовой
Нет
Дата/ время
Байт
Число десятичных знаков
Условие на значение
Сообщение об ошибке
>=0 And <=5
Ошибка в оценке!
Графа табл. I.1 – I.7 «Уникальное поле» показывает, что отмеченное поле индексируется: если в графе стоит «Да», то свойство Индексированное поле принимает значение «Да(Совпадения не допускаются)», если в графе стоит «Нет» – свойство Индексированное поле принимает значение «Да(Допускаются совпадения)». Логическая структура реляционной базы данных MS Access является адекватным отображением полученной модели базы данных «Учебный процесс». Каждая сущность модели отображается соответствующей реляционной таблицей. Структура каждой реляционной таблицы определяется атрибутным составом соответствующей сущности, где каждый столбец (поле) соответствует одному из атрибутов сущности. Ключевые атрибуты объекта образуют уникальный ключ реляционной таблицы. Для каждого столбца задается тип, размер данных и другие свойства. Строки (записи) таблицы соответствуют экземплярам объекта и формируются при загрузке таблицы. Связи между объектами модели реализуются одинаковыми атрибутами – ключами в соответствующих таблицах. При этом ключом всегда является уникальный ключ главной таблицы. Ключом связи в подчиненной таблице является либо некоторая часть уникального ключа в ней, либо поле, не входящее в состав первичного ключа (например, кода ка52
Мартьянова А.Е. Базы данных и знаний
53
федры в таблице «Преподаватель»). Напоминаем, что ключ связи в подчиненной таблице называется внешним ключом. В MS Access может быть создана схема данных, наглядно отображающая логическую структуру базы данных. Определение одномногозначных связей в этой схеме должно осуществляться в соответствии с построенной моделью. Внешний вид схемы данных практически совпадает с графическим представлением теоретической модели (рис. I.21). На рис. I.21 прямоугольники отображают таблицы базы данных с полным списком их полей, а связи показывают, по каким полям осуществляется взаимосвязь таблиц. Имена ключевых полей для наглядности выделяются и находятся в верхней части полного списка полей каждой таблицы.
Рис. I.21. Схема данных базы данных «Учебный процесс» в реляционной СУБД MS Access
Тестовые сведения для заполнения таблиц базы данных «Учебный процесс» приведены в табл. I.8 – I.14.
54
Мартьянова А.Е. Базы данных и знаний Таблица I.8. Сведения для заполнения таблицы ГРУППА
Код группы
Обозначение пы
1 2
ДФД-31 ДФД-32
груп- Количество студен- Средний балл в тов группе при поступлении 25 4,75 26 4,2
Таблица I.9. Сведения для заполнения таблицы СТУДЕНТ Код студента
Код группы
Номер зачетной книжки
Фамилия
Имя
Отчество
Год рождения
1001 1002 1003
1 1 2
ДФД-301 ДФД-302 ДФД-331
Иванов Петров Сидоров
2
ДФД-332
Никаноров
Иванович Петрович Сидорович Никанорович
1987 1987 1987
1004
Иван Петр Сидор Никанор
Балл при поступлении 4,2 4,7 4,5
1987
4
Адрес
Домашний телефон
Таблица I.10. Сведения для заполнения таблицы КАФЕДРА Код кафедры
Заведующий
101
Название ка- Телефон федры Информатика 25-25-25
102
Математика
Токарев Т.Т.
25-52-25
Фото
Алмазов А.А.
Таблица I.11. Сведения для заполнения таблицы ПРЕПОДАВАТЕЛЬ Код преподавателя
Код кафедры
Табельный номер
Фамилия
Имя
Отчество
10001
101
INF001
Алмазов
Алмаз
10002
102
MAT001
Соколов
Сокол
Домашний адрес
Домаш ний телефон
Долж ность
Ученая степень
Ученое звание
Алмазович
проф.
д-р техн. наук
проф .
Соколович
асс.
54
Мартьянова А.Е. Базы данных и знаний
55
Таблица I.12. Сведения для заполнения таблицы ПРЕДМЕТ Код предмета
Наименование предмета
Программа
20001
Информатика
20002
Математика
Так как в запросе используется только одна таблица, то нет необходимости указывать поле с обозначением таблицы. Очевидно, что запрос выполняется на основании таблицы «Предмет». Необходимо заполнить реляционную базу данных «Учебный процесс», исходя из следующих соображений: должно быть использовано описание не менее двух кафедр и двух групп студентов, не менее двух предметов, которые ведутся преподавателями разных кафедр. На этом этапе возможно ограничиться рассмотрением записи в
Таблица I.13. Сведения для заполнения таблицы УЧЕБНЫЙ ПЛАН Код учебного плана 5001 5002 5003 5004 5005 5006 5007 5008
Код препо- Код давателя предмета
Часы
Вид за- Семестр нятия
Вид сдачи
10001 10001 10001 10001 10002 10002 10002 10002
100 100 100 100 100 100 100 100
лекц. лаб. лекц. лаб. лекц. практ. лекц. практ.
зачет
20001 20001 20001 20001 20002 20002 20002 20002
1 1 2 2 1 1 2 2
экзамен допуск экзамен допуск экзамен допуск
56
Мартьянова А.Е. Базы данных и знаний Таблица I.14. Сведения для заполнения таблицы УСПЕВАЕМОСТЬ
Код студента
1001 1001 1001 1001 1001 1001 1001 1001 1002 1002 1002 1002 1002 1002 1002 1002 1003 1003 1003 1003 1003 1003 1003 1003 1004 1004 1004 1004 1004 1004 1004 1004
Код учебного пла- Оценка на 5001 5002 5003 5 5004 5005 4 5006 5007 5 5008 5001 5002 5003 4 5004 5005 4 5006 5007 3 5008 5001 5002 5003 5 5004 5005 5 5006 5007 5 5008 5001 5002 5003 3 5004 5005 3 5006 5007 3 5008
Дата сдачи
25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05
Физическое проектирование Стадия физического проектирования базы данных в общем случае включает [7]: • выбор способа организации базы данных (физические модели баз данных); • разработку спецификации внутренней схемы средствами модели данных ее внутреннего уровня; 56
Мартьянова А.Е. Базы данных и знаний
57
• описание отображения концептуальной схемы во внутреннюю. Важно заметить, что в отличие от ранних СУБД, многие современные системы не предоставляют разработчику какого-либо выбора на этой стадии. Реально к вопросам проектирования физической модели можно отнести выбор схемы размещения данных (разделение по файлам или тип RAID-массива) и определение числа и типа индексов (например, кластеризованный или некластеризованный в случае MS SQL Server). Способ хранения базы данных определяется механизмами СУБД автоматически «по умолчанию» на основе спецификаций концептуальной схемы базы данных, и внутренняя схема в явном виде в таких системах не используется. Создание сложных специализированных процедур, эффективно работающих со сложными нерегулярными структурами данных в сочетании с огромными ресурсами вычислительной мощности и оперативной памяти, позволило реализовать даже однофайловую физическую структуру СУБД, например, MS Access. В СУБД сосредоточено управление данными на всех уровнях – от логической обработки до управления пространством носителя. Для ключевого поля в MS Access автоматически строится индекс. Индексы строятся для быстрого поиска требуемых записей в больших таблицах MS Access по значению первичного или вторичного ключа. Индексы – это внутренние служебные таблицы, содержащие два столбца. Первый содержит значение индексируемого поля, а второй – адреса всех записей, имеющих это значение в индексируемом поле. В индексной таблице производится упорядочение строк по значениям индексируемого поля, и это позволяет использовать методы быстрого поиска строки с заданным значением индексного поля. По адресу, содержащемуся в найденной строке индексной таблицы, осуществляется прямой доступ к искомой записи данных. Допускается не более 32 индексов на таблицу. Это ограничение может быть превышено в базе данных со многими заранее определенными связями между таблицами, что, однако, потребует реорганизации таблиц вручную перед их обработкой. Индексируются, кроме ключевых, также те поля, которые наиболее часто участвуют в запросах. Согласно табл. I.1 – I.7 поля Название группы таблицы «Группа», Номер зачетной книжки таблицы «Студент», Табельный номер таблицы «Преподаватель» являются уникальными, на них может установлено свойство Индексированное поле – Да (Совпадения не допускаются). Это означает, что данным полям присвоен уникальный индекс.
58
Мартьянова А.Е. Базы данных и знаний
Следует отметить, что внешние схемы базы данных обычно конструируются на стадии разработки приложений.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Опишите этап даталогического проектирования БД. 2. Поясните, почему рассматриваемая нами схема БД «Учебный процесс» является корректной. 3. Сформулируйте два основных свойства нормальных форм. 4. Как производится определение поле в СУБД MS Access? Перечислите основные типы данных СУБД MS Access. 5. 6. Что такое схема данных реляционной СУБД MS Access? Что она отражает? 7. Что включает в общем случае стадия физического проектирования базы данных? ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. На начальном этапе проектирования БД, как правило, нет исчерпывающих сведений обо всех задачах. Отсюда наиболее рациональным является использование обоих подходов (путем синтеза и путем декомпозиции) к проектированию БД. Поясните на примере модели БД «Учебный процесс» использование подхода проектирования базы путем синтеза и путем декомпозиции (своими словами). Как вы объясните, например, смысл следующего высказывания: «Процесс проектирования с использованием декомпозиции представляет собой процесс последовательной нормализации схем отношений, при этом каждая последующая итерация соответствует нормальной форме более высокого уровня и обладает лучшими свойствами по сравнению с предыдущей» (см. Работа III). 2. Проверьте в созданной вами на предыдущем этапе схеме БД в СУБД MS Access «Учебный процесс» соответствие типов данных табличным данным (см. табл. I.1 – I.7) и правильность установленных связей между таблицами (см. рис. I.21) 3. Заполните БД «Учебный процесс» в реляционной СУБД MS Access, исходя из следующих соображений: должно быть использовано описание не менее двух кафедр и двух групп студентов, не менее двух предметов, которые ведутся преподавателями разных кафедр. На этом этапе возможно ограничиться рассмотрением записи в БД о небольшом количестве студентов и преподавателей – см. табл. I.8 – I.14. 58
Мартьянова А.Е. Базы данных и знаний
59
4. Выполните сложные запросы к БД, например, такого характера: успеваемость студентов в группах по предметам, средняя успеваемость студентов в группах по предметам. 5. Выполните запросы для заполнения документов, которые были рассмотрены в описании предметной области (см. Работа I). 6. Оформите отчет по работе.
60
Мартьянова А.Е. Базы данных и знаний
Работа V. Запросы на языке SQL в MS Access. Реализация приложения «Учебный процесс» в MS Access Рассмотрим теперь создание приложения «Учебный процесс» в выбранной СУБД MS Access. Для создания приложений СУБД MS Access используются запросы, формы, отчеты, макросы. Язык SQL в запросах MS Access Язык SQL (аббревиатура Structured Query Language) – это язык структурированных запросов, стандартный язык, предназначенный для создания баз данных, добавления новых и поддержки имеющихся данных, а также извлечения требуемой информации. Язык SQL с самого начала был создан, чтобы работать с данными из тех баз, которые следуют реляционной модели. Если пользователю надо получить данные из базы, он должен использовать специальные объекты – запросы. Каждому запросу MS Access можно сопоставить эквивалентную инструкцию SQL. В MS Access пользователи, знакомые с языком SQL, могут использовать его для просмотра и изменения запросов в режиме конструктора, определения свойств форм и отчетов, создания специальных запросов (запросы объединения, запросы к серверу и управляющие запросы), создания подчиненных запросов. При создании каждого запроса MS Access автоматически составляет эквивалентную ему инструкцию SQL. Изменения, внесенные в инструкцию SQL, автоматически отражаются в бланке конструктора. Просмотрим или изменим инструкцию SQL: 1. Выполнив анализ предметной области, создадим запрос «Список студентов группы ДФД-31» на основании таблиц «Студент» и «Группа» (рис. I.22), в который включим список следующих полей таблиц: Группа.[Обозначение группы], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Студент.Год рождения, Студент.Адрес, Студент.[Домашний телефон], Студент.[Балл при поступлении]. В поле Группа.[Обозначение группы] используем условие отбора по коду группы: «ДФД-31».
60
Мартьянова А.Е. Базы данных и знаний
61
Рис. I.22. Запрос «Список студентов группы ДФД-31» в MS Access в режиме конструктора
2. Выберем Режим SQL в меню Вид или через кнопку «Режим SQL» на панели инструментов. На экране появится текущий запрос в режиме SQL эквивалентный созданному в режиме конструктора (рис. I.23).
Рис. I.23. Запрос «Список студентов группы ДФД-31» в MS Access в режиме SQL
3. В этот запрос можно внести изменения, и эти изменения будут отражены в бланке конструктора. Например, попробуем удалить в текстовом окне режима SQL записи Студент.Адрес, Студент.[Домашний телефон], Студент.[Балл при поступлении]. В итоге мы получим текст:
Посмотрите, как изменится результат запроса в результате его выполнения – рис. I.24.
62
Мартьянова А.Е. Базы данных и знаний
Рис. I.24. Результат выполнения измененного запроса «Список студентов группы ДФД-31»
Основной инструкцией языка SQL, всегда содержащейся в запросе, является команда SELECT [4]. В простейшей форме эта команда занимается поиском информации в таблице. Она имеет следующий формат: SELECT field1, field 2, … FROM Table; Здесь field1, field 2,… – список столбцов таблицы Table, которые должны быть представлены в результате запроса. Для получения всей таблицы вместо списка столбцов необходимо поставить символ «*» (звездочка). Команда SELECT имеет следующие параметры: A. DISTINCT (получить список без повторений) Формат: SELECT DISTINCT field1, field2, … FROM Table; B. ALL (получить список со всеми повторениями) Формат: SELECT ALL field1, field2, … FROM Table; C. WHERE (извлечь нужные строки) Формат: SELECT field1, field2, … FROM Table WHERE predicate; Здесь predicate – логическое выражение, которое может быть истинно или ложно для каждой записи таблицы. D. ORDER BY (рассортировать выходные данные) Формат: SELECT field1, field2, … FROM Table ORDER BY field1 DESC; Это означает, что выходные данные будут рассортированы по столбцу field1 в порядке убывания (порядок возрастания задается по умолчанию или с помощью слова ASC). 62
Мартьянова А.Е. Базы данных и знаний
63
E. GROUP BY (группировать выходные данные) Формат: SELECT field1, field2, … FROM Table GROUP BY [field1, field2, …] ORDER BY field1 DESC; Группировка – это объединение записей в соответствии со значениями некоторого заданного поля. F. Агрегатные функции Существуют следующие основные агрегатные функции: • Count – определение численности; • Sum – определение суммы; • First/Last – определение первого/последнего значения; • Min/Max – определение минимума/максимума; • Avg – определение среднего значения. Для обозначения связи двух таблиц дополнительно к команде FROM используются атрибуты INNER JOIN и ON. Так как в сложном запросе появляется несколько таблиц, то появляется необходимость указывать поле с обозначением таблицы, например, см. рис. I.23. С помощью атрибута INNER JOIN мы указали, что таблица «Студент» связана с таблицей «Группа». А с помощью атрибута ON мы указали, как именно связаны между собой две таблицы «Студент» и «Группа»: по полю Код группы (FROM Группа INNER JOIN Студент ON Группа.[Код группы] = Студент.[Код группы]). С помощью атрибута WHERE мы указали, что нужно извлечь только строки, которые содержат запись в поле Группа.[Обозначение группы] «ДФД-31»: WHERE (((Группа.[Обозначение группы])="ДФД31")). Обратите внимание на то, что в качестве имени поля всегда используется то имя, которое было присвоено полю в процессе создания таблицы в режиме конструктора, а не надпись, которую мы видим на экране в таблице в режиме заполнения. 4. Запрос может быть создан также только исключительно через Режим SQL в конструкторе. Выберем в окне базы данных «Запрос», «Создать» через опцию «Конструктор». В диалоговом окне «Добавление таблицы» выберем опцию «Закрыть». В меню Вид выберите Режим SQL. Появится окно «Запрос на выборку». Наберем следующую инструкцию SQL:
64
Мартьянова А.Е. Базы данных и знаний
Эта инструкция предназначена для получения списков всех предметов и их кодов. Данные для этого запроса берутся из таблицы «Предмет». Результатом выполнения данного запроса будет таблица, состоящая из двух полей (Наименование предмета и Код предмета) и из всех записей таблицы «Предмет» (рис. I.25).
Рис. I.25. Результат запроса для получения списков всех предметов и их кодов
Так как в запросе используется только одна таблица, то нет необходимости указывать поле с обозначением таблицы. Очевидно, что запрос выполняется на основании таблицы «Предмет». Сохраните запрос с названием «Код предмета». Рассмотрим запрос «План проведения занятий в группе», созданный на основании анализа предметной области (рис. I.4): SELECT Группа.[Обозначение группы], Предмет.[Наименование предмета], Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Преподаватель.[Табельный номер], [Учебный план].Часы, [Учебный план].[Вид занятия], [Учебный план].Семестр FROM (Группа INNER JOIN Студент ON Группа.[Код группы] = Студент.[Код группы]) INNER JOIN (Преподаватель INNER JOIN (Предмет INNER JOIN ([Учебный план] INNER JOIN Успеваемость ON [Учебный план].[Код учебного плана] = Успеваемость.[Код учебного плана]) ON Предмет.[Код предмета] = [Учебный план].[Код предмета]) ON Преподаватель.[Код преподавателя] = [Учебный план].[Код преподавателя]) ON Студент.[Код студента] = Успеваемость.[Код студента] GROUP BY Группа.[Обозначение группы], Предмет.[Наименование предмета], Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Преподаватель.[Табельный номер], [Учебный план].Часы, [Учебный план].[Вид занятия], [Учебный план].Семестр ORDER BY Группа.[Обозначение группы], Предмет.[Наименование предмета], Преподаватель.Фамилия; 64
Мартьянова А.Е. Базы данных и знаний
65
Результатом будет следующий запрос на выборку (рис. I.26).
Рис. I.26. Результат запроса «План проведения занятий в группе»
Аналогично, следует подготовить запрос «Экзаменационная ведомость», созданный на основании анализа предметной области (рис. I.5): SELECT Предмет.[Наименование предмета], Группа.[Обозначение группы], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Успеваемость.Оценка, Успеваемость.[Дата сдачи], [Учебный план].Семестр, [Учебный план].[Вид сдачи] FROM (Группа INNER JOIN Студент ON Группа.[Код группы] = Студент.[Код группы]) INNER JOIN (Преподаватель INNER JOIN (Предмет INNER JOIN ([Учебный план] INNER JOIN Успеваемость ON [Учебный план].[Код учебного плана] = Успеваемость.[Код учебного плана]) ON Предмет.[Код предмета] = [Учебный план].[Код предмета]) ON Преподаватель.[Код преподавателя] = [Учебный план].[Код преподавателя]) ON Студент.[Код студента] = Успеваемость.[Код студента] WHERE ((([Учебный план].[Вид сдачи])="экзамен" Or ([Учебный план].[Вид сдачи])="Зачет")) ORDER BY Предмет.[Наименование предмета], Группа.[Обозначение группы], Студент.Фамилия;
Рассмотрим запрос «Успеваемость студентов в группах по предметам у преподавателей». Запишем текст запроса на языке SQL в окно Режим SQL: SELECT Группа.[Обозначение группы], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Предмет.[Наименование предмета], Avg(Успеваемость.Оценка) AS [Avg-Оценка] FROM (Группа INNER JOIN Студент ON Группа.[Код группы] = Студент.[Код группы]) INNER JOIN (Преподаватель INNER JOIN (Предмет INNER JOIN ([Учебный
66
Мартьянова А.Е. Базы данных и знаний
план] INNER JOIN Успеваемость ON [Учебный план].[Код учебного плана] = Успеваемость.[Код учебного плана]) ON Предмет.[Код предмета] = [Учебный план].[Код предмета]) ON Преподаватель.[Код преподавателя] = [Учебный план].[Код преподавателя]) ON Студент.[Код студента] = Успеваемость.[Код студента] GROUP BY Группа.[Обозначение группы], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Предмет.[Наименование предмета] HAVING (((Группа.[Обозначение группы])="ДФД-31"));
Результатом запроса будут сведения о средней успеваемости студентов в группе ДФД-31 у всех преподавателей во всех семестрах. Сохраним запрос и просмотрим результаты этого запроса. Для задания ограничений на создаваемые группы совместно с ключевым словом GROUP BY может использоваться предложение HAVING. Оно должно следовать после GROUP BY, но до предложения ORDER BY (если оно присутствует в запросе). Любые усилия, вложенные в изучение SQL, будут оправдываться в течение долгого времени, потому что быстро сходить со сцены этот язык не собирается. Использование форм и отчетов для создания приложений в MS Access Формы предназначены для вывода данных на экран в удобном виде, форма может использоваться для поиска данных. Если изъять формы из MS Access, то программа превратится в заурядную СУБД, каких множество. С одной стороны, формы позволяют пользователям вводить данные в таблицы базы данных без непосредственного доступа к самим таблицам. С другой стороны, они позволяют выводить результаты работы запросов не в виде скупых результирующих таблиц, а в виде красиво оформленных форм. В связи с таким разделением существует два вида формирования структуры форм: на основе таблицы и на основе запроса, хотя возможен и комбинированный подход, – это вопрос творчества [2]. Создадим форму «Список студентов по группам» в режиме мастера форм (одиночная, на основании таблицы «Студент», в столбец). Перед тем, как создать эту форму, создадим запрос «Список студентов по группам»: SELECT Группа.[Обозначение группы], Группа.[Количество студентов], Группа.[Средний балл в группе при поступлении], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Студент.[Год рождения], Студент.[Балл при поступлении] FROM Группа INNER JOIN Студент ON Группа.[Код группы]=Студент.[Код группы] ORDER BY Студент.[Номер зачетной книжки], Студент.Фамилия;
66
Мартьянова А.Е. Базы данных и знаний
67
После создания переименуйте эту форму как «Список студентов по группам» и просмотрите данные через форму (рис. I.27).
Рис. I.27. Форма «Список студентов по группам»
Формы предназначены и для заполнения базы данных пользователями. Создадим в режиме автоформы формы «Группа» и «Студент» и введем в формы данные (рис. I.28). В соответствующих таблицах базы данных появились новые, введенные нами, данные для группы ДХГ-31. Аналогично в режиме автоформы следует создать формы «Кафедра», «Преподаватель», «Предмет», «Учебный план», «Успеваемость».
Рис. I.28. Заполнение таблицы «Группа» базы через автоформу «Группа»
Для ввода и редактирования данных могут быть использованы также многотабличные формы. При создании многотабличной формы средствами Access используются различные приемы. Наиболее технологичным является первоначальное создание форм с помощью мастера с последующей их доработкой в конструкторе [2]. Для вывода на печать документов на основе данных из базы используются отчеты. Отчеты во многом похожи на формы, но имеют иное функциональное назначение – они служат для форматированного
68
Мартьянова А.Е. Базы данных и знаний
вывода данных на печатающие устройства и, соответственно, при этом должны учитывать параметры принтера и параметры используемой бумаги. Создадим отчет «Список студентов по группам» в режиме мастера отчетов на основании запроса «Список студентов по группам», выполненного ранее. Отредактируем в режиме конструктора отчет, если это требуется, чтобы привести отчет в пригодный для печати вид (рис. I.29).
Рис. I.29. Отчет «Список студентов по группам» подготовленный для печати
Аналогично в режиме мастера отчетов, на основании запроса «Список преподавателей по кафедрам», который сформирован по рис. I.3 предметной области, следует создать отчет «Список преподавателей по кафедрам». Следует также отметить, что внешние схемы базы данных обычно конструируются на стадии разработки приложений. Подготовьте требуемые отчеты (рис. I.4, I.5) «План проведения занятий в группах» и «Экзаменационная ведомость» на основе соответствующих запросов.
68
Мартьянова А.Е. Базы данных и знаний
69
Создание кнопочной формы с помощью диспетчера Как правило, для приложения создаются специальные интерфейсы, в которых объекты приложения группируются по функциональному назначению, обеспечивается удобный доступ к ним. При этом окно базы данных может вообще не открываться в приложении, а работа пользователя непосредственно с таблицами базы данных исключается [2]. При создании интерфейсов приложения особую роль играют формы, так как они являются основным диалоговым средством работы пользователя с базой данных. Формы построены таким образом, что любое действие пользователя автоматически вызывает реакцию системы, то есть воспринимается как событие, в зависимости от которого могут выполняться необходимые действия. Для группировки объектов по функциональному назначению и доступам ним могут быть созданы кнопочные формы. Кнопочная форма позволяет пользователю управлять приложением. Кнопки такой формы обеспечивают вызов других кнопочных форм, а также отдельных объектов – отчетов, форм, макросов, модулей, которые входят в тот или другой компонент приложения. Сюда же помещаются кнопки для возврата к кнопочным формам предыдущих уровней, выхода из Access. Обычно также предусматривавшей кнопка для изменений самой кнопочной формы. Таким образом, приложение структурируется. Пользователь, нажимая кнопку на панели управления, инициирует событие нажатие кнопки. К этому событию могут привязываться действия по открытию других кнопочных форм или конкретные действия по обработке данных, реализующие функции приложения. Работа приложения может начинаться с главной кнопочной формы. Через этот главный интерфейс приложения начинается работа в среде приложения, осуществляется выбор того или иного компонента приложения, представленного некоторой подчиненной кнопочной формой, и обеспечивается обращение к нужным объектам компонента – формам, запросам, отчетам, макросам и т.д. В Access имеется средство автоматизированной разработки интерфейса управления приложением, называемое диспетчером кнопочных форм. Пользователь имеет возможность с помощью диспетчера кнопочных форм создавать кнопочную форму стандартного вида. Рассмотрим создание кнопочной формы, которая будет использоваться как панель управления приложения «Учебный процесс».
70
Мартьянова А.Е. Базы данных и знаний
Создание главной кнопочной формы приложения «Учебный процесс» Выберем команду Сервис/Служебные программы/Диспетчер кнопочных форм (Tools/Utilities/Switchboard Manager). Если в данной базе не было создано кнопочных форм, то появится окно Диспетчер кнопочных форм (Switchboard Manager), в котором подтвердим создание кнопочной формы (рис. I.30).
Рис. I.30. Окно подтверждения создания кнопочной формы приложения
В следующем окне Диспетчер кнопочных форм (Switchboard Manager) появится окно со строкой Главная кнопочная форма (По умолчанию) (Main Switchboard (Default)) (рис. I.31). В этом окне диспетчера кнопочных форм формируется список кнопочных форм разных уровней. Главная кнопочная форма в нем присутствует по молчанию.
Рис. I.31. Окно списка кнопочных форм приложения
70
Мартьянова А.Е. Базы данных и знаний
71
Создание подчиненных кнопочных форм приложения Создадим четыре подчиненные кнопочные формы первого уровня для компонентов приложения – деканат, кафедра, учебная часть и форма для заполнения таблиц данными. Для создания подчиненной кнопочной формы (включения в список форм) в окне диспетчера нажмем кнопку Создать (New). В окне Создание (Create New) (рис. I.32) в поле Имя страницы кнопочной формы (Switchboard Page Name) введем имя первой кнопочной формы Кнопочная форма Деканат. После нажатия кнопки OK в окне диспетчера кнопочных форм появится строка Кнопочная форма Деканат.
Рис. I.32. Окно создания пустой кнопочной формы
Аналогичными действиями создадим еще четыре кнопочные формы. Присвоим им имена Кнопочная форма Кафедра, Кнопочная форма Учебная часть и Кнопочная форма Заполнение форм БД (рис. I.33).
Рис. I.33. Список кнопочных форм приложения
72
Мартьянова А.Е. Базы данных и знаний
Любую из подготовленных кнопочных форм можно сделать стартовой, которая будет открываться по умолчанию при открытии базы данных. Для этого необходимо выбрать ее имя в окне диспетчера кнопочных форм и нажать кнопку По умолчанию (Make Default). Оставим главную кнопочную форму стартовой кнопочной формой. Она будет находиться на верхнем уровне иерархии взаимосвязанных кнопочных форм, в соответствии со структурой создаваемого приложения. Редактирование имени и формирование элементов кнопочной формы Элементами кнопочных форм являются кнопки с подписями. Подпись задается пользователем и должна, по возможности, кратко и точно называть действия, которые будут выполняться при нажатии кнопки. Для формирования элементов главной кнопочной формы в окне со списком кнопочных форм Диспетчер кнопочных форм (Switchboard Manager) выделим ее строку и нажмем кнопку Изменить (Edit). В диалоговом окне Изменение страницы кнопочной формы (Edit Switchboard Page) (рис. I.34) переименуем главную кнопочную форму в приложение «Учебный процесс», введя это имя в поле Название кнопочной формы (Switchboard Name).
Рис. I.34. Окно редактирования имени главной кнопочной формы и создания ее элементов
Элементы, создаваемые в кнопочной форме, могут быть подразделены на два основных типа: • элементы, предназначенные для вызова других кнопочных форм; • элементы, обеспечивающие открытие формы, отчета, запуск мак72
Мартьянова А.Е. Базы данных и знаний
73
роса, программы, выход из приложения с закрытием базы данных или переход в режим продолжения разработки кнопочной формы с помощью диспетчера кнопочных форм. Формирование элементов для вызова кнопочных форм Для формирования в главной кнопочной форме приложение «Учебный процесс» кнопки вызова одной из подчиненных кнопочных форм нажмем кнопку Создать (New). В окне Изменение элемента кнопочной формы (Edit Switchboard Item) в раскрывающемся списке Команда (Command) выберем значение Перейти & кнопочной форме (Go to Switchboard) (рис. I.35).
Рис. I.35. Окно создания (изменения) элемента кнопочной формы
В раскрывающемся списке Кнопочная форма (Switchboard) выбирается форма, переход к которой должна обеспечивать создаваемая кнопка редактируемой формы. Откроем список созданных для приложения кнопочных форм и выберем вариант кнопочная форма деканат. В поле Текст (Text) введем подпись для этой кнопки – Задачи деканата (рис. I.36).
Рис. I.36. Выбор подчиненной кнопочной формы
Для завершения формирования элемента нажмем кнопку OK. Элемент отобразится в списке Элементы данной кнопочной формы (Items on this Switchboard) в окне Изменение страницы кнопочной формы (Edit Switchboard Page) (рис. I.37).
74
Мартьянова А.Е. Базы данных и знаний
Рис. I.37. Изменение страницы кнопочной формы
Аналогичным образом создадим кнопки вызова других подчиненных форм и зададим им подписи: Задачи Кафедры и Задачи Учебной части, Заполнение форм БД. Для перехода к редактированию созданных кнопочных форм создадим в главной кнопочной форме кнопку с именем изменение главной кнопочной формы (рис. I.38), выбрав для нее команду Конструктор приложения (Design Application). В дальнейшем это позволит в любой момент вызвать Диспетчер кнопочных форм (Switchboard Manager), и с его помощью внести нужные изменения. Такую кнопку необходимо включить, так как в процессе отладки приложения могут возникнуть тупиковые ситуации, выход из которых возможен только путем модификации кнопочной формы. Кроме того, для модификации кнопочной формы можно вызвать диспетчера кнопочных форм в меню Сервис/Служебные программы (Tools/Utilities).
Рис. I.38. Выбор команды для изменения кнопочной формы
74
Мартьянова А.Е. Базы данных и знаний
75
Для завершения работы с приложением создадим кнопку, выбрав для нее команду Выйти из приложения (Exit Application), и присвоим ей имя Выход из приложения (рис. I.37). Заметим, что данная команда приводит к полному закрытию базы данных. Если требуется изменить или удалить какую-либо из созданных кнопок, следует выбрать (рис. I.37) имя этой кнопки из списка Элементы данной кнопочной формы (Items on this Switchboard) и нажать кнопку Изменить (Edit) или Удалить (Delete). При необходимости изменить порядок кнопок в списке выбирается элемент и используется кнопка Вверх (Move Up) или Вниз (Move Down). Перечень созданных элементов главной кнопочной формы приложение «Учебный процесс» представлен на рис. I.37. Закончив создание элементов главной кнопочной формы, нажмем кнопку Закрыть (Cancel). Это позволит вернуться к списку всех кнопочных форм приложения. В каждой подчиненной кнопочной форме (Задачи Деканата, Задачи Кафедры и Задачи Учебной части, Заполнение форм БД. Создадим кнопку для возврата к главной кнопочной форме, заполнив поля в окне Изменение элемента кнопочной формы (Edit Switchboard Item), как показано на рис. I.39. Для этого необходимо вернуться в окно Диспетчер кнопочных форм (Switchboard Manager), выделить нужную подчиненную форму и, нажав кнопку Изменить (Edit), выполнить необходимые действия по созданию соответствующего элемента. Таким образом, могут быть установлены все прямые и обратные связи главной кнопочной формы с подчиненными кнопочными формами, представленными в списке окна диспетчера кнопочных форм. На связи кнопочных форм и число уровней практически не накладывается ограничений, могут быть созданы любые удобные пользователю переходы по кнопочным формам.
Рис. I.39. Окно создания кнопки для возврата в главную форму приложения
76
Мартьянова А.Е. Базы данных и знаний
Формирование элементов для открытия объектов приложения Для формирования в кнопочных формах элементов, обеспечивающих выполнение задач приложения, необходимо, чтобы элементы были связаны с соответствующим объектом приложения. Диспетчер кнопочных форм обеспечивает связь элементов (открытие, выполнение) с формами, отчетами, макросами и модулями. Для создания кнопки, связанной с нужным объектом, следует выбрать команду Создать (New) в окне Изменение страницы кнопочной формы (Edit Switchboard Page) (рис. I.33). Затем в окне Изменение элемента кнопочной формы (Edit Switchboard Item) необходимо выбрать в раскрывающемся списке Команда (Command) (рис. I.34) одну из команд: • Открыть форму для добавления (Open Form in Add Mode); • Открыть форму для изменения (Open Form in Edit Mode); • Открыть отчет (Open Report); • Выполнить макрос (Run Macro); • Выполнить программу (Run Code). Нижний раскрывающийся список окна Изменение элемента кнопочной формы (Edit Switchboard Item) будет иметь наименование, соответствующее выбранной команде. Например, если выбрать в раскрывающемся списке Команда (Command) – Открыть отчет (Open Report), появится раскрывающийся список с наименованием Отчет (Report), в котором можно будет выбрать имя открываемого отчета. Если выбрать в раскрывающемся списке Команда (Command) – Открыть форму для изменения (Open Form in Edit Mode) (рис. I.40), появится раскрывающийся список с наименованием Форма (Form).
Рис. I.40. Выбор команды для элемента кнопочной формы
Следует для Кнопочной формы Деканат организовать выполнение команды Открыть отчет «Список студентов по группам» и команды Открыть отчет «Экзаменационная ведомость», для Кнопочной формы Кафедра – выполнение команды Открыть отчет «Список преподавате-
76
Мартьянова А.Е. Базы данных и знаний
77
лей по кафедрам», для Кнопочной формы Учебная часть – выполнение команды Открыть отчет «План проведения занятий в группах». Главная кнопочная форма приложения «Учебный процесс» представлена на рис. I.41.
Рис. I.41. Главная кнопочная форма приложения «Учебный процесс»
Вид подчиненной Кнопочной формы Заполнение форм БД представлен на рис. I.42. Выбор команд этой формы осуществляется через раскрывающийся список окна Изменение элемента кнопочной формы (Edit Switchboard Item) – см. рис. I.40. Для Кнопочной формы Заполнение форм БД следует организовать выполнение команды Открыть форму для изменения для вызова форм «Группа», «Студент», «Кафедра», «Преподаватель», «Предмет», «Учебный план», «Успеваемость». Через эти формы возможно организовать заполнение таблиц базы данных «Учебный процесс», не имея непосредственного доступа к самим таблицам базы данных. После завершения работы с диспетчером кнопочных форм в списке форм базы данных появляется форма с именем Кнопочная форма (Switchboard). При создании кнопочной формы с помощью диспетчера кнопочных форм Access создает таблицу Элементы кнопочной формы (Switchboard Items), содержащую описания отображаемых в форме кнопок и выполняемых ими действий.
78
Мартьянова А.Е. Базы данных и знаний
Рис. I.42. Кнопочная форма Заполнение форм БД
Запуск Access с открытием приложения пользователя Главная кнопочная форма приложения может запускаться сразу при открытии файла базы данных. Для задания такого режима нужно при открытой базе данных выбрать команду меню Сервис/Параметры запуска (Tools/Startup). В окне параметров запуска (рис. I.43) в раскрывающемся списке Вывод формы/страницы (Display Form/Page) выбирается форма, созданная диспетчером кнопочных форм. Остальные параметры запуска определяют вид окна приложения при его открытии. Эти параметры позволяют задать заголовок окна приложения, отказаться от вывода полного набора меню Access при работе приложения, строка которого выводится по умолчанию. При отказе от полного набора меню будет выведен ограниченный набор команд меню Файл, Правка, Вставка, Записи, Окно. То есть в этом случае не будут включены меню Вид и Сервис.
78
Мартьянова А.Е. Базы данных и знаний
79
Рис. I.43. Окно параметров запуска приложения
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Что означает аббревиатура SQL (Structured Query Language)? 2. Перечислите стандарты языка SQL. 3. Как просмотреть или изменить инструкцию SQL в MS Access? 4. Основной инструкцией языка SQL, всегда содержащейся в запросе, является команда SELECT. Опишите формат команды SELECT. 5. Перечислите параметры команды SELECT. 6. Опишите назначение форм СУБД MS Access. 7. Опишите назначение отчетов СУБД MS Access. 8. Опишите процесс создания кнопочной формы в СУБД MS Access. 9. Опишите как задать режим запуска главной кнопочной формы приложения сразу при открытии файла базы данных. ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Выполните запрос «Список студентов группы ДФД-31» на основании таблиц «Студент» и «Группа». 2. Выполните запрос «Код предмета» для получения списка всех предметов и их кодов через Режим SQL в конструкторе. Поясните инструкцию.
80
Мартьянова А.Е. Базы данных и знаний
3. Выполните запрос «План проведения занятий в группе», созданный на основании анализа предметной области. 4. Выполните запрос «Экзаменационная ведомость», созданный на основании анализа предметной области. 5. Выполните запрос «Успеваемость студентов в группах по предметам у преподавателей». 6. Выполните запрос «Список студентов по группам». 7. Создайте форму «Список студентов по группам» в режиме мастера форм или автоформы в столбец. 8. Создайте в режиме автоформы формы «Группа» и «Студент» и введите в формы данные (рис. I.28). Просмотрите соответствующие таблицы БД. Создайте в режиме автоформы формы «Кафедра», «Преподаватель», «Предмет», «Учебный план», «Успеваемость». 9. Создайте отчет «Список студентов по группам» в режиме мастера отчетов на основании запроса «Список студентов по группам», выполненного ранее. Отредактируйте в режиме конструктора отчет, если это требуется, чтобы привести отчет в пригодный для использования вид (рис. I.29). 10. Создайте отчет «Список преподавателей по кафедрам» в режиме мастера отчетов на основании запроса «Список преподавателей по кафедрам». 11. Создайте отчеты «План проведения занятий в группах» и «Экзаменационная ведомость» на основе соответствующих запросов. 12. Создайте кнопочную форму, которая будет использоваться как панель управления приложения «Учебный процесс». 13. Осуществите настройку режима запуска главной кнопочной формы приложения «Учебный процесс» сразу при открытии файла базы данных. 14. Оформите отчет по работе.
80
Мартьянова А.Е. Базы данных и знаний
81
ЧАСТЬ II
Работа VI. Создание БД MS Access надстройкой Visual Data Manager в среде Visual Basic Для создания приложений СУБД MS Access можно воспользоваться, например, средствами Visual Basic. Обычная технология разработки приложений для баз данных с использованием систем программирования, не являющихся системами управления базами данных (СУБД), заключается в том, что собственно база данных (таблицы, связи между ними) создается при помощи интегрированной среды одной из СУБД, а интерфейс и код управления данными – при помощи Visual-системы программирования. Для Visual Basic более «родным» является mdb-формат, который поддерживается СУБД Access. СУБД Access позволяет разрабатывать законченные приложения с использованием баз данных. При этом и таблицы со всеми связями между ними, и код обработки данных в этих таблицах находятся в одном mdb-файле. Лучше хранить данные отдельно от кода [11]. Например, если база содержит данные, зависящие от текущего месяца и года (накладные продаж и прочее), то удобно хранить такие данные не только отдельно от кода, но и отдельно от других таблиц в отдельном файле. Представим себе файл с базой данных, которая будет непрерывно расти с каждым месяцем. Ее трудно архивировать, переносить на съемных носителях, ну а если уж файл «разрушится», так со всеми данными за все месяцы и годы. Но при этом не обязательно отказываться от всех возможностей MS Access. Можно использовать этот продукт при создании базы данных в формате MDB. Visual Basic располагает средствами, позволяющими создавать приложения, эффективно работающие с информацией, хранящейся в базах данных. Visual Data Manager позволяет работать с базами данных Access, dBase, FoxPro, Paradox, с текстовыми файлами, поддерживает ODBC. В Visual Basic с помощью надстройки Visual Data Manager можно создавать базы данных, создавать и модифицировать таблицы, индексы [1]. Для запуска Visual Data Manager используется команда Add-In (Надстройки). При ее выполнении открывается окно VisData, содержащее меню и панель инструментов.
82
Мартьянова А.Е. Базы данных и знаний
Создание базы данных Для создания базы данных в Visual Data Manager выполним следующие действия: 1. В меню File (Файл) окна VisData выберем команду New (Новый). Открывается меню, содержащее список создаваемых файлов. Выберем из него тип создаваемого файла Microsoft Access. При выборе значении Microsoft Access появляется еще одно меню следующего уровня, позволяющее выбрать версию Access. Выберем нужное значение. Открывается диалоговое окно Select Microsoft Access Database to Create. 2. Используя раскрывающийся список Папка, укажем папку, в которой хотим сохранить создаваемую базу данных. В поле Имя файла введем имя базы данных «educational» и нажмем кнопку Сохранить. Открывается окно проектирования базы данных (рис. II.1), в котором можно создавать новые таблицы, входящие в базу данных, а также изменять структуру и индексы существующих таблиц.
Рис. II.1. Окно проектирования базы данных
Создание таблицы После того, как база данных создана, можно приступить к созданию таблиц, входящих в ее состав. Для создания таблицы выполним следующие действия: 1. В окне Database Window созданной базы данных щелкнем правой кнопкой мыши и выберем в контекстном меню команду New Table (Новая таблица) (рис. II.2). Открывается диалоговое окно Table
82
Мартьянова А.Е. Базы данных и знаний
83
Structure (Структура таблицы), предназначенное для создания таблицы (рис. II.3).
Рис. II.2. Создание таблицы через контекстное меню в Database Window
Рис. II.3. Диалоговое окно Table Structure для создания таблицы
84
Мартьянова А.Е. Базы данных и знаний
2. В поле Table Name (Имя таблицы) введем наименование создаваемой таблицы. 3. Для создания первого поля таблицы нажмем Add Field (Добавить поле). Открывается диалоговое окно Add Field, предназначенное для ввода информации, определяющей текущее поле (рис. II.4).
Рис. II.4. Диалоговое окно Add Field, предназначенное для создания полей
Каждое поле таблицы характеризуется наименованием, типом и шириной поля. Кроме этих основных параметров каждое поле обладает дополнительными свойствами, назначающими условия ввода данных. Все эти параметры можно задать в данном диалоговом окне. 4. В поле Name (Имя) введем наименование поля. Наименование каждого из полей таблицы, как правило, выбирается произвольно, но таким образом, чтобы отразить характер информации, которая будет храниться в данном поле. 5. Тип поля определяется типом данных, хранящихся в этом поле. Используя раскрывающийся список Type (Тип) диалогового окна Add Field, укажем тип поля. Сведения о типах данных, доступных в базах данных Access, см. в табл. II.1.
84
Мартьянова А.Е. Базы данных и знаний
85
Таблица II.1. Типы данных, доступные в базах данных Access
Microsoft Access (10.4302.2625) 1992-2001 Тип данных
1 Text
Memo
Currency
Date/Time
Yes/No
Byte
Integer
Long Integer
Single
Double
2002 Visual Data Manger Описание типа данVersion 6.0 ных DataBase Microsoft Access Version 7.0 MDB Тип данных 2 3 Данные фиксированText ной длины (до 255 символов) Поле большого разMemo мера (до 65535 символов) нефиксированной длины Числовое поле для Currency хранения точных значений денежных единиц Восьмибайтовое знаDate/Time чении даты или времени в диапазоне с 1 января 100 г. до 31 декабря 9999 г. Логическое значении Boolean True (Истинно) и False (Ложно) Однобайтовое целое Byte значение в диапазоне от 0 до 255 Двухбайтовое целое Integer число в диапазоне от -32 768 до 32 767 Четырехбайтовое цеLong лое значение в диапазоне от – 2 147 483 648 до 2 147 483 647 Четырехбайтовые Single числа с одинарной точностью Восьмибайтовое чисDouble ло с двойной точностью
86
Мартьянова А.Е. Базы данных и знаний Окончание таблицы II.1
1
2
-
Bynary
AutoNumber
Long
OLE Object
-
Hyperlink
-
Lookup Wizard
-
3 Применяется для больших объемов данных (графических, оцифрованных звуковых файлов) Счетчик. Long можно использовать как тип Счетчик в Access OLE-объекты, встроенные в базу данных Гиперссылка Выбор этого тип данных запускает мастера подстановок Действительное Глобальный уникальный идентификатор
Decimal Global Unique Identifier, GUID
6. С помощью полей ValidationText и ValidationRule можно задать текст сообщения, выводимого при неправильном вводе данных в это поле, и условие правильности ввода данных. 7. Используя поле DefaultValue (Значение по умолчанию), можно задать значение, вводимое в поле по умолчанию при добавлении в таблицу новой записи. 8. Завершив ввод информации, касающейся текущего поля, нажмем кнопку OK. Созданное поле будет добавлено в таблицу, а поля диалогового окна Add Field будут подготовлены для ввода следующего поля. 9. Повторяя пункты с 4 по 8, введем все поля таблицы. Рассмотрим создание таблицы на примере таблицы «GROUP_» (Группа) базы данных «educational» (рис. II.5 – II.8).
86
Мартьянова А.Е. Базы данных и знаний
87
Рис. II.5. Создание поля «Код группы» в диалоговом окне Add Field
Рис. II.6. Создание поля «Обозначение группы» в диалоговом окне Add Field
Для типа данных «Text» можно выбрать атрибут FixedField (Фиксированное поле) или VariableField (Изменяющееся поле). В первом случае количество символов всегда равно заданному размеру (Size), во втором случае – количество символов – то, которое заполнил пользователь. Следующие атрибуты полей означают: • AllowZeroLength – разрешить поле нулевой длины (NULL). • Required – обязательное поле. • OrdinalPosition – номер позиции поля.
88
Мартьянова А.Е. Базы данных и знаний
Рис. II.7. Создание поля «Количество студентов» в диалоговом окне Add Field
Рис. II.8. Создание поля «Средний балл в группе при поступлении» в диалоговом окне Add Field
10. Завершив ввод всех полей таблицы, нажмем кнопку Close для закрытия диалогового окна Add Field. Мы возвращаемся в диалоговое окно Table Structure. Список Field List (Список полей) содержит поля таблицы (рис. II.9). При выборе из этого списка наименования поля, в полях, расположенных справа от этого списка, отображаются параметры текущего поля, выведенные в диалоговом окне Add Field.
88
Мартьянова А.Е. Базы данных и знаний
89
Рис. II.9. Список Field List, содержащий поля таблицы «GROUP_»
11. Для создания индекса таблицы нажмем кнопку Add Index (Добавить индекс). Открывается диалоговое окно Add Index (рис. II.10), содержащее в названии наименование таблицы, для которой создается индекс.
Рис. II.10. Диалоговое окно, предназначенное для создания индекса таблицы
90
Мартьянова А.Е. Базы данных и знаний
12. В поле Name (Имя) диалогового окна введем наименование индекса. 13. Для указания полей, входящих в индекс, используется список Available Fields (Доступные поля). Дважды щелкая мышью на наименовании поля в этом списке, перенесем в поле Indexed Fields (Поля индекса) поля, образующие индекс. При создании индекса перенесите поля в Indexed Fields в том порядке, в каком они должны входить в индекс, иначе упорядочение данных будет осуществляться иначе, чем вам бы хотелось. 14. По умолчанию поля таблицы индексируются по возрастанию значения поля, входящего в индекс. Для изменения порядка упорядочения в списке Indexed Fields поставим знак минус (-) перед полем, для которого хотим изменить установленный по умолчанию порядок. 15. Используя флажки Primary (Первичный) и Unique (Уникальный), укажем тип создаваемого индекса. При установке флажка Primary создается первичный ключ, который используется для связывания таблиц и определения условий целостности данных. Поля, входящие в первичный ключ, не должны допускать пустых значений. IgnoreNulls – флажок для полей, не входящих в состав первичного ключа, – «Игнорировать пустые значения», может быть установлен отдельно или совместно с флажком Unique (Уникальный) для указания свойств ключевых полей. 16. Завершив ввод индекса, нажмите OK. Созданный индекс добавится в таблицу, а поля диалогового окна Add Index будут подготовлены для ввода следующего индекса. 17. Повторяя пункты с 12 по 16, можно ввести остальные индексы таблицы при их наличии. 18. Завершив формирование всех индексов таблицы, нажмем кнопку Close для закрытия диалогового окна Add Index. Мы вернулись в диалоговое окно Table Structure. Список Index List (Список индексов) содержит список созданных для таблицы индексов (рис. II.11).
90
Мартьянова А.Е. Базы данных и знаний
91
Рис. II.11. Список Index List диалогового окна Table Structure таблицы «GROUP_»
19. Таблица «GROUP_» создана. Нажмем кнопку Build the Table (Построить таблицу). После создания таблицы мы возвращаемся в Visual Data Manager. В окне Database Window появляется наименование созданной таблицы (рис. II.12).
Рис. II.12. В окне Database Window появляется наименование созданной таблицы «GROUP_»
92
Мартьянова А.Е. Базы данных и знаний
Работа с таблицей в базе данных После создания в базе данных таблицы ее наименование появляется в окне Database Window. При установке курсора на наименование и нажатии правой кнопки мыши появляется контекстное меню (рис. II.13), содержащее команды, предназначенные для работы с данной таблицей.
Рис. II.13. Контекстное меню таблицы
Назначение команд для работы с таблицей описано в табл. II.2 [1]. Таблица II.2. Команды, предназначенные для работы с таблицей Команда Open (Открыть) Design (Конструировать)
Rename (Переименовать) Delete (Удалить) Copy Structure (Копировать структуру)
Назначение Открывает таблицу для просмотра, редактирования и ввода новых значений Открывает диалоговое окно Table Structure (Структура таблицы) для просмотра и редактирования структуры таблицы Переименовывает таблицу Удаляет таблицу из базы данных Копирует структуру таблицы
Рассмотрим перечисленные в табл. II.2 команды более подробно. Просмотр содержимого таблицы Первой в контекстном меню расположена команда Open (Открыть), открывающая таблицу для просмотра, редактирования и ввода данных. При выборе этой команды открывается диалоговое окно Table (Таблица), содержащее поля таблицы и кнопки (рис. II.14). В нижней части диалогового окна расположена панель инструментов, предназначенная для перемещения по записям таблицы, а в верхней – кнопка, позволяющие добавлять в таблицу новые записи, редактировать или уда-
92
Мартьянова А.Е. Базы данных и знаний
93
лять текущую запись, осуществлять поиск в таблице нужных данных. Назначение этих кнопок описано в табл. II.3 [1]. Таблица II.3. Кнопки диалогового окна Table Команда Add (Добавить) Edit (Редактировать) Delete (Удалить) Seek (Искать)
Filter (Фильтр) Close (Закрыть)
Назначение Добавляет в таблицу новую запись и позволяет ввести в нее данные Позволяет отредактировать текущую запись таблицы, выбранную с помощью кнопок перемещения по записям Удаляет из таблицы текущую запись Открывает диалоговое окно Seek Parameters (Искать параметры), позволяющее задать параметры для поиска информации в таблице. Прежде чем осуществлять поиск, необходимо, используя раскрывающийся список Index, проиндексировать таблицу по полю, значение которого хотите найти Открывает диалоговое окно, позволяющее задать выражение для фильтра, накладываемого на таблицу Закрывает диалоговое окно Table
Рис. II.14. Просмотр содержимого таблицы
Модификация структуры таблицы Для просмотра и модификации структуры таблицы базы данных используется команда Design (Конструировать) контекстного меню. При выборе этой команды открывается диалоговое окно Table Structure (Структура таблицы) (рис. II.9), использовавшееся при создании таблицы. С помощью Visual Data Manager нельзя изменять тип и размер созданных ранее полей таблицы. Мы можем их только переименовать и изменить параметры проверки достоверности вводимых данных. Помимо этого, мы можем добавить в таблицу новые поля, удалить ненужные, добавить, переименовать или удалить индексы.
94
Мартьянова А.Е. Базы данных и знаний
Переименование таблицы Visual Data Manager позволяет переименовывать таблицу в базе данных. Для этого необходимо в окне Database Window установить курсор на наименование переименовываемой таблицы и выбрать в контекстном меню команду Rename (Переименовать). Имя таблицы помещается в редактируемое поле, в которое можно ввести новое поле или отредактировать имеющееся. После ввода нового имени нажмите клавишу <Enter>. Для отказа от переименования нажмите клавишу <Esc>. Удаление таблицы Для удаления таблицы из базы данных в Visual Data Manager в окне Database Window нужно установить курсор на наименование таблицы и выбрать из появившегося контекстного меню команду Delete (Удалить). Появляется запрос на подтверждение удаления таблицы. Для удаления таблицы нажмите кнопку Да, для отказа от удаления – Нет. Копирование структуры таблицы Visual Data Manager позволяет скопировать структуру таблицы в базе данных. Для этого необходимо в окне Database Window установить курсор на наименование таблицы и выбрать в контекстном меню команду Copy Structure (Копировать структуру). Открывается диалоговое окно Copy Structure, показанное на рис. II.15.
Рис. II.15. Диалоговое окно Copy Structure
Поле Tables содержит список таблиц базы данных. Выберите из этого списка наименование копируемой таблицы. В поле Target Database необходимо указать название базы данных, в которую копируется таблица. По умолчанию это поле содержит наименование текущей базы данных. Используя флажки Copy Indexes и Copy Data, можно указать, копировать ли со структурой индексы таблицы и данные, размещенные в
94
Мартьянова А.Е. Базы данных и знаний
95
ней. Завершив установку параметров, нажмите OK для осуществления копирования. База данных должна состоять из семи таблиц. В табл. II.4 – II.10 приведены параметры структуры таблицы базы данных «educational», созданной в приложении Visual Data Manager. Таблица II.4. Описание свойств полей таблицы GROUP_ Name Field
Index
Unique
Required
Type
Size
CodeGroup NameGroup QuantityStudents
Primary Да
Да
Да
2
Да
Да
Integer Text
Allow- ValidaZero- tion-Rule Length –
8
Нет
Нет
Byte
1
–
>=0 And <=35
Нет
Single
4
–
>2 And <5 Or 0
AvgRatingAtTransfer
Validation-Text
Quantity of students more allowable! Error in a rating!
Таблица II.5. Описание свойств полей таблицы STUDENT Name Field
Index
Unique
Required
Type
Size
CodeStudent CodeGroup NumberTestBook Surname Name Patronymic YearOfBirth Address HomePhone PointAtReceipt
Primary Да Да
Да Нет Да
Да Да Да
Long Integer Text
4 2 10
AlowZeroLength – – Нет
Да Нет Нет Нет Нет Нет Нет
Text Text Text Integer Text Text Single
15 15 15 2 25 10 4
Нет Да Да – Да Да –
96
Мартьянова А.Е. Базы данных и знаний Таблица II.6. Описание свойств полей таблицы FACULTY
Name Field
Index
Unique
Required
Type
Size
CodeFaculty
Primary
Да
Да
Integer
2
AlowZeroLength –
NameFaculty Phone ManagingFaculty Photo
Да
Нет
Да Нет Нет
Text Text Text
20 10 15
Нет Да Да
Нет
Text
255
Да
Таблица II.7. Описание свойств полей таблицы TEACHER Name Field
Index
Unique
Required
Type
Size
CodeTeacher
Primary Да Да
Да
Да
Integer
2
AllowZeroLength –
Нет Да
Да Да
Integer Text
2 10
– Нет
Да Нет Нет Нет Нет Нет Нет
Text Text Text Text Text Text Text
15 15 15 25 10 15 15
Нет Да Да Да Да Да Да
Нет
Text
10
Да
CodeFaculty TabularedNumber Surname Name Patronymic HomeAddress HomePhone Post ScientificDegree AcademicStatus
Таблица II.8. Описание свойств полей таблицы DISCIPLINE Name Field
Index
Unique
Required
Type
Size
CodeDiscipline NameDiscipline Programm
Primary
Да
Да
Integer
2
AlowZeroLength –
Да
Text
20
Нет
Нет
MEMO
96
Да
Мартьянова А.Е. Базы данных и знаний
97
Таблица II.9. Описание свойств полей таблицы STUDYING Name Field
Index
Unique
Required
Type
CodeStudying CodeTeacher CodeDiscipline Hours
Primary Да
Да
Да
Нет
Да
Да
Нет
Да
Integer Integer Integer
KindOfStudying NumberOfSemester KindOfReport
Size AllowZeroLength 2 –
2
–
2
–
Нет
Integer
2
–
Нет
Text
10
Да
Нет
Byte
1
–
Нет
Text
10
Да
ValidaValidation-Rule tion-Text
>0 And <=300
Number of hours no more than 300!
Таблица II.10. Описание свойств полей таблицы ADVANCED NaIndex me Field Code Да Primary Stu(совdent Code Да местно) Studying Rating
Date OfReport
Unique
Да (совместно)
ReType quired
Size AllowZeroLength 4 –
Да
Long
Да
Integer
2
–
Нет
Byte
1
–
Нет
Date/ Time
8
–
ValidaValidation-Rule tion-Text
>=0 And <=5
Error in an Rating!
При создании таблицы содержащей первичный и внешние ключи, например, таблицы «STUDENT», содержащей поле с первичным ключом
98
Мартьянова А.Е. Базы данных и знаний
«CodeStudent» и поле с внешним ключом «CodeGroup», необходимо индексировать эти поля так, как это показано на рис. II.16 – II.18. Поле «CodeStudent» индексируется как Primary, Unique и отмечается как Required, поле «NumberTestBook» индексируется как Unique и отмечается как Required, а поле «CodeGroup» индексируется и отмечается как Required. В случае, если ключ составной, например, в таблице «ADVANCED» первичный составной ключ состоит из двух полей «+CodeStudent;+CodeStudying», в диалоговом окне Add Index в поле Indexed Fields (рис. II.19) в качестве ключа указываются все эти поля. Вид составного первичного ключа таблицы «ADVANCED» – см. рис. II.20. Вид внешних ключей таблицы «ADVANCED»: «CodeStudent» и «CodeStudying» – см. рис. II.21.
Рис. II.16. Создание первичного ключа в таблице «STUDENT»
98
Мартьянова А.Е. Базы данных и знаний
Рис. II.17. Создание внешнего ключа в таблице «STUDENT»
Рис. II.18. Создание индексированного поля в таблице «STUDENT»
99
100
Мартьянова А.Е. Базы данных и знаний
Рис. II.19. Создание составного первичного ключа таблицы «ADVANCED» в диалоговом окне Add Index
Рис. II.20. Составной первичный ключ таблицы «ADVANCED»
100
Мартьянова А.Е. Базы данных и знаний
101
Рис. II.21. Внешние ключи таблицы «ADVANCED»
Необходимо заполнить реляционную базу данных «educational», исходя из следующих соображений: должно введено описание не менее двух кафедр и двух студенческих групп, не менее двух предметов, которые ведутся преподавателями разных кафедр. На этом этапе можно ограничиться осуществлением записи в базе данных о небольшом количестве студентов и преподавателей (порядка пяти-шести). Тестовые сведения для заполнения таблиц базы данных можно взять из табл. II.11 – II.17. Таблица II.11. Данные для заполнения полей таблицы GROUP_ CodeGroup 1 2
NameGroup DFD-31 DFD-32
QuantityStudents 25 26
AvgRatingAtTransfer 4,75 4,2
102
Мартьянова А.Е. Базы данных и знаний
Таблица II.12. Данные для заполнения полей таблицы STUDENT Code- Code- Number- SurStuGroup TestBook name dent
Name
Patronymic
YearOfBirth
1001
1
DFD-301
Ivanov
Ivan
1987
1002
1
DFD-302
Petrov
Petr
1003
2
DFD-331
Sidorov
1004
2
DFD-332
Ivanovitch Petrovitch Sidorovitch Nikanorovitch
Sidor Nikano- Nirov kanor
Address
Ho- Pointme- AtRePho- ceipt ne 4,2
1987
4,7
1987
4,5
1987
4
Таблица II.13. Данные для заполнения полей таблицы FACULTY CodeFaculty NameFaculty Phone 101 Infotmatika 25-25-25 102 Matematika 25-52-25
ManagingFaculty Photo Almazov A.A. C:\MyDB\Fun.bmp Tokarev T.T. C:\MyDB\Sad.bmp
Таблица II.14. Данные для заполнения полей таблицы TEACHER Code- Code- Tabu- SurTeaFalared- name cher culty Number
Name
10001
101
INF001
Alma- Alzov maz
10002
102
MAT001
Sokolov
Sokol
Patronymic
Almazovitch Sokol ovitch
102
HomeAddress
HomePhone
Post
ScientificDegree
prof.
d-r tech.
ass.
Academic Status prof.
Мартьянова А.Е. Базы данных и знаний
103
Таблица II.15. Данные для заполнения полей таблицы DISCIPLINE CodeDiscipline 20001
NameDiscipline Informatika
20002
Matematika
Programm Professor von Baumgarten was tall and thin with a long narrow face and steel grey eyes, which were unusually bright and penetrating. He was popular among the students, who often gathered round him after his lectures and listened enthusiastically to his strange theories. Often he would call for volunteers from them in order to conduct some experiment. So there was hardly a fellow in the class who had not, at one time or another, been thrown into a mesmeric trance by his Professor.
Таблица II.16. Данные для заполнения полей таблицы STUDYING CodeStudying 5001 5002 5003 5004 5005 5006 5007 5008
CodeTeacher 10001 10001 10001 10001 10002 10002 10002 10002
CodeDiscipline 20001 20001 20001 20001 20002 20002 20002 20002
Hours
100 100 100 100 100 100 100 100
KindOfStudying lecture works lecture works lecture practical lecture practical
NumberOfSemester 1 1 2 2 1 1 2 2
KindOfReport report
exam. admiss. exam. admiss. exam. admiss.
104
Мартьянова А.Е. Базы данных и знаний Таблица II.17. Данные для заполнения полей таблицы ADVANCED
CodeStudent 1001 1001 1001 1001 1001 1001 1001 1001 1002 1002 1002 1002 1002 1002 1002 1002 1003 1003 1003 1003 1003 1003 1003 1003 1004 1004 1004 1004 1004 1004 1004 1004
CodeStudying 5001 5002 5003 5004 5005 5006 5007 5008 5001 5002 5003 5004 5005 5006 5007 5008 5001 5002 5003 5004 5005 5006 5007 5008 5001 5002 5003 5004 5005 5006 5007 5008
Rating
DateOfReport 25.12.04
5
07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04
4 5
4 4 3
5 5 5
3 3 3
07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Вспомните базовые понятия реляционной модели данных. 2. Опишите способы адресации и поиска записей. 3. Ответьте на вопросо том, к какому типу файловой организации баз данных относится MS Access – файл-ориентированной или страничной организации данных.
104
Мартьянова А.Е. Базы данных и знаний
105
4. С какой целью для создания приложений СУБД MS Access можно пользоваться средствами Visual Basic? 5. Для каких целей предназначен Visual Data Manager? 6. Перечислите типы данных, доступные в базах данных Access, построенных с помощью Visual Data Manager. 7. Что означают понятия ValidationText, ValidationRule, DefaultValue, AllowZeroLength, Required, OrdinalPosition? 8. Что такое Index, какие типы флажков в каких случаях применяются: Primary, Unique, IgnoreNulls? 9. Перечислите команды, предназначенные для работы с таблицей. 10. Опишите порядок создания первичных и внешних составных ключей. ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. С помощью Visual Data Manager создайте базу данных «educational.mdb». 2. Создайте таблицу «GROUP_» (Группа) базы данных «educational.mdb». 3. Проиндексируйте ключевое поле таблицы GROUP_ базы данных «educational.mdb». 4. Создайте таблицы «STUDENT» (Студент), «FACULTY» (Кафедра), «TEACHER» (Преподаватель), «DISCIPLINE» (Предмет), STUDYING (Учебный план), «ADVANCED» (Успеваемость) БД «educational.mdb». Проиндексируйте ключевые поля таблиц базы данных «educational.mdb» (см. табл. II.4 – II.10). 5. Заполните данными таблицы «STUDENT», «FACULTY», «TEACHER», «DISCIPLINE», «STUDYING», «ADVANCED» базы данных «educational.mdb » (см. табл. II.11 – II.17). 6. Оформите отчет по работе.
106
Мартьянова А.Е. Базы данных и знаний
Работа VII. Построение запросов к БД MS Access на языке SQL в среде Visual Basic с помощью Query Builder Построение запросов в приложении Visual Data Manager осуществляется с помощью Query Builder. Для запуска Visual Data Manager используется команда Add-In (Надстройки). При ее выполнении открывается окно VisData, содержащее меню и панель инструментов. В Visual Basic запросы с помощью надстройки Visual Data Manager можно создавать вручную, записывая команду на языке SQL в специальном окне менеджера SQL Statement, либо путем автоматического построения с помощью Query Builder. Рассмотрим использование SQL Statement. Записываем следующий SQL-запрос (рис. II.22): SELECT GROUP_.NameGroup, GROUP_.QuantityStudents FROM GROUP_;
Рис. II.22. Окно формирования запроса SQL Statement
В запросе после первого служебного слова SELECT указываются через запятую имена полей таблицы (лучше указывать полное имя, включающее имя таблицы), которые будут выведены в ответе, и после служебного слова FROM – исходная таблица, из которой берутся записи.
106
Мартьянова А.Е. Базы данных и знаний
107
Кнопка Execute (Выполнить) предназначена для получения таблицы ответа на запрос (рис. II.23). Запрос сохраним под именем «QuantityStudentsGroup» в составе базы данных. Рассмотрим использование построителя запросов Query Builder (рис. II.24) для построения SQL-запрос.
Рис. II.23. Результат выполнения запроса
Рис. II.24. Вид построителя запросов Query Builder
108
Мартьянова А.Е. Базы данных и знаний
Составим в построителе запросов Query Builder запрос «ListStudentsGroupDFD_31» для вывода списка студентов группы DFD31. SQL-запрос с условием и сортировкой по фамилиям будет выглядеть следующим образом: SELECT GROUP_.NameGroup, GROUP_.QuantityStudents, GROUP_.AvgRatingAtTransfer, STUDENT.NumberTestBook, STUDENT.Surname, STUDENT.Name, STUDENT.Patronymic, STUDENT.YearOfBirth, STUDENT.Address, STUDENT.PointAtReceipt FROM GROUP_, STUDENT WHERE (GROUP_.NameGroup = 'DFD-31' ) And GROUP_.CodeGroup=STUDENT.CodeGroup ORDER BY STUDENT.Surname;
Это сложный запрос с выборкой данных из двух таблиц «GROUP_» и «STUDENT», в котором использовано соединение равенства GROUP_.CodeGroup=STUDENT.CodeGroup. Писать его вручную в окне формирования запроса SQL Statement достаточно неудобно. Использование Query Builder значительно упрощает этот процесс. В диалоговом окне Query Builder необходимо выбрать мышью в поле Tables список таблиц (GROUP_, STUDENT), а в поле Fields to Show: список полей из указанных таблиц (GROUP_.NameGroup, GROUP_.QuantityStudents, GROUP_.AvgRatingAtTransfer, STUDENT.NumberTestBook, STUDENT.Surname, STUDENT.Name, STUDENT.Patronymic, STUDENT.YearOfBirth, STUDENT.Address, STUDENT.PointAtReceipt), которые участвуют в запросе. Поля Field Name, Operator:, Value Criteria: и кнопки And into Criteria, Or into Criteria, List Possible Values позволяют формировать условия при выборке данных с помощью специальных операторов. Поле Group By позволяет указывать поле, по которому производится группировка, Order By – поле, по которому производится упорядочение данных (рис. II.25). Поля Top N Value: и Top Percent предназначены для вывода в запросе соответственно первых N записей или процента от общего числа записей.
108
Мартьянова А.Е. Базы данных и знаний
109
Рис. II.25. Формирование запроса « ListStudentsGroupDFD_31» в построителе запросов Query Builder
Кнопка Set Table Joins позволяет формировать соединение равенства двух таблиц в диалоговом окне Join Table (рис. II.26). Для создания равенства нужно нажать на кнопку Add Join to Query.
Рис. II.26. Формирование соединения равенства таблиц «GROUP_» и «STUDENT» в диалоговом окне Join Table
С помощью кнопки Save сохраним запрос под именем «ListStudentsGroupDFD_31». Он помещается в состав базы данных. Результатом запроса будет список студентов группы DFD-31 (рис. II.27):
110
Мартьянова А.Е. Базы данных и знаний
Рис. II.27. Результат выполнения запроса «ListStudentsGroupDFD_31»
Аналогично можно построить запрос «ListTeacherFaculty» для вывода списка преподавателей кафедры по кафедрам на основании двух таблиц «FACULTY» и «TEACHER». Запрос «PlanStudingGroup» для вывода плана проведения занятий в группах будет отличаться более сложной логикой, поскольку этот запрос строится на основании шести таблиц «ADVANCED», «GROUP_», «DISCIPLINE», «STUDENT», «STUDYING» и «TEACHER». Соответственно сложнее создать соединение равенства в диалоговом окне Join Table. Необходимо сформировать следующие соединения равенства: таблиц «GROUP_» и «STUDENT» – по полю «CodeGroup», таблиц «STUDENT» и «ADVANCED» – по полю «CodeStudent», таблиц «DISCIPLINE» и «STUDYING» – по полю «CodeDiscipline», таблиц «STUDYING» и «TEACHER» – по полю «CodeTeacher», таблиц «ADVANCED» и «STUDYING» – по полю «CodeStudying», каждый раз нажимая на кнопку Add Join to Query. Вид запроса «PlanStudingGroup» в режиме SQL: SELECT DISCIPLINE.NameDiscipline, GROUP_.NameGroup, TEACHER.Surname, TEACHER.Name, TEACHER.Patronymic, TEACHER.TabularedNumber, STUDYING.Hours, STUDYING.NumberOfSemester, STUDYING.KindOfStudying FROM ADVANCED, DISCIPLINE, GROUP_, STUDENT, STUDYING, TEACHER WHERE ADVANCED.CodeStudent=STUDENT.CodeStudent And GROUP_.CodeGroup=STUDENT.CodeGroup And DISCIPLINE.CodeDiscipline=STUDYING.CodeDiscipline And
110
Мартьянова А.Е. Базы данных и знаний
111
STUDYING.CodeTeacher=TEACHER.CodeTeacher And ADVANCED.CodeStudying=STUDYING.CodeStudying GROUP BY DISCIPLINE.NameDiscipline, GROUP_.NameGroup, TEACHER.Surname, TEACHER.Name, TEACHER.Patronymic, TEACHER.TabularedNumber, STUDYING.Hours, STUDYING.NumberOfSemester, STUDYING.KindOfStudying ORDER BY DISCIPLINE.NameDiscipline, GROUP_.NameGroup, TEACHER.Surname;
Результат выполнения запроса план проведения занятий в группе «PlanStudingGroup» представлен на рис. II.28.
Рис. II.28. Результат выполнения запроса «PlanStudingGroup»
Рассмотрение листинга этого запроса показывает, что в запросе следует использовать предложение с группировкой: GROUP BY DISCIPLINE.NameDiscipline, GROUP_.NameGroup, TEACHER.Surname, TEACHER.Name, TEACHER.Patronymic, TEACHER.TabularedNumber, STUDYING.Hours, STUDYING.NumberOfSemester, STUDYING.KindOfStudying
Предложение с группировкой дописывается в окне менеджера SQL Statement вручную, и запрос снова сохраняется с тем же именем. На вопрос «Update ‘QuantityStudentsGroup’?» следует ответить Да, поскольку работа ведется с тем же запросом и запрос следует обновить. Запросы с использованием предложения GROUP BY Количество студентов в группе может быть не только запрошено по соответствующему полю, но и вычислено с помощью функции агрегирования COUNT, которая выполняет подсчет записей в таблице или подсчет ненулевых значений в столбце таблицы. Как правило, функции агрегирования используют совместно с предложением GROUP BY. Например, чтобы подсчитать количество студентов в группе, можно использовать следующий запрос:
112
Мартьянова А.Е. Базы данных и знаний
SELECT GROUP_.NameGroup, COUNT (NumberTestBook) As QuantityStudentsGroup FROM GROUP_, STUDENT WHERE GROUP_.CodeGroup=STUDENT.CodeGroup GROUP BY GROUP_.NameGroup ORDER BY GROUP_.NameGroup;
Для того, чтобы не писать полностью весь запрос на SQL в окне SQL Statement, можно воспользоваться построителем запросов Query Builder. SQL-запрос на основании таблицы «STUDENT» с группировкой и сортировкой по коду группы будет формироваться следующим образом (рис. II.29)
Рис. II.29. SQL-запрос с группировкой и сортировкой в построителе запросов Query Builder
Этот запрос сохраним под именем «QuantityStudentsGroup». На вопрос «QueryDef already exists? Delete it?» следует ответить Да, поскольку такой запрос уже существует и его нужно удалить. В контекстном меню на имени запроса «QuantityStudentsGroup» выбрать пункт Design… и в окне SQL Statement следующий текст: SELECT GROUP_.NameGroup FROM GROUP_, STUDENT WHERE GROUP_.CodeGroup=STUDENT.CodeGroup GROUP BY GROUP_.NameGroup ORDER BY GROUP_.NameGroup;
необходимо изменить на:
112
Мартьянова А.Е. Базы данных и знаний
113
SELECT GROUP_.NameGroup, COUNT (NumberTestBook) As QuantityStudentsGroup FROM GROUP_, STUDENT WHERE GROUP_.CodeGroup=STUDENT.CodeGroup GROUP BY GROUP_.NameGroup ORDER BY GROUP_.NameGroup;
то есть дополнить, добавив строку «COUNT (NumberTestBook) As QuantityStudentsGroup». Далее на вопрос «Update ‘QuantityStudentsGroup’?» следует ответить Да, поскольку работа ведется с тем же запросом и запрос следует обновить. Результат запроса «QuantityStudentsGroup» представлен на рис. II.30.
Рис. II.30. Результат запроса «QuantityStudentsGroup»
Аналогично суммарный рейтинг у каждого студента «SumRatingStudent» можно подсчитать, используя функцию агрегирования SUM, которая вычисляет суммарное значение для содержащихся в столбце значений: SELECT ADVANCED.CodeStudent, SUM (Rating) AS SumRatingStudent FROM ADVANCED, STUDENT WHERE ADVANCED.CodeStudent=STUDENT.CodeStudent GROUP BY ADVANCED.CodeStudent ORDER BY ADVANCED.CodeStudent;
Воспользуемся построителем запросов Query Builder, в котором сформулируем запрос «SumRatingStudent» с группировкой по коду студента на основании таблицы «ADVANCED» (рис. II.31). Полученный в окне SQL Statement текст следует дополнить в предложении SELECT выражением SUM (Rating) AS SumRatingStudent.
114
Мартьянова А.Е. Базы данных и знаний
Рис. II.31. Запрос «SumRatingStudent» в построителе запросов Query Builder
Аналогично средний рейтинг в группе можно подсчитать, используя функцию агрегирования AVG, которая вычисляет среднее значение для содержащихся в столбце значений. Воспользуемся построителем запросов Query Builder, в котором сформулируем запрос «AvgRatingGroup» с группировкой по коду группы на основании таблицы «Advanced» (рис. II.32).
Рис. II.32. Запрос «AvgRatingGroup» в построителе запросов Query Builder
114
Мартьянова А.Е. Базы данных и знаний
115
В результате в окне SQL Statement получим текст: SELECT GROUP_.NameGroup FROM ADVANCED, GROUP_, STUDENT, STUDYING GROUP_.CodeGroup=STUDENT.CodeGroup WHERE ADVANCED.CodeStudent=STUDENT.CodeStudent ADVANCED.CodeStudying=STUDYING.CodeStudying GROUP BY GROUP_.NameGroup ORDER BY GROUP_.NameGroup;
And And
который откорректируем как: SELECT GROUP_.NameGroup, Avg (ADVANCED.Rating) AS AvgRatingGroup FROM ADVANCED, GROUP_, STUDENT, STUDYING WHERE GROUP_.CodeGroup=STUDENT.CodeGroup And ADVANCED.CodeStudent=STUDENT.CodeStudent And ADVANCED.CodeStudying=STUDYING.CodeStudying And STUDYING.KindOfReport = 'exam.' GROUP BY GROUP_.NameGroup ORDER BY GROUP_.NameGroup;
и сохраним запрос с тем же именем «AvgRatingGroup». Откроем для редактирования запрос «ListStudentsGroupDFD_31» и откорректируем текст в окне SQL Statement, убрав условие на обозначение группы и добавив упорядочение по обозначению группы: SELECT GROUP_.NameGroup, GROUP_.QuantityStudents, GROUP_.AvgRatingAtTransfer, STUDENT.NumberTestBook, STUDENT.Surname, STUDENT.Name, STUDENT.Patronymic, STUDENT.YearOfBirth, STUDENT.Address, STUDENT.PointAtReceipt FROM GROUP_, STUDENT WHERE GROUP_.CodeGroup=STUDENT.CodeGroup ORDER BY GROUP_.NameGroup, STUDENT.Surname;
Затем следует сохранить этот новый текст запроса как «ListStudentsGroup». Теперь в результате запроса «ListStudentsGroup» выводится список студентов по группам в алфавитном порядке по фамилиям. Запрос «AdvancedInGroupsAtTeachers» должен отображать успеваемость студентов в группах по предметам у преподавателей. Текст запроса также может быть набран вручную или спроектирован с помощью Query Builder, дополнив его затем предложениями группировки и вычисления среднего рейтинга студента по предмету у преподавателя: SELECT GROUP_.NameGroup, STUDENT.NumberTestBook, STUDENT.Surname, STUDENT.Name, STUDENT.Patronymic, DISCIPLINE.NameDiscipline, Avg (ADVANCED.Rating) AS AvgRatingStudent, TEACHER.Surname, TEACHER.Name, TEACHER.Patronymic FROM ADVANCED, DISCIPLINE, GROUP_, STUDENT, STUDYING, TEACHER
116
Мартьянова А.Е. Базы данных и знаний
WHERE DISCIPLINE.CodeDiscipline=STUDYING.CodeDiscipline And GROUP_.CodeGroup=STUDENT.CodeGroup And ADVANCED.CodeStudent=STUDENT.CodeStudent And ADVANCED.CodeStudying=STUDYING.CodeStudying And STUDYING.CodeTeacher=TEACHER.CodeTeacher And STUDYING.KindOfReport = 'exam.' GROUP BY GROUP_.NameGroup, STUDENT.NumberTestBook, STUDENT.Surname, STUDENT.Name, STUDENT.Patronymic, DISCIPLINE.NameDiscipline, TEACHER.Surname, TEACHER.Name, TEACHER.Patronymic ORDER BY STUDENT.Surname;
Запрос «ExaminationSheet» предназначен для формирования экзаменационной ведомости: SELECT DISCIPLINE.NameDiscipline, GROUP_.NameGroup, STUDYING.NumberOfSemester, STUDYING.KindOfReport, STUDENT.NumberTestBook, STUDENT.Surname, STUDENT.Name, STUDENT.Patronymic, ADVANCED.Rating, ADVANCED.DateOfReport FROM ADVANCED, DISCIPLINE, GROUP_, STUDENT, STUDYING, TEACHER WHERE GROUP_.CodeGroup=STUDENT.CodeGroup And ADVANCED.CodeStudent=STUDENT.CodeStudent And ADVANCED.CodeStudying=STUDYING.CodeStudying And DISCIPLINE.CodeDiscipline=STUDYING.CodeDiscipline And STUDYING.CodeTeacher=TEACHER.CodeTeacher ORDER BY DISCIPLINE.NameDiscipline, GROUP_.NameGroup, STUDYING.NumberOfSemester, STUDYING.KindOfReport, STUDENT.Surname;
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Перечислите типы команд языка SQL (DDL, DML, DCL, DQL). 2. Опишите назначение языка DQL (Data Query Language). 3. Приведите пример использования оператора SELECT в запросе. 4. С какой целью используется Query Builder? 5. Опишите порядок построения запроса с помощью Query Builder. 6. Опишите назначение кнопки Set Table Joins построителя Query Builder. 7. Опишите назначение полей Tables, Fields to Show:, Field Name, Operator:, Value Criteria:, Group By, Order By, Top N Value:, Top Percent и кнопок And into Criteria, Or into Criteria, List Possible Values построителя Query Builder.
116
Мартьянова А.Е. Базы данных и знаний
117
ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Создайте запрос «QuantityStudentsGroup» базы данных «educational.mdb» с помощью окно SQL Statement. 2. Создайте сложный запрос «ListStudentsGroupDFD_31» базы данных «educational.mdb» с помощью построителя запросов Query Builder на основании таблиц «GROUP_» и «STUDENT». 3. Создайте сложный запрос «ListTeacherFaculty» с помощью построителя запросов Query Builder на основании таблиц «FACULTY» и «TEACHER» базы данных «educational.mdb» для вывода списка преподавателей кафедры с помощью построителя запросов Query Builder. В этот запрос должны войти поля «NameFaculty», «Phone», «ManagingFaculty», «TabularedNumber», «Surname», «Name», «Patronymic», «ScientificDegree», «AcademicStatus». Осуществите сортировку данных с помощью предложения ORDER BY FACULTY.NameFaculty, TEACHER.Surname. 4. Создайте сложный запрос «PlanStudingGroup» с помощью построителя запросов Query Builder на основании шести таблиц «ADVANCED», «GROUP_», «DISCIPLINE», «STUDENT», «STUDYING» и «TEACHER». 5. Создайте сложный запрос «QuantityStudentsGroup», используя функцию агрегирования COUNT. 6. Создайте сложный запрос «SumRatingStudent», используя функцию агрегирования SUM. 7. Создайте сложный запрос «AvgRatingGroup», используя функцию агрегирования AVG. 8. Создайте сложный запрос «ListStudentsGroup», отредактировав текст запроса «ListStudentsGroupDFD_31». 9. Создайте сложный запрос «AdvancedInGroupsAtTeachers». 10. Создайте сложный запрос «ExaminationSheet». 11. Просмотрите результаты выполнения созданных запросов. 12. Оформите отчет по работе.
118
Мартьянова А.Е. Базы данных и знаний
Работа VIII. Разработка интерфейса приложения. Разработка форм для приложения в среде Visual Basic. Создание форм вручную. Автоматизация создания формы Разработка форм для приложения «Учебный процесс» Как правило, для приложения создаются специальные интерфейсы, в которых объекты приложения группируются по функциональному назначению, обеспечивается удобный доступ к ним. При этом окно базы данных может вообще не открываться в приложении, а работа пользователя непосредственно с таблицами базы данных исключается. При создании интерфейсов приложения особую роль играют формы, так как они являются основным диалоговым средством работы пользователя с базой данных. Формы построены таким образом, что любое действие пользователя автоматически вызывает реакцию системы, то есть воспринимается как событие, в зависимости от которого могут выполняться необходимые действия. Именно при работе в форме возникает основной ряд событий, обработка которых позволяет связывать различные объекты в задачах обработки данных. Таким образом, ходом выполнения приложения можно управлять, обрабатывая возникающие в формах события. Использование элемента управления Data Стандартным элементом управления для подключения к базам данных является элемент Data, обеспечивающий доступ с помощью процессора баз данных Microsoft Jet Engine [1, 12]. Свойства этого элемента управления описаны в табл. II.18 [12]. Этот элемент создает набор записей, являющихся записями одной таблицы или результатом выполнения запроса. Создадим на форме объект Data1 для работы с базой данных, созданной ранее. В окне Properties нужно определить следующие свойства: • Connect – по умолчанию уже введено Access; • DatabaseName – имя базы данных; • RecordSource – выбирается из списка имя таблицы или вводится выражение.
118
Мартьянова А.Е. Базы данных и знаний
119 Таблица II.18. Свойства элемента Data
Свойство Connect DatabaseName RecordSource RecordSetType Exclusive ReadOnly
Описание Формат источника данных, по умолчанию Access Имя базы данных Источник записей (имя таблицы, запроса, выражение SQL) Тип набора записей Если True, то монопольный доступ Если True, то только читать
После определения этих свойств создается набор записей с именем RecordSet. В зависимости от значения свойства RecordSetType он может быть типа: Table – набор записей соответствует физической таблице; Dynaset – динамический набор записей, полученный в результате запроса, при этом данные доступны для редактирования; Sharpshot – «моментальный снимок», доступен только для чтения. Элемент Data имеет кнопки для перемещения по записям набора RecordSet. Свойства и методы набора RecordSet – см. табл. II.19 [12]. С элементом Data связано событие Reposition, оно происходит при смене текущей записи. Таблица II.19. Свойства и методы набора RecordSet Свойство BOF EOF Fields Метод AddNew Delete MoveNext MovePrevious MoveFirst MoveLast Refresh
Описание True, если начало набора True, если конец набора Набор полей Описание Добавить пустую запись Удалить текущую запись Перейти к следующей записи Перейти к предыдущей записи Перейти к первой записи набора Перейти к последней записи набора Обновить набор
Просмотр и редактирование данных Для отображения данных на форме можно использовать как стандартные, так и нестандартные управляющие элементы, имеющие свойство DataSource (Источник данных). Элементы, предназначенные для отображения данных, нужно связать с источником. Для свойства DataSource (Источник данных) выбирается имя элемента, создающего набор записей, например, Data1. На форме может быть несколько таких элементов.
120
Мартьянова А.Е. Базы данных и знаний
Для свойства DataField выбирается из списка имя поля таблицы. Текстовые поля пригодны для изображения числовых и текстовых значений. Поле объекта OLE отображается стандартным элементом управления OLE. Связывание элементов управления с источником можно делать как в режиме проектирования, так и в коде программы. При запуске программы на выполнение выводится первая запись набора. Кнопки элемента Data обеспечивают перемещение от записи к записи. Если позволяет свойство RecordSetType, вы можете обновлять записи. Набор RecordSet Элемент управления Data создает набор доступных записей. Этот набор является объектом с именем RecordSet. Обновление данных Если свойство RecordSetType элемента Data установлено в Table или Dynaset, вы можете изменять значения полей. Новые значения заносятся в базу данных. Проверки типов выполняются системой при переходе к следующей записи. Добавление новых и удаление существующих записей выполняется в коде программы. Создание формы вручную Для рассмотрения способа создания формы вручную используем таблицу «GROUP_». Создадим форму Form1, на форме разместим поля надписей (Label), в которых затем поместим заголовок проекта и названия всех четырех полей таблицы «GROUP_». Для отображения данных в полях базы данных можно использовать для каждого поля окно TextBox. Для управления базой данных используем элемент управления Data (рис. II.33) – управляющий элемент для работы с базами данных. В рассматриваемой таблице «GROUP_» есть поля, обязательные для заполнения, – поле «CodeGroup» и «NameGroup». Когда таблицу будем заполнять через созданную форму, если хотя бы одно из полей обязательных для заполнения оставить пустым, то произойдет ошибка нарушения свойств полей базы данных. Поэтому поля данной таблицы, обязательные для заполнения, необходимо задавать на форме все.
120
Мартьянова А.Е. Базы данных и знаний
121
Рис. II.33. Форма с элементом управления Data
Теперь необходимо указать элементу Data1 базу данных, которой он должен управлять – подключить его к базе данных. Найдем в окне свойств элемента Data1 свойство DatabaseName (Имя базы данных) и щелкнем на кнопке со значком в виде трех точек справа от имени свойства. В отрывшемся диалоговом окне Database Name найдем файл базы данных, выделим его имя и щелкнем на Open (Открыть). Теперь элемент Data1 подключен к базе данных, содержащейся в указанном файле. Найдем в окне свойств элемента Data1 свойство RecordSource (Источник данных) и щелкнем на кнопке со значком «стрелка вниз». Откроется список таблиц, имеющихся в базе данных, выберем таблицу «GROUP_». Рассмотрим подключение к элементу Data1 текстового поля TextBox. Изменим значение свойства Name верхнего текстового поля на txtCodeGroup. Это текстовое поле будет отображать содержимое поля «CodeGroup» таблицы «GROUP_» и даст пользователю возможность изменять значения этого поля. Мы уже подключили к таблице элемент Data1, теперь подключим к элементу Data1 текстовое поле txtCodeGroup. Найдем среди свойств поля txtCodeGroup свойство DataSource (Источник данных) и развернем список его возможных значений. Поскольку форма содержит лишь один элемент Data, список будет состоять из одного имени: Data1. Выберите элемент Data1 в качестве источника данных для текстового поля txtCodeGroup. Теперь уточним, какое именно поле таблицы элемент Data1 должен отображать в тексто-
122
Мартьянова А.Е. Базы данных и знаний
вое поле. Выберем в списке значений свойства DataField (Поле в таблице) элемента txtCodeGroup значение CodeGroup. Для этикетки Label2 изменим свойства Name и Caption соответственно на lblCodeGroup и CodeGroup. Текстовое поле txtCodeGroup находится в состоянии «Разрешено» (в его свойстве Enabled выбрано значение True). Благодаря этому можно не только видеть содержимое соответствующего поля текущей записи таблицы, но и можно его изменять. В окне свойств каждого текстового окна установим свойство DataSource равное Data1, а для каждого из текстовых окон установим свойство DataField, равное имени одного из полей таблицы «GROUP_» (нужно воспользоваться списком, привязанным к строке свойств). Теперь выполним проект и получим отображение полей таблицы «GROUP_» БД «Учебный процесс» через созданную форму (рис. II.34). Для работы с записями базы данных форма дополнена кнопками для выполнения различных операций: добавление и удаление записей, обновления записей и т.п.
Рис. II.34. Вид рабочего окна приложения при его запуске
В окно кода введем следующий код событийных процедур для командных кнопок. Private Sub cmdAdd_Click() Data1.Recordset.AddNew End Sub
122
Мартьянова А.Е. Базы данных и знаний
123
Private Sub cmdDelete_Click() Data1.Recordset.Delete Data1.Recordset.MoveNext End Sub Private Sub cmdRefresh_Click() Data1.Refresh End Sub Private Sub cmdUpdate_Click() Data1.UpdateRecord Data1.Recordset.Bookmark = Data1.Recordset.LastModified End Sub Private Sub cmdClose_Click() Unload Me End Sub
Удаление записей можно выполнить, используя диалоговое окно сообщений (рис. II.35). Для этого следует в окно кода ввести следующий текст событийной процедуры для кнопки Delete: Private Sub cmdDelete_Click() t$ = "Вы действительно хотите удалить текущую запись" d = MsgBox(t$, 36, "Удаление записи") If d = 6 Then ' Нажата кнопка "Да" Data1.Recordset.Delete Data1.Recordset.MoveNext End If End Sub
Рис. II.35. Окно сообщения
Теперь добавим поиск группы по ее обозначению (рис. II.34) через созданную кнопку Find и организуем диалог с помощью окна ввода (рис. II.36).
124
Мартьянова А.Е. Базы данных и знаний
Рис. II.36. Окно ввода для поиска группы по ее обозначению
В команде Seek выбрана операция сравнения на равенство, поэтому группа будет найдена, если введенное через окно ввода название группы будет совершенно точно совпадать с хранимым в базе названием, включая регистры. Private Sub cmdFind_Click() p$ = "Введите название группы" s$ = InputBox(p$, "Поиск группы") Data1.Recordset.Index = "CodeGroup" Data1.Recordset.Seek "=", s$ If Data1.Recordset.NoMatch Then Data1.Recordset.MoveFirst End If End Sub
Одновременно следует установить для объекта Data1 свойство RecordsetType как 0 – Table (0 – таблица). Автоматизация создания формы Visual Basic позволяет создать автоматически форму с элементом управления Data и кнопками управления записями через Visual Data Manager. Для запуска Visual Data Manager используется команда AddIn (Надстройки). При ее выполнении открывается окно VisData, содержащее меню и панель инструментов. В окне менеджера вызовем через пункт меню Utility\Data Form Designer дизайнер формы базы данных Data Form Designer (рис. II.37).
124
Мартьянова А.Е. Базы данных и знаний
125
Рис. II.37. Окно дизайнера форм Data Form Designer
В диалоговом окне Data Form Designer заполним необходимые параметры: имя формы, источник записей (таблица «STUDENT»), и выберем все поля таблицы кнопкой « >> », которые впоследствии будут размещены на форме. После нажатия кнопки Build the Form (Построить форму) автоматически построится форма с 5 кнопками (рис. II.38). Автоматически будут созданы событийные процедуры для этих кнопок.
Рис. II.38. Автоматически созданная форма с помощью дизайнера форм Data Form Designer
Поскольку в проекте уже создана форма с элементом управления Data1, то необходимо через пункт меню Edit\Find… (Редактировать\Найти…) заменить в окне кода Data1 на Data2. Сам объект необхо-
126
Мартьянова А.Е. Базы данных и знаний
димо переименовать вручную в окне свойств Data, назвав его Data2. Свойства DataSours текстовых полей txtFields также необходимо заменить на Data2. В окно кода будет введен следующий код событийных процедур для командных кнопок (после замены Data1 на Data2). Private Sub cmdAdd_Click() Data2.Recordset.AddNew End Sub Private Sub cmdDelete_Click() Data2.Recordset.Delete Data2.Recordset.MoveNext End Sub Private Sub cmdRefresh_Click() Data2.Refresh End Sub Private Sub cmdUpdate_Click() Data2.UpdateRecord Data2.Recordset.Bookmark = Data2.Recordset.LastModified End Sub Private Sub cmdClose_Click() Unload Me End Sub
Процедуру удаления записи можно сразу дополнить диалогом с помощью диалогового окна сообщений: Private Sub cmdDelete_Click() t$ = "Вы действительно хотите удалить текущую запись" d = MsgBox(t$, 36, "Удаление записи") If d = 6 Then Data2.Recordset.Delete Data2.Recordset.MoveNext End If End Sub
Вручную добавим кнопку для поиска студента по номеру зачетной книжки в базе данных (рис. II.39) и организуем диалог с помощью окна ввода (рис. II.40): Private Sub cmdFind_Click() p$ = "Введите номер зачетной книжки студента" s$ = InputBox(p$, "Поиск студента") Data2.Recordset.Index = "NumberTestBook" Data2.Recordset.Seek "=", s$ 126
Мартьянова А.Е. Базы данных и знаний
127
If Data2.Recordset.NoMatch Then Data2.Recordset.MoveFirst End If End Sub
Рис. II.39. Дополнение автоматически созданной формы кнопкой поиска
Рис. II.40. Окно ввода для поиска студента по номеру зачетной книжки
Mожно дополнительно добавить сведения о текущей записи базы и количестве записей. Для этого откроем событийную процедуру для Data и выберем из списка существующее событие на событие Reposition(). Метка Label предназначена для вывода числа общего количества записей. Данный код будет работать при установке свойства RecordSetType элемента Data2 в положение 1-Dynaset. Private Sub Data2_Reposition() Screen.MousePointer = vbDefault On Error Resume Next Data2.Caption = "Record: " & (Data2.Recordset.AbsolutePosition + 1) x = Data2.Recordset.RecordCount
128
Мартьянова А.Е. Базы данных и знаний
Label.Caption = "All Records " & Str$(x) End Sub
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. С какой целью используются формы при создании интерфейсов приложения? 2. Опишите использование элемента управления Data для подключения к базам данных. 3. Опишите порядок построения формы вручную. 4. С какой целью используется дизайнер формы базы данных Data Form Designer? 5. Опишите порядок построения формы с помощью дизайнера формы базы данных Data Form Designer. ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Создайте на диске C: специально папку «MyDB» для размещения в ней файлов проекта и поместите в нее файл «educational.mdb». 2. Спроектируйте форму для заполнения таблицы «GROUP_» базы данных вручную. 3. Спроектируйте автоматически в том же проекте с помощью дизайнера формы базы данных Data Form Designer форму для заполнения таблицы «STUDENT». Элемент управления Data1 необходимо переименовать вручную как Data2. 4. Спроектируйте автоматически с помощью дизайнера формы «FACULTYs», «TEACHERs», «DISCIPLINEs», «STUDYINGs» и «ADVANCEDs» базы данных Data Form Designer формы для заполнения таблиц «FACULTY», «TEACHER», «DISCIPLINE», «STUDYING» и «ADVANCED» с помощью дизайнера формы базы данных Data Form Designer. Элементы управления Data необходимо переименовать вручную. Спроектируйте автоматически с помощью дизайнера формы 5. базы данных Data Form Designer формы «AdvancedInGroupsAtTeacherss», «AvgRatingGroups», «ExaminationSheets», «ListStudentsGroups», «ListTeacherFaculty», «PlanStudingGroup», «QuantityStudentsGroup», «SumRatingStudens» для вывода результатов запросов «AdvancedInGroupsAtTeacherss», «AvgRatingGroups», «ExaminationSheets», «ListStudentsGroups», «ListTeacherFacultys», «PlanStudingGroups», «QuantityStudentsGroups», «Sum128
Мартьянова А.Е. Базы данных и знаний
129
RatingStudens». Откорректируйте эти формы, удалив лишние кнопки (Add, Delete, Refresh, Update) и лишний код в окне кода, и переименовав элементы управления Data. 6. В меню Project (Проект) выберите команду Projecti Properties (Свойства проекта) и в поле Project Name (Наименование проекта) открывшегося диалогового окна введите наименование MyProject. Сохраните созданные формы в одной папке «MyDB» с файлом базы данных «educational.mdb». 7. В приложении Visual Data Manager создайте с помощью Query Builder и сохраните простой запрос о заведующих кафедрой с именем «ManagingFaculty»: SELECT FACULTY.NameFaculty, FACULTY.Phone, FACULTY.ManagingFaculty, FACULTY.Photo FROM FACULTY ORDER BY FACULTY.NameFaculty;
Спроектируйте автоматически с помощью дизайнера формы базы данных Data Form Designer форму «ManagingFacultys» для вывода результатов запроса «ManagingFaculty». Откорректируйте форму, удалив лишние кнопки (Add, Delete, Refresh, Update) и лишний код в окне кода, и переименовав элемент управления Data1 в Data16. Удалите с формы элемент управления txtFields, в который выводятся текстовые о местенахождении файлов с фотографиями заведующих кафедрами – сведения из поля «Photo». Добавьте на форму элемент управления Image1. Установите для него свойства: BorderStyle – 1-Fixed. В окно кода введите следующий код: Private Sub Data16_Reposition() Photo = Data16.Recordset.Fields("Photo").Value Image1.Picture = LoadPicture(Photo) End Sub
Для запуска формы «ManagingFacultys» на выполнение установите в качестве запускающего объекта объект ManagingFaculty. Для этого в меню Project (Проект) выберите команду MyProjectProperties и откройте диалоговое окно MyProject – ProjectProperties, в котором установите в разделе Startup Object: ManagingFaculty. По указанным адресам (см. табл. II.13, поле «Photo» – C:\MyDB\Fun.bmp и C:\MyDB\Sad.bmp) необходимо разместить фотографии заведующих кафедрой. Запустите форму «ManagingFacultys». В элементе управления Image1 будут отображаться фотографии заведующих кафедрами, файлы которых находятся в указанных в поле «Photo» таблицы «FACULTY» местах (рис. II.41).
130
Мартьянова А.Е. Базы данных и знаний
Рис. II.41. Форма «ManagingFacultys» в режиме запуска
8. В меню Project (Проект) выберите команду Projecti Properties (Свойства проекта) и в поле Project Name (Наименование проекта) открывшегося диалогового окна введите наименование MyProject. Сохраните созданные формы в одной папке «MyDB» с файлом базы данных «educational.mdb». 9. Оформите отчет по работе.
130
Мартьянова А.Е. Базы данных и знаний
131
Работа IX. Разработка интерфейса приложения. Разработка отчетов для приложения в среде Visual Basic Разработка отчетов для приложения «Учебный процесс» Для проектирования и управления отчетами в Visual Basic 6 в распоряжении пользователя имеются специальный объект DataReport и инструментальное средство Data Report Designer (Конструктор отчетов) [1]. Прежде чем приступить к созданию отчета, следует проверить подключение к проекту приложения конструкторов Data Environment (Окружение данных) и Data Report (Отчет данных). Для этого выберите команду Components (Компоненты) меню Project (Проект), в открывшемся диалоговом окне Components перейдите на вкладку Designers (Конструкторы) и проверьте, установлены ли флажки Data Environment и Data Report. Обычно они установлены по умолчанию. Конструктор отчетов DataReport Для проектирования отчетов в Visual Basic 6 предназначен объект DataReport, показанный на рис. II.42. Этот объект добавляется к проекту с помощью команды Add Data Report (Добавить отчет) меню Project (Проект). С точки зрения визуального проектирования объект DataReport состоит из нескольких разделов, отображающих функциональные части отчета. Их назначение описано в табл. II.20 [1]. Таблица II.20. Разделы отчета Раздел Report Header (Заголовок отчета) Page Header (Заголовок страницы) Detail (Детали)
Назначение Отображает заголовок отчета, который выводится однократно перед отчетом Отображает заголовок страницы, который выводится каждый раз на новой странице отчета Отображает содержание отчета, каждая строка которого соответствует одной записи в базе данных Page Footer (Ниж- Отображает текст, выводимый в нижнем колонтитуле страний колонтитул ницы каждый раз для новой страницы страницы) Report Footer Отображает текст нижнего колонтитула отчета, выводимый (Нижний колонти- один раз в конце отчета тул отчета)
132
Мартьянова А.Е. Базы данных и знаний
Перечисленные в таблице разделы показаны на рис. II.42. Кроме того, если в отчете осуществляется группировка данных, в него можно добавить еще два раздела: • Group Header (Заголовок группы) – отображает заголовок группы раздела Detail; • Group Footer (Нижний колонтитул группы) – отображает нижний колонтитул группы раздела Detail.
Рис. II.42. Объект DataReport для конструирования отчета
Элементы управления объекта DataReport В состав объекта DataReport входит набор элементов управления, которые можно использовать при проектировании отчета. При добавлении объекта к проекту приложения эти элементы управления становятся доступными на панели инструментов, когда объект DataReport находится в фокусе. Назначение элементов управления объекта DataReport приведено в табл. II.21 [1]. Функции элемента управления RptFunction приведены в табл. II.22 [1]. Таблица II.21. Элементы управления объекта DataReport Название RptLabel RptTextBox RptImage RptLine RptShape RptFunction
Описание Текстовая строка. Аналог элемента управления Label для форм Текстовое поле. Отображает поле базы данных Поле графического изображения Линия. Предоставляет возможность рисовать линии в отчете Фигура. Позволяет рисовать рамки, круги и другие геометрические фигуры в отчете Дает возможность выполнять вычисления над столбцами отчета. Возможные функции этого элемента управления перечислены в табл.II.22
132
Мартьянова А.Е. Базы данных и знаний
133
Таблица II.22. Функции элемента управления RptFunction Функция Sum
Описание Сумма. Выполняет суммирование столбца для всех строк
Min
Минимум. Находит минимальное значение столбца
Мах
Максимум. Находит максимальное значение столбца
Average
Среднее. Вычисляет среднее арифметическое для столбца среди всех строк Стандартное отклонение. Находит стандартное отклонение для столбца среди всех строк Стандартная ошибка
Standard Deviation Standard Error Value Count
Row Count
Счетчик значений (количество строк, в которых содержится значение). Подсчитывает количество строк, содержащих значение Счетчик строк. Подсчитывает количество строк
Свойства объекта DataReport Как и всякий объект в Visual Basic 6, объект DataReport характеризуется свойствами, основные из которых приведены в табл. II.23 [1]. Таблица II.23. Свойства объекта DataReport Свойство BottomMargin и TopMargin DataMember DataSource ExportFormats Font GridX и GridY LeftMargin и RightMargin ReportWidth Sections Title
Назначение Размер верхнего и нижнего полей отчета Задает объект Command, используемый для доступа к данным Источник данных
Набор форматов для экспорта содержимого отчета в файл (табл. II.24) Шрифт печати отчета Размер сетки по горизонтали и вертикали Размер левого и правого полей отчета Ширина отчета Раздел отчета Текст заголовка отчета
134
Мартьянова А.Е. Базы данных и знаний
Для записи данных в файл необходимо с помощью свойства ExportFormats указать один из четырех форматов экспорта – см. табл. II.24 [1]. Таблица II.24. Форматы экспорта данных отчета
ExportFormats (1)
Расширение файла htm, html
ExportFormats (2)
htm, html
ExportFormats (3)
txt
ExportFormats (4)
txt
Член коллекции
Описание
Формат HTML Формат HTML в универсальной кодировке Текстовый формат Текстовый формат в универсальной кодировке
Методы объекта DataReport Для управления объектом DataReport используются методы, представленные в табл. II.25 [1]. Таблица II.25. Методы объекта DataReport Метод ExportReport PrintReport Refresh Show
Описание Обеспечивает вывод данных отчета в файл Выводит данные отчета на печать Обновляет данные отчета Выводит данные отчета в окно предварительного просмотра перед печатью или сохранением в файле
Метод ExportReport Метод ExportReport имеет следующий синтаксис: DataReport.ExportReport ExpFormat, FileName, Owerwrite, ShowDialog, Range, PageFrom, PageTo где: • ExpFormat – формат экспорта (табл. II.24); • FileName – имя файла, в котором сохраняется отчет; • Owerwrite – задает признак перезаписи файла, принимает значение True (Истина) или False (Ложь); • ShowDialog – задает признак вызова диалогового окна Export (Экспорт) для выбора файла; • Range – задает признак экспорта части отчета, принимает значение True (Истина) или False (Ложь); • PageFrom – задает начальную страницу при экспорте части отчета; • PаgеTо – задает последнюю страницу при экспорте части отчета.
134
Мартьянова А.Е. Базы данных и знаний
135
Формат для вывода файла выбирается из коллекции ExportFormats, значения которой указаны в табл. II.24. Для назначения формата можно использовать служебные константы и ключи (табл. II.26 [1]). Таблица II.26. Константы и ключи для форматов экспорта данных отчета Член коллекции ExportFormats (1) ExportFormats (2) ExportFormats (3) ExportFormats (4)
Ключ keydefHTML keydefUnicodeHTMLUTF8 keydefText keydefUnicodeText
Константа rptKeyHTML rptKeyUnicodeHTMLUTF8 rptKeyText rptKeyUnicodeText
Все параметры метода ExportReport являются необязательными. При использовании этого метода необходимо помнить, что он не поддерживает экспорт изображений и графических элементов отчета. Метод PrintReport Метод PrintReport имеет следующий синтаксис: DataReport.PrintReport ShowDialog, Range, PageFrom, PageTo где: • ShowDialog – задает признак вызова диалогового окна Print (Печать) для настройки параметров печати; • Range – задает признак экспорта части отчета, принимает значение True (Истина) или False (Ложь); • PageFrom – задает начальную страницу при экспорте части отчета; • PageTo – задает последнюю страницу при экспорте части отчета. Параметры метода PrintReport являются необязательными. Методы Show и Refresh Метод Show имеет синтаксис, представленный ниже: DataReport.Show При просмотре отчета его можно пролистать и, при необходимости, распечатать из окна просмотра. Синтаксис метода Refresh тоже очень прост: DataReport.Refresh События объекта DataReport Объект DataReport взаимодействует с другими объектами с помощью следующих событий, перечисленных в табл. II.27 [1].
136
Мартьянова А.Е. Базы данных и знаний Таблица II.27. События объекта DataReport отчета
Событие Error ProcessingTimeout QueryClose Activate Deactivate Resize Initialize Terminate
Описание Возникает при ошибках вывода данных отчета Предоставляет пользователю возможность приостановки асинхронных операций (просмотр, печать, вывод в файл) отчета Возникает перед закрытием отчета. Предшествует событию Terminate Возникает при появлении отчета в активном окне просмотра отчета Возникает, когда отчет перестает находиться в активном окне Возникает, когда окно отчета изменяет размеры Возникает при создании объекта Возникает при уничтожении объекта и удалении его из памяти
Создание отчетов Теперь, после рассмотрения основных характеристик объекта DataReport, перейдем к проектированию отчетов [1]. Откройте свой проект MyProject. Любой отчет создается для вывода конкретной информации. При проектировании отчета необходимо создать и сохранить окружение данных. Гибким и удобным способом соединения с источником данных является использование в проекте окружения данных (Data Environment). Основное его преимущество заключается в том, что при необходимости изменения параметров соединения с базой данных вам будет достаточно изменить эти параметры в окружении данных для объекта Connection, и все объекты Command, связанные с ним, будут учитывать эти изменения. Если же в каждой форме настроено отдельное соединение, то вам придется исправлять изменившиеся параметры во всех формах. Окружение данных отчета при создании формы Выполните следующие действия: 1. В меню Project (Проект) выберите команду More ActiveX Designers (Другие конструкторы ActiveX), а затем значение Data Environment (Окружение данных). Открывается окно DataEnvironment1, содержащее соединение Connection1. 2. С помощью команды Properties Window (Окно свойств) меню View (Вид) откройте окно свойств и измените DataEnvironment1 на DataEnvironmentMyReport, а также наименование соединения на ConnectionMyReport (рис. II.43). 136
Мартьянова А.Е. Базы данных и знаний
137
Рис. II.43. Окно создания окружения данных
3. Установите курсор на соединение ConnectionMyReport, нажмите правую кнопку мыши и выберите команду Properties (Свойства) контекстного меню. Открывается диалоговое окно Data Link Properties (Свойства связи с данными) (рис. II.44). 4. На вкладке Provider (Поставщик услуг) выберите поставщика услуг.
Рис. II.44. Окно Data Link Properties для выбора поставщика услуг
5. Перейдите на вкладку Connection (Подключение) и укажите имя базы данных, для которой будет создаваться отчет (рис. II.45).
138
Мартьянова А.Е. Базы данных и знаний
Рис. II.45. Вкладка Connection
6. Чтобы проверить правильность соединения, нажмите кнопку Test Connection (Проверить подключение). Диалоговое окно с сообщением о проверке соединения показано на рис. II.46.
Рис. II.46. Диалоговое окно с сообщением о проверке соединения 7. Для подтверждения выполненных действий закройте окно Data Link Properties, нажав кнопку OK. 8. Выполнив все действия по созданию среды окружения данных, необходимо проверить наличие таблиц и данных в выбранной для проектирования отчета базе данных. Для этого откройте окно Data View (Просмотр данных) доступа к базе данных (рис. II.47), выбрав команду Data
138
Мартьянова А.Е. Базы данных и знаний
139
View Window (Окно просмотра данных) меню View (Вид) или нажав кнопку Data View Window на панели инструментов.
Рис. II.47. Окно доступа к базе данных
Проектирование простого отчета Создадим отчет, используя данные из представления «ListTeacherFaculty» («Список преподавателей по кафедрам») БД «Учебный процесс». Для создания отчета необходимо добавить в проект приложения объект DataReport. Выполните это следующим образом: 1. В меню Project (Проект) выберите команду Add Data Report (Добавить отчет). После выполнения этой команды появляется окно объекта DataReport. При помощи окна свойств назовите этот объект DataReportTeacher и, используя свойство Caption, присвойте ему заголовок «Список преподавателей». 2. После того как объект DataReport добавлен, назначьте для этого отчета источник данных. Для этого в окне DataEnvironmemtMyReport выберите соединение ConnectionMyReport и нажмите кнопку Add Command (Добавить команду) на панели инструментов окна или нажмите правую кнопку мыши и выберите команду Add Command контекстного меню.
140
Мартьянова А.Е. Базы данных и знаний
3. После того как источник данных (объект Сommand1) появился в окне окружения, откройте окно свойств данного объекта, выбрав команду Properties (Свойства) контекстного меню. 4. Присвойте источнику данных имя CommandMyReport. 5. Установите значения полей этого окна как на рис. II.48, то есть укажите имя таблицы, для которой создается отчет. Объекты базы данных, используемые для указания источника записи, перечислены в табл. II.28 [1].
Рис. II.48. Окно настройки источника данных отчета
6. После создания источника можно установить связь отчета с источником данных с помощью свойств отчета DataSource и DataMember. В свойстве DataSource выберите значение DataEnvironmentMyReport, в свойстве DataMember – значение MyReportCommand. Таблица II.28. Объекты базы данных, используемые для указания источника записей Объект базы данных Stored Procedure Table View Synonym
Назначение С помощью объекта Command вызывается на выполнение хранимая процедура базы данных Данные выбираются из таблицы Данные выбираются из представления, созданного в базе данных Источником записей объявляется синоним, являющийся объектом базы данных
140
Мартьянова А.Е. Базы данных и знаний
141
Теперь можно приступить к проектированию формы отчета. Начнем с заголовка отчета, то есть будем работать с разделом Report Header. В заголовке отчета необходимо расположить заголовок самого отчета. 7. Чтобы создать заголовок отчета, выполните следующие действия: • щелкните мышью кнопку RptLabel на панели элементов управления, установите курсор в первую строку раздела Report Header и нарисуйте рамку большого размера; • при помощи окна свойств установите имя объекта rptRepTitle; • в свойство Caption введите текст заголовка «Список преподавателей»; • для свойства Alignment установите значение 2-rptJustifyCenter; • с помощью свойства Font установите начертание шрифта Полужирный и размер 12. 8. Уменьшите размер сетки области проектирования отчета с помощью свойств GridX и GridY, установив в них значение 2. 9. В отчет необходимо вывести следующие поля представления «ListTeacherFaculty»: «TabularedNumber», «Surname», «Name», «Patronymic», «ScientificDegree», «AcademicStatus», «NameFaculty», «Phone», «ManagingFaculty». Добавьте в раздел Page Header девять объектов RptLabel для заголовков столбцов отчета. Назовите их в соответствии с полями таблицы, добавляя префикс rpt: rptTabularedNumber, rptScientificDegree, rptSurname, rptName, rptPatronymic, rptAcademicStatus, rptNameFaculty, rptPhone, rptManagingFaculty. В свойство Caption введите соответствующие тексты заголовков: «Название кафедры», «Телефон кафедры», «Заведующий кафедрой», «Табельный номер», «Фамилия», «Имя», «Отчество», «Ученая степень», «Ученое звание». Шрифт установите полужирный, размера 8. Заголовок отчета готов. 10. Вставьте в первую строку раздела Detail объект RptTextBox. В поле установлено значение Unbound, означающее, что объект пока не связан с источником данных. Это будет поле для вывода табельного номера преподавателя. Назовите этот объект rptTabularedNumberText. В свойстве DataMember выберите источник данных MyReportCommand, затем в свойстве DataField выберите поле «TabularedNumber» базы данных, соответствующее этому полю отчета. Вставьте в эту же первую строку раздела Detail еще восемь объектов RptTextBox. Аналогично подключите их к источнику данных MyReportCommand, и подключите
142
Мартьянова А.Е. Базы данных и знаний
их к полям «Surname», «Name», «Patronymic», «ScientificDegree», «AcademicStatus», NameFaculty», «Phone», «ManagingFaculty» базы данных. 11. Для запуска отчета на выполнение установите в качестве запускающего объекта объект DataReportTeacher. Для этого в меню Project (Проект) выберите команду MyProjectProperties и откройте диалоговое окно MyProject – ProjectProperties, в котором установите в разделе Startup Object: DataReportTeacher. 12. Запустите приложение на выполнение. Отчет будет выведен в окно просмотра (рис. II.49). В окне просмотра отчета можно выполнить следующие действия: • вывести отчет на печать с помощью кнопки Print (Печать); • экспортировать отчет в файл кнопкой Export (Экспорт); • задать масштаб просмотра отчета с помощью списка Zoom (Масштабирование); • перелистать страницы отчета, используя элемент управления выбора страниц Pages (Страницы), расположенного в нижней части окна просмотра.
Рис. II.49. Окно просмотра отчета
Изображения в отчете Для размещения изображении в отчете используется объект RptImage (см. табл. II.21). Добавьте в созданный вами отчет DataReportTheacher приложения MyReport изображение с помощью следующих действий: 142
Мартьянова А.Е. Базы данных и знаний
143
1. Сместите заголовок отчета «Список преподавателей» вправо для того, чтобы освободить место для изображения. 2. Разместите в левом верхнем углу отчета объект RptImage и назовите его rptImageMyReport. 3. В свойство Picture этого объекта загрузите изображение, воспользовавшись кнопкой с тремя точками. Показанное на рис. II.50 изображение (файл с именем Point11c.ico) можно заменить любым другим подходящим. Полученный отчет в режиме проектирования показан на рис. II.50. 4. Запустите приложение на выполнение. Нажав кнопку Список преподавателей кафедры, получите отчет, показанный на рис. II.51. С помощью объекта DataReport можно создавать достаточно сложные отчеты с использованием большого числа связанных таблиц. Рассмотрим, как это делается.
Рис. II.50. Отчет с изображением в режиме проектирования
144
Мартьянова А.Е. Базы данных и знаний
Рис. II.51. Окно просмотра отчета с графическим изображением
Группировка данных в отчете При проектировании сложного отчета употребляется группировка данных. Понятие группировки данных обычно возникает при создании отчетов с применением связанных таблиц. Данные в отчете, использующем группировку, выводятся группами, для которых можно задать заголовок, а в нижней части можно разместить итоговую информацию по группе. Для создания групп в отчете служит команда Insert Group Header/Footer (Вставить заголовок/нижний колонтитул группы), которая появляется в контекстном меню при установке курсора на серую полосу, содержащую заголовок раздела отчета. Удаляются группы командой контекстного меню Delete Group Header/Footer (Удалить заголовок/нижний колонтитул группы). При удалении группы удаляются все размещенные в ней объекты. Другой способ построения группы заключается в автоматическом создании групп отчета в соответствии с иерархией источника данных. Для этого служит команда Retrieve Structure (Извлечь структуру) контекстного меню, при этом создаются сразу все группы в соответствии с иерархией, заданной в источнике данных. Обратная операция – удаление всех групп – выполняется командой Clear Structure (Очистить структуру) контекстного меню, при этом из отчета удаляются все объекты.
144
Мартьянова А.Е. Базы данных и знаний
145
Проектирование отчета с группировкой данных Создадим более сложный отчет с использованием источника данных со связанными таблицами. Это будет отчет «Список студентов по группам», данные для которого находятся в таблицах «GROUP_» (Группа), «STUDENT» (Студент) БД «Учебный процесс». Добавьте новый отчет в приложение MyReport командой Add Data Report (Добавить отчет) меню Project (Проект) и назовите его DataReportStudentGroup. Создание источника данных отчета Перед проектированием отчета необходимо создать источник данных следующим образом: 1. Добавьте в окно проектирования окружения данных отчета новый источник данных. Для этого установите курсор на объект ConnectionMyReport и выберите команду Add Command контекстного меню. Переименуйте новый объект в CommandStudentGroup с помощью команды Rename (Переименовать) контекстного меню. 2. Создайте дочерний объект для CommandStudentGroup, выбрав команду Add Child Command контекстного меню, и переименуйте его в CommandStudent. 3. Откройте окно свойств созданного объекта CommandStudentGroup (рис. II.52). На вкладке General (Основные) этого окна выберите из расположенного рядом списка тип объекта Table (Таблица), после чего из списка Object Name (Наименование объекта) выберите таблицу базы «GROUP_». 4. Откройте окно свойств созданного дочернего объекта CommandStudent. На вкладке General (Основные) окна установите опцию Database Object (Объект базы данных), выберите из расположенного рядом списка тип объекта Table (Таблица), после чего из списка Object Name (Наименование объекта) выберите таблицу базы «STUDENT». 5. Для настройки связи этой таблицы с родительской, перейдите на вкладку Relation (Связь) (рис. II.53). Информация во всех полях задана по умолчанию. Нажмите кнопку Add (Добавить) для создания связи между родительской и дочерней таблицами, которая появится в списке связей группы Relation Definition (Описание связи). 6. Закройте диалоговое окно Свойства, нажав кнопку OK. Источник данных настроен и готов для создания отчета и выборки данных в него.
146
Мартьянова А.Е. Базы данных и знаний
Рис. II.52. Окно настройки дочерней таблицы источника данных
Рис. II.53. Окно настройки связи между родительской и дочерней таблицами
146
Мартьянова А.Е. Базы данных и знаний
147
Проектирование отчета Теперь, после создания источников данных, можно приступать к проектированию отчета DataReportStudentGroup: 1. Уменьшите размер сетки области проектирования отчета с помощью свойств GridX и GridY, установив в них значение 2. 2. Для подключения источника данных в свойстве DataSource выберите значение DataEnvironmentMyReport, в свойстве DataMember – значение CommandStudentGroup. 3. Для запуска отчета на выполнение установите в качестве запускающего объекта объект DataReportStudentGroup. Для этого в меню Project (Проект) выберите команду MyProjectProperties и откройте диалоговое окно MyProject – ProjectProperties, в котором установите в разделе Startup Object: DataReportStudentGroup. 4. Выберите объект DataReportStudentGroup. 5. Установите курсор на любую из полос, разделяющих разделы, нажмите правую кнопку мыши и выберите команду Retrieve Structure (Извлечь структуру) контекстного меню. В отчете появятся группы в соответствии с иерархией его источника данных. 6. Начнем проектирование с заголовка отчета (раздел Report Header). Разместите в заголовке объект RptLabel. Откройте окно Properties и в свойстве Name задайте наименование rptListStudent. В свойство Сaption введите текст «Список студентов», в свойстве Alignment задайте значение 2-rptJustifyCenter. Установите для этого объекта полужирный шрифт размером 12. Руководством для проектирования этого отчета может служить рис. II.54, на котором показан окончательный вид полученного отчета в режиме проктирования.
148
Мартьянова А.Е. Базы данных и знаний
Рис. II.54. Окончательный вид отчета DataReportStudentGroup в режиме проектирования
7. Перейдите к заголовку группы с наименованием Group Header (CommandStudentGroup_Header). В первой строке разместите объект типа RptLabel и назовите его rptNameGroup. В свойство Caption первого введите «Обозначение группы». Разместите в этой группе во второй строке объект rptTextBox и присвойте ему наименование rptNameGroupText. Для свойства DataMember установите значение источника данных CommandStudentGroup, из списка свойства DataField выберите поле таблицы «NameGroup». Установите для объекта шрифт и размер. В третьей строке разместите шесть объектов типа rptLabel и назовите их rptNumberTestBook, rptSurname, rptName, rptPatronymic, rptYearOfBirth, rptAddress. В свойство Caption первого введите соответственно «Номер зачетной книжки», «Фамилия», «Имя», «Отчества», «Год рождения», «Адрес». Периодически в процессе создания отчета можно запускать приложение на выполнение и проверять реальный вид отчета на любой стадии проектирования. 148
Мартьянова А.Е. Базы данных и знаний
149
8. Перейдите к проектированию раздела отчета Detail (CommandStudent_Detail). Добавьте в этот раздел шесть объектов типа RptTextBox и назовите их rptNumberTestBookText, rptSurnameText, rptNameText, rptPatronymicText, rptYearOfBirthText, rptAddressText. Для объекта rptNumberTestBookText установите свойство DataMember в значение CommandStudent, а в свойстве DataField выберите поле таблицы «NumberTestBook». Для объекта rptSurnameText установите свойство DataMember в значение CommandStudent, выберите в свойстве DataField поле «Surname». Для объекта rptNameText установите свойство DataMember в значение CommandStudent, в свойстве DataField выберите поле «Name». Для объекта rptPatronymicText установите свойство DataMember в значение CommandStudent, а в свойстве DataField выберите поле таблицы «Patronymic». Для объекта rptYearOfBirthText установите свойство DataMember в значение CommandStudent, а в свойстве DataField выберите поле таблицы «YearOfBirth». Для объекта rptAddressText установите свойство DataMember в значение CommandStudent, а в свойстве DataField выберите поле таблицы «Address». 9. Запустите приложение на выполнение и нажатием кнопки Список студентов вызовите окно просмотра отчета. В отчете не хватает, по крайней мере, двух очевидных полей: количества студентов и итоговой информации по среднему баллу для студентов в группе. Однако эти поля необходимо вычислить. Рассмотрим, как это делается. Вычисления в отчете О создании полей с вычислениями необходимо позаботиться еще на стадии построения окружения данных отчета, для чего нужно иметь хотя бы общее представление о выражениях языка SQL для выборки данных из таблиц базы данных. Покажем это на конкретном примере. Добавим в созданный нами отчет CommandStudentGroup поле, вычисляющее количество студентов в группе «QuantityStudentsGroup»: COUNT (NumberTestBook) AS QuantityStudentsGroup. 1. Откройте окно проектирования окружения данных отчета. 2. Установите курсор на источник данных CommandStudentGroup, нажмите правую кнопку мыши и выберите команду Properties (Свойства) контекстного меню. Откроется окно настройки источника данных.
150
Мартьянова А.Е. Базы данных и знаний
3. Поскольку в таблице «GROUP_» отсутствует необходимое нам поле, его нужно создать с помощью выборки данных из этой таблицы. В окне настройки источника данных установите опцию SQL Statement (Выражение SQL) и введите в поле текста выражение для выборки полей таблицы «STUDENT» и поля «QuantityStudentsGroup»: SELECT GROUP_.CodeGroup, GROUP_.NameGroup, COUNT (NumberTestBook) AS QuantityStudentsGroup FROM GROUP_, STUDENT WHERE GROUP_.CodeGroup=STUDENT.CodeGroup GROUP BY GROUP_.CodeGroup, GROUP_.NameGroup ORDER BY GROUP_.NameGroup;
4. Нажмите кнопку Применить. Если этого не выполнить, то не удастся восстановить связи с родительской и дочерней таблицами, разрушенные при переходе в режим выборки. 5. Выйдите из окна настройки, нажав кнопку OK. 7. Для восстановления связи с дочерним объектом выберите объект CommandStudent и откройте окно Properties для настройки. На вкладке Relation восстановите связь и нажмите кнопку OK. Выйдите из окна настройки, нажав кнопку OK. Созданное таким образом поле «QuantityStudentsGroup» может участвовать в отчете так же, как и все остальные поля. Доработайте проектируемый отчет DataReportStudentGroup. Добавьте в раздел заголовка группы Group Header (CommandStudentGroup_Header) объект RptLabel и введите в свойство Caption этого объекта «Количество студентов в группе». Переименуйте его как rptQuantityStudentsGroup. Добавьте объект RptTextBox и назовите его rptQuantityStudentsGroupText. Установите для свойства DataMember значение CommandStudentGroup и в свойстве DataFieid выберите поле «QuantityStudentsGroup». Для свойства DataFormat установите значение General (Общий). Запустите приложение и выведите отчет в окно просмотра. Осталось добавить в отчет средний балл для студентов в группе. Это можно сделать с помощью функционального поля отчета. Функциональные поля в отчете – это поля, в которых вычисляются некоторые функции (табл. II.22) над полями базы данных. Для добавления таких полей в отчет используется специальный объект – RptFunction. Нам необходимо добавить в отчет итоговую сумму в поле отчета «Средний балл при поступлении в группе». Рассмотрим, как это сделать.
150
Мартьянова А.Е. Базы данных и знаний
151
1. Добавьте в раздел Group Footer (CommandStudentGroup_Footer) объект RptLabel и введите в свойство Caption текст «Средний балл при поступлении в группе». 2. Добавьте в эту секцию объект RptFunction и назовите его rptAvgRating. Установите значение свойства FunctionType 1rptFuncAve. Установите для свойства DataMember значение CommandStudent и в свойстве DataField выберите поле «PointAtReceipt». Для свойства DataFormat оставьте значение General (Общий). 3. Запустите приложение на выполнение и просмотрите отчет (рис. II.55).
Рис. II.55. Окончательный вид отчета DataReportStudentGroup в режиме запуска приложения
152
Мартьянова А.Е. Базы данных и знаний
Создание формы для вывода отчета в файл Рассмотрим создание формы для вывода отчета «План проведения занятий в группе» в файл с указанием запрошенной пользователем группы и семестра учебного года. Внешний вид формы – см. рис. II.56.
Рис. II.56. Вид формы для вывода в файл отчета «План проведения занятий в группе» в режиме запуска приложения
Постройте форму frmzPlanStudingGroup в соответствии с табл. II.29.
152
Мартьянова А.Е. Базы данных и знаний
153
Таблица II.29. Таблица свойств формы frmzPlanStudingGroup Объект
Свойство
Форма
Name Caption
Элемент CommandButton
Name Caption
Элемент CommandButton
Name Caption
Элемент CommandButton
Name Caption Name MultiLine Text Name MultiLine ScrollBars Name
Элемент TextBox
Элемент TextBox
Элемент Data
Значение frmzPlanStudingGroup План проведения занятий в группе cmdInq Ввести в предложение WHERE обозначение группы и номер семестра, выполнить запрос cmdCreate Создать текстовый файл и отобразить его текст cmdClose &Close txtInq True см. запрос под табл. II.29 txtReport True 3 – Both Data17
Установите для элемента управления TextBox с именем txtInq свойство MultiLine в позицию True, в свойства Text введите текст следующего запроса: SELECT DISCIPLINE.NameDiscipline, GROUP_.NameGroup, TEACHER.Surname, TEACHER.Name, TEACHER.Patronymic, TEACHER.TabularedNumber, STUDYING.Hours, STUDYING.NumberOfSemester, STUDYING.KindOfStudying FROM ADVANCED, DISCIPLINE, GROUP_, STUDENT, STUDYING, TEACHER WHERE ADVANCED.CodeStudent=STUDENT.CodeStudent And GROUP_.CodeGroup=STUDENT.CodeGroup And DISCIPLINE.CodeDiscipline=STUDYING.CodeDiscipline And STUDYING.CodeTeacher=TEACHER.CodeTeacher And ADVANCED.CodeStudying=STUDYING.CodeStudying And GROUP_.NameGroup = 'DFD-31' And STUDYING.NumberOfSemester =1 GROUP BY DISCIPLINE.NameDiscipline, GROUP_.NameGroup, TEACHER.Surname, TEACHER.Name, TEACHER.Patronymic, TEACHER.TabularedNumber, STUDYING.Hours, STUDYING.NumberOfSemester, STUDYING.KindOfStudying ORDER BY DISCIPLINE.NameDiscipline, GROUP_.NameGroup, TEACHER.Surname;
В окно кода формы frmzPlanStudingGroup введите следующий текст: Dim NameDiscipline As String * 25 Dim NameGroup As String * 20
154
Мартьянова А.Е. Базы данных и знаний
Dim Surname As String * 25 Dim Namee As String * 20 Dim Patronymic As String * 20 Dim TabularedNumber As String * 20 Dim Hours As String * 5 Dim NumberOfSemester As String * 15 Dim KindOfStudying As String * 15 Dim st As String Const h As String = "|" Const Title As String = "План проведения занятий в группе" Private Sub cmdInq_Click() txtReport.Text = Title + Chr(13) + Chr(10) NameDiscipline = "Наименование предмета" NameGroup = "Обозначение группы" Surname = "Фамилия преподавателя" Namee = "Имя" Patronymic = "Отчество" TabularedNumber = "Табельный номер" Hours = "Часы" NumberOfSemester = "Семестр" KindOfStudying = "Вид занятия" txtReport.Text = txtReport.Text + NameGroup + NumberOfSemester + Chr(13) + Chr(10) Data17.RecordSource = txtInq.Text Data17.Refresh With Data17.Recordset NameGroup = Format(.Fields("NameGroup").Value, 2) NumberOfSemester = Format(.Fields("NumberOfSemester").Value, 2) st = NameGroup & h & NumberOfSemester txtReport.Text = txtReport.Text + st + Chr(13) + Chr(10) txtReport.Text = txtReport.Text + NameDiscipline + Surname + Namee + _ Patronymic + TabularedNumber + KindOfStudying + Hours + Chr(13) + Chr(10) Do While Not .EOF NameDiscipline = Format(.Fields("NameDiscipline").Value, 2) Surname = Format(.Fields("Surname").Value, 2) Namee = Format(.Fields("Name").Value, 2) Patronymic = Format(.Fields("Patronymic").Value, 2) TabularedNumber = Format(.Fields("TabularedNumber"), 2) KindOfStudying = Format(.Fields("KindOfStudying"), 2) Hours = Format(.Fields("Hours"), 2) st = NameDiscipline & h & Surname & h & Namee & h & Patronymic & h & _ TabularedNumber & h & KindOfStudying & h & Hours txtReport.Text = txtReport.Text + st + Chr(13) + Chr(10) .MoveNext Loop End With 154
Мартьянова А.Е. Базы данных и знаний
155
End Sub Private Sub cmdCreate_Click() fileN = "C:\MyDB\" & "PlanStudingGroup" & NameGroup & NumberOfSemester & _ Day(Date) & Hour(Time) & Minute(Time) & ".txt" Open fileN For Output As #1 Print #1, "План проведения занятий в группе " & NameGroup & " от " & Str(Date) Print #1, "______________________________________________________________" Print #1, Print #1, "Обозначение группы|"; " Семестр /текущий учебный год/" Print #1, "______________________________________________________________" Print #1, Data17.Recordset.MoveLast recCount = Data17.Recordset.RecordCount Data17.Recordset.MoveFirst Print #1, Data17.Recordset.Fields("NameGroup"); Tab; _ Data17.Recordset.Fields("NumberOfSemester") Print #1, "______________________________________________________________" Print #1, Print #1, "Наименование предмета|"; "Фамилия преподавателя|"; "Имя|"; _ "Отчество|"; "Табельный номер преподавателя|"; "Вид занятия|"; "Часы" Print #1, "______________________________________________________________" For i = 1 To recCount Print #1, Data17.Recordset.Fields("NameDiscipline"); Tab; _ Data17.Recordset.Fields("Surname"); Tab; Data17.Recordset.Fields("Name"); Tab; _ Data17.Recordset.Fields("Patronymic"); Tab; _ Data17.Recordset.Fields("TabularedNumber"); Tab; _ Data17.Recordset.Fields("KindOfStudying"); Tab; Data17.Recordset.Fields("Hours") Print #1, Data17.Recordset.MoveNext Next Print #1, "______________________________________________________________" Close #1 fn = FreeFile Open fileN For Input As #fn txtReport.Text = Input(LOF(fn), fn) Close #fn End Sub Private Sub cmdClose_Click() Unload Me End Sub
156
Мартьянова А.Е. Базы данных и знаний
«План проведения занятий в группе» группы DFD-32 во втором семестре текущего учебного года, записанный в текстовый файл – см. рис. II.57.
Рис. II.57. Файл «План проведения занятий в группе» DFD-32
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. С какой целью используются отчеты при создании интерфейсов приложения? 2. Перечислите разделы отчета объекта DataReport. 3. Перечислите элементы управления объекта DataReport. 4. Перечислите свойства объекта DataReport. 5. Перечислите функции элемента управления RptFunction. 6. Какой синтаксис имеет метод Show? 7. Опишите порядок построения простого отчета. 8. Опишите порядок построения отчета с группировкой данных. 9. Опишите параметры функции Format. ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Установите окружение данных отчета. 2. Спроектируйте с помощью объекта DataReport отчет «Список преподавателей». 3. Спроектируйте с помощью объекта DataReport отчет с группировкой данных «Список студентов». 4. Запустите отчет «Список студентов» на выполнение. Нажмите кнопку Export и сохраните файл с именем «ListStudentsGroup» в папке 156
Мартьянова А.Е. Базы данных и знаний
157
«MyDB», предназначенной для размещения файлов проекта. Тип файла выберите Text (*.txt). Откройте этот файл и отредактируйте его. 5. Спроектируйте форму для вывода отчета «План проведения занятий в группе» в файл с указанием запрошенной пользователем группы и семестра учебного года. 6. Спроектируйте форму с названием frmzExaminationSheet для вывода экзаменационной ведомости в файл с указанием запрошенных пользователем данных: предмета, группы, вида сдачи предмета и номера семестра учебного года (рис. II.58), используя нижеприведенный запрос: SELECT DISCIPLINE.NameDiscipline, GROUP_.NameGroup, STUDYING.NumberOfSemester, STUDYING.KindOfReport, STUDENT.NumberTestBook, STUDENT.Surname, STUDENT.Name, STUDENT.Patronymic, ADVANCED.Rating, ADVANCED.DateOfReport FROM ADVANCED, DISCIPLINE, GROUP_, STUDENT, STUDYING, TEACHER WHERE GROUP_.CodeGroup=STUDENT.CodeGroup And ADVANCED.CodeStudent=STUDENT.CodeStudent And ADVANCED.CodeStudying=STUDYING.CodeStudying And DISCIPLINE.CodeDiscipline=STUDYING.CodeDiscipline And STUDYING.CodeTeacher=TEACHER.CodeTeacher And DISCIPLINE.NameDiscipline = 'Informatika' And GROUP_.NameGroup = 'DFD-31' And STUDYING.KindOfReport = 'exam.' And STUDYING.NumberOfSemester = 2 ORDER BY DISCIPLINE.NameDiscipline, GROUP_.NameGroup, STUDYING.NumberOfSemester, STUDYING.KindOfReport, STUDENT.Surname;
Элемент управления Data1 формы frmzExaminationSheet переименуйте в Data18.
158
Мартьянова А.Е. Базы данных и знаний
Рис. II.58. Файл «Экзаменационная ведомость» группы DFD-32 по предмету «Informatika» во втором семестре текущего учебного года
В окно кода формы frmzExaminationSheet введите следующий текст: Dim NameDiscipline As String * 25 Dim NameGroup As String * 25 Dim NumberOfSemester As String * 15 Dim KindOfReport As String * 15 Dim NumberTestBook As String * 25 Dim Surname As String * 25 Dim Namee As String * 20 Dim Patronymic As String * 20 Dim Rating As String * 10 Dim DateOfReport As String * 20 Dim st As String Const h As String = "|" Const Title As String = "Экзаменационная ведомость" Private Sub cmdInq_Click() txtReport.Text = Title + Chr(13) + Chr(10) NameDiscipline = "Наименование предмета" NameGroup = "Обозначение группы" NumberOfSemester = "Семестр" KindOfReport = "Вид сдачи" NumberTestBook = "Номер зачетной книжки" Surname = "Фамилия" Namee = "Имя" Patronymic = "Отчество" Rating = "Оценка" DateOfReport = "Дата сдачи" txtReport.Text = txtReport.Text + NameDiscipline + NameGroup + KindOfReport + _ Chr(13) + Chr(10) Data18.RecordSource = txtInq.Text Data18.Refresh With Data18.Recordset NameDiscipline = Format(.Fields("NameDiscipline").Value, 2) NameGroup = Format(.Fields("NameGroup").Value, 2) NumberOfSemester = Format(.Fields("NumberOfSemester").Value, 2) KindOfReport = Format(.Fields("KindOfReport").Value, 2) st = NameDiscipline & h & NameGroup & h & NumberOfSemester & h & _ KindOfReport txtReport.Text = txtReport.Text + st + Chr(13) + Chr(10) txtReport.Text = txtReport.Text + NumberTestBook + Surname + Namee + _ Patronymic + Rating + DateOfReport + Chr(13) + Chr(10)
158
Мартьянова А.Е. Базы данных и знаний
159
Do While Not .EOF NumberTestBook = Format(.Fields("NumberTestBook").Value, 2) Surname = Format(.Fields("Surname").Value, 2) Namee = Format(.Fields("Name").Value, 2) Patronymic = Format(.Fields("Patronymic").Value, 2) st = NumberTestBook & h & Surname & h & Namee & h & Patronymic txtReport.Text = txtReport.Text + st + Chr(13) + Chr(10) .MoveNext Loop End With End Sub Private Sub cmdCreate_Click() fileN = "C:\MyDB\" & "ExaminationSheet" & NameDiscipline & NameGroup & _ NumberOfSemester & Day(Date) & Hour(Time) & Minute(Time) & ".txt" Open fileN For Output As #1 Print #1, " "; "Экзаменационная ведомость" Print #1, Print #1, Data18.Recordset.MoveLast recCount = Data18.Recordset.RecordCount Data18.Recordset.MoveFirst Print #1, " "; Data18.Recordset.Fields("NameDiscipline"); " "; _ Data18.Recordset.Fields("NameGroup") Print #1, "Название предмета____________________"; "Группа_______________" Print #1, Print #1, "Преподаватель _______________________" Print #1, Print #1, " "; Data18.Recordset.Fields("KindOfReport") Print #1, "Вид сдачи____________________________"; "Дата_________________" Print #1, Print #1, "________________________________________________________________" Print #1, "Номер зачетной книжки|"; "Фамилия "; "Имя "; "Отчество|"; _ "Оценка|"; "Подпись преподавателя" Print #1, "________________________________________________________________" For i = 1 To recCount Print #1, Data18.Recordset.Fields("NumberTestBook"); " |"; _ Data18.Recordset.Fields("Surname"); ""; Data18.Recordset.Fields("Name"); ""; _ Data18.Recordset.Fields("Patronymic"); "|"; " |" Print #1, Data18.Recordset.MoveNext Next Print #1, "________________________________________________________________" Close #1 fn = FreeFile Open fileN For Input As #fn
160
Мартьянова А.Е. Базы данных и знаний
txtReport.Text = Input(LOF(fn), fn) Close #fn End Sub Private Sub cmdClose_Click() Unload Me End Sub
7.
Оформите отчет по работе.
160
Мартьянова А.Е. Базы данных и знаний
161
Работа X. Разработка интерфейса приложения. Вывод результатов запроса в таблицу. Окончательная сборка проекта БД Отображение базы данных через элемент FlexGrid Для вывода табличных данных удобно использовать нестандартный управляющий элемент FlexGrid [1, 12]. Внешне это таблица, в каждую ячейку которой можно поместить число или текст. Нестандартный элемент управления вначале нужно поместить на панель инструментов. Выберите команду Components из меню Project. В одноименном диалоге найдите и отметьте флажком элемент Microsoft FlexGrid Control 6.0 и нажмите кнопку Применить. Выбранный элемент появится на панели элементов. Свойства элемента FlexGrid доступные в режиме проектирования – см. табл. II.30 [12]. Таблица II.30. Свойства элемента FlexGrid доступные в режиме проектирования Свойство Rows Cols ScrollBars Fixed Rows Fixed Cols AllowUserResizing
Описание Количество строк Количество столбцов Наличие полос прокрутки Количество фиксированных (не прокручиваемых) строк Количество фиксированных (не прокручиваемых) столбцов Разрешить изменять размеры строк и столбцов
Основные свойства собраны в диалоге, который открывается при выборе в окне свойств элемента. В режиме выполнения доступны также свойства ColWidth (Ширина столбца) и RowHeight (Высота строки). Свойства Row (Номер строки) и Col (Номер столбца) определяет текущую ячейку. Нумерации начинается с нуля. Содержимое текущей ячейки определяется свойством Text. Для элемента FlexGrid свойства можно настроить через окно свойств или через контекстное меню (рис. II.59).
162
Мартьянова А.Е. Базы данных и знаний
Рис. II.59 Свойства элемента FlexGrid
Создать форму как показано на рис. II.60. Дать форме имя frmInquiry. На форме разместить управляющий элемент FlexGrid, установив его свойства через контекстное меню так, как это показано на рис. II.59. Установить также свойство GridLine в положение 3 – FlexGridRaiseg, а свойство GridLineFixed – положение 2 – FlexGridInset. Объект FlexGrid переименовать как mfgInquiry.
Рис. II.60. Форма для выполнения запросов Разместить на форме текстовое поле (элемент TextBox). Переименовать его в txtInquiry.
162
Мартьянова А.Е. Базы данных и знаний
163
Текстовое поле (элемент TextBox) позволяет вводить и выводить на экран данные [1, 12]. Его можно использовать в многострочном режиме и для ввода параметров. Можно вводить текст и числа. Если для поля разрешен многострочный ввод, то переход на другую строку происходит при нажатии клавиши Enter. Свойства объекта TextBox – см. табл. II.31 [12]. Таблица II.31. Свойства объекта типа TextBox Свойство Text MultiLine ScrollBars Locked MaxLength PasswordChar SelText SelLength, SelStart
Описание Содержимое поля Если True, разрешен многострочный ввод Наличие или отсутствие полос прокрутки Если True, ввод запрещен Ограничивает количество символов, которое можно ввести Символ забоя при вводе пароля Выделенный текст (доступно только в коде программы) Длина и начальная позиция выделенного текста (доступны только при выполнении программы)
Свойство MultiLine (Много строк) устанавливается в True. Для свойства ScrollBars выбирается положение 2 – Vertical (Вертикальная полоса прокрутки). Стандартный элемент управления для подключения к базе данных – элемент Data1. Переименовать его в Data19. В окне Properties нужно определить следующие свойства: Connect – формат источника данных, по умолчанию Access, DatabaseName – имя базы данных, RecordSetType – тип набора записей: Dynaset – динамический набор записей, полученный в результате запроса. Установить свойство DataSource объектов txtInquiry и mfgInquiry как Data19. Создать кнопку для выполнения запроса с именем cmdInquiry, записать в окно кода текст: Private Sub cmdInquiry_Click() Data19.RecordSource = txtInquiry.Text Data19.Refresh End Sub
Создать кнопку для записи результатов запроса в файл с именем cmdCreate, записать в окно кода текст: Private Sub cmdCreate_Click() fileN = " C:\MyDB\" & "Inquiry" & Day(Date) & Month(Data) & Hour(Time) & _ Minute(Time) & ".txt"
164
Мартьянова А.Е. Базы данных и знаний
Open fileN For Output As #1 Print #1, "Запрос " & " от " & Str(Date) Print #1, "______________________________________________________________" Print #1, Print #1, txtInquiry.Text Print #1, "______________________________________________________________" Data19.Recordset.MoveLast colCount = Data19.Recordset.Fields.Count recCount = Data19.Recordset.RecordCount Data19.Recordset.MoveFirst For i = 0 To colCount - 1 Print #1, Data19.Recordset.Fields(i).Name; ": "; Next Print #1, For j = 0 To recCount - 1 For i = 0 To colCount - 1 Print #1, Data19.Recordset.Fields(i).Value; " "; Next Data19.Recordset.MoveNext Print #1, Next Close #1 End Sub
Сделать форму frmInquiry запускающей (диалог Project Properties вызывается из меню Project). При загрузке формы генерируется событие Load для нее. Запустить программу на выполнение с целью проверки ее работоспособности. В текстовое поле ввести текст любого запроса к базе, например запрос «PlanStudingGroup». Запросы можно сконструировать, например, с помощью надстройки Visual Data Manager в специальном окне менеджера SQL Statement, либо путем автоматического построения с помощью Query Builder. Результат выполнения запроса «PlanStudingGroup» – см. рис. II.61. С помощью кнопки Записать в файл можно записать в текстовый файл текст самого запроса и результат его выполнения. В дальнейшем этот текст можно вывести на печать и при необходимости легко преобразовать, например, в файл электронных таблиц.
164
Мартьянова А.Е. Базы данных и знаний
165
Рис. II.61. Результат выполнения запроса «AdvancedInGroupsAtTeachers»
Меню. Окончательная сборка проекта базы данных «Учебный процесс» Добавить в проект новую форму (команда Add Form меню Project), дать ей имя frmStart – это будет запускающая форма проекта. Здесь необходимо предусмотреть средства доступа к задачам кафедры, деканата и учебной части, к составлению запросов и вводу данных в базу через формы. Удобнее всего это сделать через меню команд формы. При вызове программы на выполнение в оперативную память считывается ее стартовый объект, тот, который указан в свойствах проекта (диалог Project Properties вызывается из меню Project). Необходимо указать в качестве стартового объекта форму frmStart. Меню команд формы создается в режиме проектирования с помощью редактора меню, который вызывается по команде Menu Editor меню Tools, при условии, что текущим объектом является форма [1, 12]. Элемент меню – это такой же объект, как и другие элементы управления. В окне редактора вводятся свойства каждого элемента (рис. II.62).
166
Мартьянова А.Е. Базы данных и знаний
Рис. II.62. Окно редактора меню
Свойство Caption – это текст команды или заголовка меню. Символ & в названии команды задает клавишу доступа. На рис. II.62 значение свойства Caption равно &Задачи, в этом случае комбинация клавиш Alt + З откроет меню Задачи, а если, не отпуская Alt, нажать клавишу доступа одной из команд меню Задачи, то будет выбрана эта команда. Свойство Name – это имя элемента в программе, его принято начинать с mnu и включать ссылку на элемент верхнего уровня. Редактор отображает введенные элементы в окне меню. Заголовки меню отображаются с начала строки. Пункты меню должны быть сдвинуты на одну позицию вправо. Сдвиг обеспечивают кнопки со стрелками влево и вправо. Если пункт меню имеет подменю, то нужно сместить команды подменю еще на одну вправо. Линия, разделяющая группу команд, определяется как элемент с Caption равным «черточка» (-). После того как определены свойства элемента меню, нужно нажать кнопку Next и перейти к определению следующего элемента. Кнопки со стрелками вверх/вниз дают возможность переместить элемент, кнопке Delete – удалить текущий элемент, кнопка Insert – вставить элемент перед текущим. Для рассматриваемого проекта структура меню представлена в табл. II.32.
166
Мартьянова А.Е. Базы данных и знаний
167
Таблица II.32. Структура меню проекта «Учебный процесс» Caption &Задачи … Задачи&Кафедры … Задачи&Деканата … Задачи&УчебнойЧасти &Формы … &Группа … &Студент …… &Кафедра … П&реподаватель …… Пред&мет …… У&чебный план …… Ус&певаемость &Запросы &Выход &О программе
Name mnuTask mnuTaskFaculty mnuTaskDean mnuTaskTeachingDepartment mnuForms mnuGroup mnuStudent mnu_1 mnuFaculty mnuTeacher mnu_2 mnuDiscipline mnu_3 mnuStudying mnu_4 mnuAdvanced mnuInquiry mnuExit mnuAbout
Событие Click – это единственное событие, поддерживаемое элементами меню. Чтобы меню работало, команды выполнялись, для каждого пункта меню нужно написать процедуру обработки события Click. Свойство Checked помещает или удаляет флажок рядом с командой. Его значением является переменная логического типа. Используя это свойство можно создавать команды-переключатели. Свойству Enabled можно присвоить значение False, если команду нужно заблокировать (недоступная команда). Например, если в данный момент нельзя выполнить запрос, то в коде программы установить mnuInquiry. Enabled равно False. С этой целью можно использовать также свойство Visible. При Visible равно False элемент становится невидимым. Свойство Shortcut определяет альтернативный вызов команды с клавиатуры. Здесь обычно используются клавиши Ctrl и Alt в сочетании с другими клавишами. В окно кода запускающей формы frmStart проекта ввести следующий текст для обработки событий Click, поддерживаемых элементами меню.
168
Мартьянова А.Е. Базы данных и знаний
Private Sub mnuAbout_Click() inf = MsgBox("By A.E. Martjanova, AGTU", vbInformation, "О программе") End Sub Private Sub mnuAdvanced_Click() frmADVANCEDs.Show End Sub Private Sub mnuDiscipline_Click() frmDISCIPLINEs.Show End Sub Private Sub mnuExit_Click() End End Sub Private Sub mnuFaculty_Click() frmFACULTYs.Show End Sub Private Sub mnuGroup_Click() frmGROUPs.Show End Sub Private Sub mnuInquiry_Click() frmInquiry.Show End Sub Private Sub mnuStudent_Click() frmSTUDENTs.Show End Sub Private Sub mnuStudying_Click() frmSTUDYINGs.Show End Sub Private Sub mnuTaskDean_Click() frmTaskDean.Show End Sub Private Sub mnuTaskFaculty_Click() frmTaskFaculty.Show End Sub Private Sub mnuTaskTeachingDepartment_Click() frmTaskTeachingDepartment.Show 168
Мартьянова А.Е. Базы данных и знаний
169
End Sub Private Sub mnuTeacher_Click() frmTEACHERs.Show End Sub
Далее необходимо спроектировать формы, с помощью которых можно будет выполнять различные задачи кафедры, деканата и учебной части. Форма frmTaskFaculty, выполняющая задачи кафедры с названием «Кафедра», представлена на рис. II.63, форма frmTaskDean, выполняющая задачи деканата с названием «Деканат», – на рис. II.64, форма frmTaskTeachingDepartment, выполняющая задачи учебной части с названием «Учебная часть» – на рис. II.65.
Рис. II.63. Форма «Кафедра»
170
Мартьянова А.Е. Базы данных и знаний
. Рис. II.64. Форма «Деканат»
Рис. II.65. Форма «Учебная часть»
Для всех кнопок необходимо предусмотреть обработку событий, связанных с загрузкой соответствующих форм. Для формы frmTaskFaculty, выполняющей задачи кафедры – «Кафедра»: Private Sub cmdListTeachers_Click() 170
Мартьянова А.Е. Базы данных и знаний
171
DataReportTeacher.Show End Sub Private Sub cmdManagingFacultys_Click() frmManagingFacultys.Show End Sub Private Sub cmdTeacher_Click() frmListTeacherFacultys.Show End Sub Sub
Для формы frmTaskDean, выполняющей задачи деканата – «Деканат»: Private Sub cmdExaminationSheets_Click() frmExaminationSheets.Show End Sub Private Sub cmdfrmAdvancedInGroupsAtTeacherss_Click() frmAdvancedInGroupsAtTeacherss.Show End Sub Private Sub cmdfrmAvgRatingGroups_Click() frmAvgRatingGroups.Show End Sub Private Sub cmdfrmSumRatingStudents_Click() frmSumRatingStudens.Show End Sub Private Sub cmdfrmQuantityStudentsGroups_Click() frmQuantityStudentsGroups.Show End Sub Private Sub cmdListStudentGroup_Click() DataReportStudentGroup.Show End Sub Private Sub cmdStudents_Click() frmListStudentsGroups.Show End Sub Private Sub cmdzExaminationSheet_Click() frmzExaminationSheet.Show End Sub
Для формы frmTaskTeachingDepartment, выполняющей задачи учебной части – «Учебная часть»:
172
Мартьянова А.Е. Базы данных и знаний
Private Sub cmdfrmPlanStudingGroups_Click() frmPlanStudingGroups.Show End Sub Private Sub cmdzPlanStudingGroup_Click() frmzPlanStudingGroup.Show End Sub
При необходимости на запускающую форму можно поместить и другие объекты, например, ярлыки (lblFaculty, lblDean, lblTeachingDepartment, lblAll), имеющие свойство Enabled = False и кнопку (cmdTask), при нажатии на которую запрашиваются пароли (рис. II.66) для входа в ту или иную задачу (пароли «Кафедра», «Деканат», «Учебная часть», «Всё»). При вводе верного пароля свойство Enabled соответствующего ярлыка становится равным True и разрешается доступ к соответствующим пунктам меню. При вводе неверного пароля выдается окно сообщений – рис. II.67. Окончательный вид приложения приведен на рис. II.68.
Рис. II.66. Запрос пароль для входа в задачу
Рис. II.67. Окно сообщений при неверном вводе пароля
172
Мартьянова А.Е. Базы данных и знаний
173
Рис. II.68. Окончательный вид приложения «Учебный процесс»
Встроенные диалоги В проектах на Visual Basic можно использовать стандартное окно сообщений [1, 12]. Окно может иметь кнопки OK, Cancel, Yes, No и др. Оператор для создания окна сообщений выглядит так (в квадратных скобках необязательные параметры): MsgBox <Сообщение> [,<Атрибуты>] [,<Заголовок>] Сообщение – это текст в кавычках, Заголовок – строка в заголовке окна. Атрибуты можно задавать числовыми значениями или системными константами (табл. II.33 [12]). Например: MsgBox "Ошибка в данных!" Таблица II.33. Возможные значения атрибутов для MsgBox Константа vbOKOnly vbOKCancel vbYesNoCancel vbYesNo vbCritical vbQuestion vbExclamation vbInformation
Значение 0 1 3 4 16 32 48 64
Описание Высвечивается только кнопка OK Высвечивается OK и Cancel Высвечивается Yes, No и Cancel Высвечивается Yes, No кнопки Значок Значок Значок Значок
Можно использовать этот диалог как функцию и тогда она возвращает числовое значение соответствующее нажатой кнопке (табл. II.34 [12]).
174
Мартьянова А.Е. Базы данных и знаний Таблица II.34. Возвращаемые значения для MsgBox
Константа vbOK vbCancel vbYes vbNo
Значение 1 2 6 7
Описание
Нажата OK Нажата Cancel Нажата Yes Нажата No
Окно ввода, как и окно сообщения, может отображаться оператором или функцией. С его помощью можно вывести сообщение и ввести данные. Сокращенный синтаксис функции выглядит так: InputBox (<Сообщение>, <Заголовок>,<Умолчание>) В качестве параметра умолчание можно задать строку, которая будет по умолчанию находиться в поле ввода при появлении окна диалога. Когда пользователь нажимает кнопку OK, содержимое поля ввода присваивается переменной. Если пользователь нажал кнопку Cancel, возвращается строка нулевой длины. Для правильного включения соответствующих опций в окно кода необходимо ввести дополнительно следующий текст: Private Sub cmdTask_Click() rc = InputBox("Введите пароль!", "Регистрация", "Пароль") If rc = "Кафедра" Then rc = abc lblFaculty.Enabled = True lblDean.Enabled = False lblTeachingDepartment.Enabled = False lblAll.Enabled = False mnuTaskDean.Enabled = False mnuTaskFaculty.Enabled = True mnuTaskTeachingDepartment.Enabled = False mnuGroup.Enabled = False mnuStudent.Enabled = False mnuFaculty.Enabled = False mnuTeacher.Enabled = False mnuDiscipline.Enabled = False mnuStudying.Enabled = False mnuAdvanced.Enabled = False mnuInquiry.Enabled = False ElseIf rc = "Деканат" Then rc = abc lblFaculty.Enabled = False lblDean.Enabled = True lblTeachingDepartment.Enabled = False 174
Мартьянова А.Е. Базы данных и знаний lblAll.Enabled = False mnuTaskDean.Enabled = True mnuTaskFaculty.Enabled = False mnuTaskTeachingDepartment.Enabled = False mnuGroup.Enabled = False mnuStudent.Enabled = False mnuFaculty.Enabled = False mnuTeacher.Enabled = False mnuDiscipline.Enabled = False mnuStudying.Enabled = False mnuAdvanced.Enabled = False mnuInquiry.Enabled = False ElseIf rc = "Учебная часть" Then rc = abc lblFaculty.Enabled = False lblDean.Enabled = False lblTeachingDepartment.Enabled = True lblAll.Enabled = False mnuTaskDean.Enabled = False mnuTaskFaculty.Enabled = False mnuTaskTeachingDepartment.Enabled = True mnuGroup.Enabled = False mnuStudent.Enabled = False mnuFaculty.Enabled = False mnuTeacher.Enabled = False mnuDiscipline.Enabled = False mnuStudying.Enabled = False mnuAdvanced.Enabled = False mnuInquiry.Enabled = False ElseIf rc = "Всё" Then rc = abc lblFaculty.Enabled = False lblDean.Enabled = False lblTeachingDepartment.Enabled = False lblAll.Enabled = True mnuTaskDean.Enabled = False mnuTaskFaculty.Enabled = False mnuTaskTeachingDepartment.Enabled = False mnuGroup.Enabled = True mnuStudent.Enabled = True mnuFaculty.Enabled = True mnuTeacher.Enabled = True mnuDiscipline.Enabled = True mnuStudying.Enabled = True mnuAdvanced.Enabled = True mnuInquiry.Enabled = True
175
176
Мартьянова А.Е. Базы данных и знаний
Else r = MsgBox("Пароль введен неправильно", vbExclamation + vbOKOnly) lblFaculty.Enabled = False lblDean.Enabled = False lblTeachingDepartment.Enabled = False lblAll.Enabled = False mnuTaskDean.Enabled = False mnuTaskFaculty.Enabled = False mnuTaskTeachingDepartment.Enabled = False mnuGroup.Enabled = False mnuStudent.Enabled = False mnuFaculty.Enabled = False mnuTeacher.Enabled = False mnuDiscipline.Enabled = False mnuStudying.Enabled = False mnuAdvanced.Enabled = False mnuInquiry.Enabled = False End If End Sub Private Sub Form_Load() lblDean.Enabled = False lblTeachingDepartment.Enabled = False lblAll.Enabled = False mnuTaskDean.Enabled = False mnuTaskFaculty.Enabled = False mnuTaskTeachingDepartment.Enabled = False mnuGroup.Enabled = False mnuStudent.Enabled = False mnuFaculty.Enabled = False mnuTeacher.Enabled = False mnuDiscipline.Enabled = False mnuStudying.Enabled = False mnuAdvanced.Enabled = False mnuInquiry.Enabled = False End Sub
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Что представляет собой управляющий элемент FlexGrid? 2. Перечислите свойства элемента FlexGrid доступные в режиме проектирования.
176
Мартьянова А.Е. Базы данных и знаний
177
3. Перечислите свойства объекта TextBox, устанавливаемые в процессе проектирования формы для выполнения запросов базы «Учебный процесс». 4. Для управления базой данных используем элемент управления DataControl. Вспомните его свойства. 5. Как назначается стартовый объект программы? 6. Опишите процесс создания меню команд. 7. Какое событие поддерживается элементами меню? 8. Опишите назначение и параметры встроенных диалогов. ЗАДАНИЕ на проектирование БД «Учебный процесс» 1. Спроектируйте форму для выполнения запросов frmInquiry. 2. Произведите окончательную сборку проекта БД «Учебный процесс»: назначьте запускающую форму программы, сконструируйте для нее меню команд, впишите необходимый код в окна кода форм. 3. Дополните приложение недостающими элементами, запрещающими вход в задачи без знания соответствующего пароля. 4. Откомпилируйте программу и запустите готовое приложение. Определите размеры файлов готового приложения и БД «Учебный процесс.mdb». Сделайте выводы. 5. Оформите отчет по работе.
178
Мартьянова А.Е. Базы данных и знаний
ЧАСТЬ III
Работа XI. MS SQL Server. Создание БД Ниже по источнику [3] приведена таблица (табл. III.1) самых распространенных SQL-серверов в порядке (примерно) убывания их возможностей: Таблица III.1. Список наиболее распространенных SQL-серверов Сервер
IBM DB2 Database
Universal
Oracle Database
Microsoft SQL Server
IBM Informix Dynamic Server Sybase Adaptive Server Enterprise Sybase Adaptive Server Anywhere
Borland InterBase
PostgreSQL
MySQL
Достоинства Самый навороченный язык запросов, лучший оптимизатор, возможность писать функции на других языках. Великое множество дополнительных возможностей. Версионный сервер. Быстро развивающийся продукт, уже вплотную приближающийся к своим более развитым конкурентам. Средняя стоимость. Довольно развитый быстрый сервер. Достаточно развитый сервер. Средняя стоимость. Существует под множество платформ, включая самые экзотичные. Низкая стоимость. Приличный набор возможностей. Версионный сервер. Бесплатный. Поддерживает историческую модель. Возможность создавать свои типы данных. Бесплатный.
Недостатки
Высокая стоимость.
Очень высокая стоимость сервера и поддержки. Существует только для одной платформы (Win32). -
-
Относительно работает.
медленно
-
Очень бедный язык заБыстро работает на простых просов. Мало дополнизапросах. Бесплатный. тельных возможностей.
Сервер для управления реляционными БД обычно называют SQL-сервером. SQL (Structured Query Language – язык структурированных запросов) является стандартным языком для работы с реляционны178
Мартьянова А.Е. Базы данных и знаний
179
ми БД. Кроме стандартных реляционных операций, этот язык предоставляет возможности для изменений структуры таблиц. Различные варианты SQL используются во всех, как серверных, так и в настольных реляционных СУБД. Какой SQL-сервер лучше всего использовать – это может сильно зависеть от постановки задачи, количества пользователей и прихотей заказчика. На сегодняшний день нет идеальной системы управления базами данных (СУБД), имеющей как развитый интерфейс, так и оптимизированную структуру. Сравнивать достоинства и недостатки продуктов разных фирм сложно – каждый имеет свои недостатки и преимущества. В дальнейшем будем рассматривать работу с SQL Server 2000 фирмы Microsoft, который является достаточно мощным и перспективным [6, 8, 15]. Создание базы данных и журнала транзакций Рассмотрим процесс создания базы данных. Предполагается, что SQL Server уже запущен, и для наших целей воспользуемся SQL Server Enterprise Manager (Пуск/Программы/Microsoft SQL Server/ Enterprise Manager). Щелкните правой кнопкой мыши на компоненте Databases SQL Server в окне SQL Server Enterprise Manager. В результате этого на экране появится контекстное меню, показанное на рис. III.1.
Рис. III.1. Контекстное меню объекта Databases
В этом меню нужно выбрать команду New Database (Новая база данных). Выполнение этой команды приводит к появлению диалогового окна, представленного на рис. III.2, открытого на вкладке General (основное). Это окно можно также вызвать, нажав на панели инструментов кнопку New Database в меню Действие.
180
Мартьянова А.Е. Базы данных и знаний
Рис. III.2. Диалоговое окно свойств создаваемой базы данных
На этой вкладке необходимо ввести имя создаваемой базы данных в поле Name (Имя) (в данном примере введено значение Учебный процесс); можно также выбрать языковую поддержку в раскрывающемся списке Collation name, хотя в подавляющем большинстве случаев достаточно воспользоваться предлагаемым по умолчанию значением. После того как имя введено, оно автоматически становится именами файла базы данных. Помимо имени файла на вкладке Data Files можно задать путь к нему, его размер и принадлежность группе (рис. III.3). При необходимости для базы данных можно использовать несколько файлов. В нижней части вкладки Data Files можно установить свойства каждого файла базы данных – File Properties (Свойства файла). Установив флажок Automatically grow file (Автоматическое увеличение размера файла), вы избавляетесь от необходимости отслеживать размер вашей базы данных. Два переключателя: File growth (Степень увеличения размера
180
Мартьянова А.Е. Базы данных и знаний
181
файла) и Maximum file size (Максимальный размер файла), позволяют определить, соответственно, на сколько будет увеличиваться размер файла – в абсолютных (In megabytes) или относительных (By percent) единицах, и его максимальный размер – Unrestricted file growth (Неограниченное увеличение размера) или Restrict file growth (MB) (Ограничить размер ... мегабайтами).
Рис. III.3. Вкладка Data Files диалогового окна свойств базы данных
Теперь выберите вкладку Transaction Log (Журнал транзакций), вид которой показан на рис. III.4. Все, что было сказано по поводу параметров файлов данных, в полной мере относится и к файлам журналов транзакций.
182
Мартьянова А.Е. Базы данных и знаний
Рис. III.4. Вкладка Transaction Log диалогового окна свойств базы данных
Все установки сделаны, осталось нажать кнопку OK, и новая база данных будет создана (рис. III.5).
Рис. III.5. Создание БД Учебный процесс
182
Мартьянова А.Е. Базы данных и знаний
183
После того как база данных создана, можно более подробно посмотреть ее свойства, а в случае необходимости и изменить их. Откройте опять через контекстное меню диалоговое окно Properties. В этом диалоговом окне свойств интересны вкладки Options (Опции) и Permissions (Полномочия). Начнем с Options, которая позволяет изменить исходные параметры созданной базы данных (рис. III.6). Все опции условно разбиты на три категории: Access (Доступ), Settings (Установки) и Compatibility (Совместимость).
Рис. III.6. Вкладка Options диалогового окна свойств базы данных
В Access входят опции: • Restrict Access – использовать базу данных может только ее владелец. • Single user – запретить одновременный доступ нескольких пользователей к базе данных. • Read-only – база данных может быть открыта только для чтения; другими словами, запрещается изменять данные базы данных.
184
Мартьянова А.Е. Базы данных и знаний
• В Settings рассмотрим шесть опций: • ANSI NULL default – использование этой установки разрешает автоматический ввод значений NULL в столбцах таблицы или других пользовательских типах данных. • Recursive triggers – разрешает использование рекурсивных вызовов триггеров. • Select into/bulk copy – установка этого флажка позволяет выполнять непротоколируемые операции, включая операторы UPDATETEXT, WRITETEXT и SELECT INTO, а также копирование блоками. • Truncate log on checkpoint – установка этого флажка позволяет автоматически укорачивать журнал транзакций при прохождении контрольных точек – функций, которые SQL Server выполняет с целью записи изменений в базу данных в известный и подходящий момент времени. Если установлен флажок Truncate log on checkpoint, нельзя создать резервную копию журнала транзакций при стандартном резервировании. Поэтому прежде чем устанавливать эту опцию, хорошенько обдумайте общий план резервирования. • Auto close – установка этого флажка приводит к тому, что база данных закрывается, когда последний пользователь завершает с ней работу; по умолчанию эта опция установлена в TRUE для всех баз данных SQL Server, запущенного под Windows. • Torn page detection – установка этого флажка позволяет SQL Server отслеживать незавершенные операции ввода/вывода, произошедшие после общего или какого-либо другого сбоя системы; если таковые будут обнаружены и необходимо произвести восстановление из резервной копии. В категории Compatibility представлена единственная опция – Level (Уровень совместимости), которая позволяет установить, с какими версиями SQL Server будет совместима база данных. Предлагаются следующие варианты: SQL Server 6.0, SQL Server 6.5, SQL Server 7 и SQL Server 2000. Теперь обратим внимание на появившуюся в SQL Server 2000 вкладку Permissions (Полномочия), где можно назначить пользователю или роли права на выполнение операций над объектами базы данных. Здесь ограничимся лишь перечислением возможных прав (рис. III.7): • Create Table – пользователю разрешено создавать таблицы. • Create View – пользователю разрешено создавать представления. • Create SP – пользователю разрешено создавать сохраненные процедуры. 184
Мартьянова А.Е. Базы данных и знаний
185
• Create Default – пользователю разрешено создавать значения по умолчанию. • Create Rule – пользователю разрешено создавать правила. • Create Function – пользователю разрешено создавать функции. • Backup DB – пользователю разрешено проводить резервирование базы данных. • Backup Log – пользователю разрешено проводить резервирование журнала транзакций базы данных.
Рис. III.7. Вкладка Permission диалогового окна свойств базы данных
Удаление баз данных Удаление базы данных приводит к освобождению пространства, занимаемого всеми ее файлами, а также к удалению всех содержавшихся в ней объектов. Будьте внимательны, удаленную базу данных восстановить непросто. Если все-таки возникает необходимость в восстановлении удаленной
186
Мартьянова А.Е. Базы данных и знаний
базы данных, остается либо использовать ее резервную копию и связанные с ней журналы транзакций, либо обойтись без помощи SQL Server. Если нет полной уверенности в том, что информация в базе данных больше никогда не понадобится, перед ее удалением лучше всегда сделать на диске дамп базы данных и где-нибудь в надежном месте сохранить получившийся файл. Имея этот файл, вы избавите себя от головной боли, если вдруг понадобится информация именно из этой базы данных. Удаление базы данных с помощью SQL Enterprise Manager предполагает выполнение следующих действий: 1. Активизируйте SQL Enterprise Manager и выберите сервер, на котором находится база данных. 2. Выберите базу данных, которую хотите удалить. 3. Нажмите кнопку Delete Database (Удалить базу данных) на панели инструментов. Можно также щелкнуть правой клавишей мыши на базе данных и выбрать из контекстного меню команду Delete (Удалить). Появляется окно запроса на подтверждение необходимости удаления базы данных (рис. III.8). 4. Нажмите кнопку Yes (Да) и база данных будет удалена, или No (Нет), если вы все-таки решили сохранить ее.
Рис. III.8. Окно запроса на подтверждение удаления базы данных
Обратите внимание на появившийся только в SQL Server 2000 флажок Delete backup and restore history for the database (Удалить историю резервирования и восстановления базы данных), который позволяет избавиться от информации по резервированию базы данных. После того как база данных создана, можно приступать к созданию ее основных объектов – таблиц, и их компонентов – строк и столбцов. Так же, как и в других системах баз данных, каждый столбец имеет определенный ассоциированный с ним тип данных, а каждый тип данных – определенные характеристики.
186
Мартьянова А.Е. Базы данных и знаний
187
Таблицы Как и в любой другой реляционной базе данных, в SQL Server данные хранятся в таблицах – двумерных массивах, состоящих из столбцов и строк. • Каждый столбец таблицы представляет собой один из атрибутов объекта. • Каждая строка представляет один из объектов, для которых создана таблица. Таблицы были выбраны в качестве логической структуры хранения данных потому, что они понятны пользователям и их легко использовать для выборки, отображения и манипулирования данными. В каждой базе данных можно создать до 2 миллиардов таблиц. Если быть более точным, то в базе данных можно создавать 2 147 483 объектов, в число которых входят, естественно, и таблицы. Объекты базы данных включают в себя все таблицы, представления, сохраненные процедуры, расширенные сохраненные процедуры, триггеры, правила, значения по умолчанию и условия на значения. Создание таблиц SQL Enterprise Manager предоставляет богатый графический интерфейс для определения таких параметров таблиц, как типы данных, размер значений столбцов и другие. •Для того чтобы начать работать с таблицами, запустите SQL Enterprise Manager и выберите сервер, с которым будете работать. Затем раскрой дерево баз данных и ту базу данных, в которую нужно добавить новую таблицу. •Выделите компонент Tables (Таблицы) и либо щелкните на нем правой кнопкой мыши и выберите в появившемся контекстном меню пункт New Table (Новая таблица), либо нажмите кнопку New на панели инструментов, которая в этом случае будет ассоциироваться именно с таблицей. После этого появляется окно, в котором можно определять параметр таблицы (рис. III.9).
188
Мартьянова А.Е. Базы данных и знаний
Рис. III.9. Окно для определения столбцов таблицы
При создании нового столбца необходимо для него определить тип данных. Это может быть как любой системный, так и созданный вами. Тип данных определяется с помощью раскрывающегося списка столбца Data Type (Тип данных). Использование списка гарантирует выбор допустимого типа данных. На основании выбранного типа автоматически определяется параметр Length (Длина), а также устанавливается флажок Allow Nulls (Допускаются значения NULL). Установка этого флажка позволяет игнорировать отсутствие значения в столбце; в рассматриваемом примере для столбцов «Количество студентов» и «Средний балл при поступлении» этот флажок установлен, а для столбца «Код группы» – нет. Помимо имени столбца и его типа данных, здесь же можно определить и некоторые другие параметры: • Description – описание назначения столбца. • Default Value – значение по умолчанию, записываемое в столбец, если для него не задано никакое конкретное значение. • Precision (Точность) и Scale (Масштаб) – позволяют определить параметры представления чисел с плавающей точкой. • Identity – этот флажок может быть установлен только при создании. Он означает, что при добавлении в таблицу строки не нужно вводить никакого значения в столбец, поскольку значения для него вводятся автоматически путем сложения значения предыдущей строки со значением инкремента, указанного параметром Identity Increment. Значение для первой строки также задается при создании таблицы параметром 188
Мартьянова А.Е. Базы данных и знаний
189
Identity Seed. Это свойство можно определять только для столбца, тип данных которого int, smallint, tinyint, decimal (p, 0) или numeric (p, 0), кроме того, должен быть сброшен флажок Allow Nulls. В таблице этот параметр можно установить только для одного столбца. Сам по себе параметр Identity не гарантирует уникальности строк. Для обеспе чения такой гарантии, для столбца с этим параметром необходимо установит уникальный индекс. • Is RowGuid – говорит о том, что столбец используется как глобальный уникальный идентификатор (globally unique identifier, GUID) для строк; тип данных при этом должен быть uniqueidentifier; обратите также внимание на добавленное автоматически значение по умолчанию – функцию newid (). • Formula – значение, которое будет подставляться в столбец, вычисляется по заданной формуле. Следует иметь в виду, что при задании формулы для расчета значения в столбце, соответствующее поле становится недоступным для ввода данных пользователем. •Collation – для столбцов, содержащих строковые данные, позволяет выбрать язык и режимы сравнения и сортировки (рис. III.10).
Рис. III.10. Диалоговое окно установки параметров сравнения строк
190
Мартьянова А.Е. Базы данных и знаний
Для того чтобы удалить столбец из таблицы, нужно выделить его, щелкнуть на нем правой кнопкой мыши и в появившемся контекстном меню выбирать команду Delete Column (Удалить столбец), либо просто нажать клавишу Delete на клавиатуре. Необходимо тщательно продумать структуру таблицы, прежде чем приступать к ее созданию. Это позволит избежать трудностей после ее заполнения и организации связей с другими таблицами. После завершения разработки таблицы для ее сохранения нажмите кнопку со значком дискеты. Появится диалоговое окно (рис. III.11), где необходимо задать имя созданной таблицы.
Рис. III.11. После задания структуры таблицы SQL Server запрашивает ее имя
В таблице должен быть определен по крайней мере один столбец. Всего может быть определено до 1024 столбцов. Кроме этого, имеется ограничения на длину строки, которая не может превышать 8060 байт. Новой таблице, при ее создании, выделяется дисковое пространство размером в один экстент (extent). Один экстент равен восьми (8) страницам, каждая и которых имеет размер 8 Кбайт (2 Кбайт в SQL Server 6.5). Когда таблица заполняет пространство выделенного для нее экстента, к ней автоматически присоединяются дополнительные экстенты. Это происходит до того момента, пока выделенное пространство не станет равным общему размеру базы данных, после чего происходит увеличение файла базы данных. Предопределенные типы данных Одним из важных моментов в процессе создания таблицы является определение типов данных для столбцов. Тип данных (datatype) – это первая характеристика, которая задается для столбца таблицы, при этом определяется тип хранящейся в столбце информации. Тип данных задается после имени столбца с помощью соответствующего ключевого слова. Кроме этого, может потребоваться ввод некоторых параметров. Тип данных столбца таблицы, после того
190
Мартьянова А.Е. Базы данных и знаний
191
как он определен, хранится в виде постоянной характеристики столбца и не может быть изменен. Основные сведения о встроенных в систему типах данных, которые можно использовать в SQL Server 2000 при определении таблиц и сохраненных процедур приведены в табл. III.2 [6]. Таблица III.2. Системные типы данных SQL Server 2000
Тип данных 1 bigint
binary[(n)]
bit
Описание
Сколько занимает
2 Восьмибайтное целое число (полное це- 8 байт лое) Двоичные данные фиксированной длины, состоящие из п байтов, где п может принимать значение от 1 до 8000. Тип binary следует применять, когда предполагается, что элементы данных, хранимые в колонке, будут иметь примерно одинаковый размер Целый тип данных, которые могут иметь значения 1, 0 или NULL. Колонки типа bit не могут иметь индексов
места 3
n + 4 байта
1 байт для таблиц с 8-битными колонками, 2 байта для таблиц с колонками от 9 до 16 бит и т.д.
char[(n)]
Символьные данные (не в кодировке Uni- n байт code) фиксированной длины, имеющие длину п символов, где п может принимать значение от 1 до 8000
cursor
Ссылка на курсор. Может применяться только для переменных и параметров хранимых процедур
datetime
Дата и время от 1 января 1753 года до 31 8 байт декабря 9999 года, с точностью 3.33 миллисекунды
192
Мартьянова А.Е. Базы данных и знаний Продолжение таблицы III.2
1 2 decimal f(p,[s])] Числа фиксированной точности и фиксиили nu- рованного масштаба. (Тип данных numeric является синонимом типа данных meric[(p,[s])] decimal.) Точность р определяет общее количество цифр, которые могут храниться в числе, и слева, и справа от десятичной точки. Масштаб s определяет максимальное количество цифр, которые могут храниться справа от десятичной точки. Масштаб не может быть больше точности. Минимальная точность равна 1, а максимальная равна 28, если только SQL Server не был запущен с параметром -р, тогда максимальная точность равна 38 Числовые данные с плавающей точноfloat[(n)] стью, которые могут находиться в диапазоне от –1.79x10+308 до 1.79x10+308. Параметр n определяет количество битов, применяемых для хранения мантиссы числа с плавающей точкой и может иметь значение от 1 до 53 Применяется для двоичных данных пеimage ременной длины, большей, чем 8000 байт (максимально до 231-1 байт). Элемент данных, хранящийся в колонке типа image, является указателем на местоположение данных типа image. Эти данные хранятся отдельно от данных в таблицах Целочисленные данные (полное целое) от integer или int -231 (-2 147 483 648) до 231-1 (2 147 483 647) Данные для денежных величин от -263 (money 922337203685477.5808) до 263-1 (922 337 203 685 477.5807), с точностью до одной десятитысячной доли от денежной единицы Символьные данные в кодировке Unicode nchar[(n)] фиксированной длины, имеющие длину п символов, где п может принимать значение от 1 до 4000. Кодировка Unicode применяют по 2 байта на один символ данных и поддерживает все символы, имеющиеся в мире
192
3 от 5 до 17 байт в зависимости от точности
от 4 до 8 байт, в зависимости от точности
16 байт для указателя
4байта 8 байт
2 байта помножить на количество введенных символов
Мартьянова А.Е. Базы данных и знаний
193 Продолжение таблицы III.2
1 ntext
nvarchar
real
smalldatetime
smallint smallmoney
sql_variant
sysname
2 Данные в кодировке Unicode переменной длины, максимальной длиной до 230-1 (1 073 741 823) символов. Элемент данных, хранящийся в колонке типа ntext, является указателем на место- положение самих данных. Эти данные хранятся, отдельно от данных в таблицах Данные в кодировке Unicode переменной длины, длиной до n символов, где n может принимать значение от 1 до 4000. Помните, что для одного символа в кодировке Unicode потребуется 2 байта; кодировка Unicode поддерживает все символы, имеющиеся в мире Числовые данные с плавающей точностью, которые могут находиться в диапазоне от 3.40x10+38 до 3.40x10+38. Синонимом для типа real является float(24) Данные для даты и времени от 1 января 1900 года до 6 июня 2079 года, с точностью до одной минуты (точность меньше, чем у типа данных datatime) Целочисленные данные от-215 (-32768) до 215-1 (32767) Данные для денежных величин от214748.3648 до 214 748.3647 (922 337 203 685 477.5807), с точностью до одной десятитысячной доли от денежной единицы Позволяет использовать значения различных типов данных. В колонке хранятся значения и данные, описывающие эти значения - основной тип данных, масштаб, точность, максимальный размер и данные для сравнения Специальный поддерживаемый системой пользовательский тип данных SQL Server. Данные, имеющие тип sysname определяются в SQL Server как nvarchar(128), это означает, что они могут содержать 128 символов в кодировке Unicode (или 256 байтов). Пользуйтесь типом данных sysname для колонок, содержащих имена объектов
3 16 байт для указателя и по 2 байта помножить на количество символов, введенных для данных 2 байта помножить на количество введенных символов
4 байта
4 байта
2 байта 4 байта
Зависит от объема данных
256 байт
194
Мартьянова А.Е. Базы данных и знаний Окончание таблицы III.2
1
2 Аналогично использованию временной table таблицы - такое объявление типа содержит список колонок и типов данных. Может применяться для задания локальных переменных или для возвращения результатов функций, определенных пользователем Применяется для символьных данных text переменной длины не в кодировке Unicode, длиной более 8000 байт. Элемент данных с типом text может содержать до 231-1 символов. Это - указатель на местоположение данных, которые хранятся отдельно от данных таблицы Колонка с типом timestamp («метка вреtimestamp мени») автоматически обновляется всякий раз при вставке или при изменении строки. Каждая таблица может иметь только одну колонку типа timestamp Целочисленные данные в диапазоне от 0 tinyint до 255 unique-identifier Хранит 16-байтной двоичное значение, являющееся глобальным уникальным идентификатором (GUID) Двоичные данные переменной длины, varbinary состоящие из п байтов, где п может принимать значение от 1 до 8000. Применяйте тип varbinary, если предполагаете, что элементы данных, хранимые в колонке, будут сильно отличаться по своим размерам Данные переменной длины не в кодировvarchar[(n)] ке Unicode, длиной в п символов, где п может принимать значение от 1 до 8000
3 Зависит от определения таблицы
16 байт для указателя
8 байт
1 байт 16 байт Фактическая длина введенных данных плюс 4 байта
Фактическая длина введенных данных
Ниже по [15] приведены сведения о работе с предопределенными типами данных. Числовые целые типы данных Числовые целые (numeric integer) типы данных позволяют хранить целые числа, над которыми можно напрямую (без использования функций) производить арифметические операции. Число, хранящееся как целое, всегда занимает один и тот же объем памяти, независимо от значения числа. Имена типов данных, например, tinyint, чувствительны к регистру
194
Мартьянова А.Е. Базы данных и знаний
195
символов. •Тип int, или integer – это первый из четырех целых типов данные Вы можете хранить отрицательные или положительные целые числа диапазоне от -(231) до (231) – всего около 4,3 миллиарда чисел из диапазона от -2 147 483 648 до 2 147 483 647. Каждое значение типа integer занимает 4 байта, причем 31 бит используется для числа, а 1 бит – для знака. •Тип smallint – это второй целый тип данных. Число этого типа занимает 2 байта, причем 15 бит используется для числа, и один бит – для знака. Соответственно можно хранить числа из диапазона от -32 768 до +32 767. •Тип tinyint позволяет хранить только целые положительные числа в диапазоне от 0 до 255. Каждое значение типа tinyint занимает 1 байт. •Тип biqint позволяет хранить отрицательные или положительные целые числа в диапазоне от -(263-1) (-9223372036854775808) до (263) (9223372036854775807). Каждое значение этого типа занимает 8 байт. SQL Server автоматически определяет допустимость вводимых значений для каждого типа данных. Если вам не нужны большие целые значения, то пользуйтесь данными типа tinyint или smallint, которые занимают, соответственно, лишь четверть и половину того пространства, которое потребовалось бы данным типа int. Числовые типы данных с плавающей точкой Числовые типы данных с плавающей точкой (floating point) – это вторая группа числовых типов данных, которые могут использоваться для определения сохраняемых структур, таких как столбцы таблиц. В отличие от целых типов данных, в качестве значений с плавающей точкой могут храниться десятичные числа. К сожалению, для типов данных с плавающей точкой характерна ошибка округления (rounding error). Хранение значений в виде данных числового типа, для которого характерна ошибка округления, имеет смысл только в том случае, если количество хранящихся цифр соответствует заданной точности. Например, если заданная точность определена в пятнадцать цифр, а число, которое необходимо сохранить, длиннее, то введенные пятнадцать цифр будут представлять исходное число неточно. Кроме этого, числа с плавающей точкой могут искажать результаты вычислений. Ошибка округления действует на наименее значимые, то есть крайние справа разряды. Имеет смысл для хранения чисел выбирать
196
Мартьянова А.Е. Базы данных и знаний
такой тип данных с плавающей точкой, который соответствует заданной точности. Microsoft называет типы данных с плавающей точкой приблизительными числовыми типами данных (approximate numeric datatypes), поскольку значения таких типов могут быть представлены только с некоторой точностью, определяемой механизмом хранения. Следует избегать сравнений (например, в предложениях WHERE) данных приблизительных типов. Тип real (вещественный). Значения этого типа хранятся в четырех байтах. Вы можете хранить положительные или отрицательные десятичные дроби как данные типа real с точностью до семи цифр. В столбце, определенном как real, числа хранятся в диапазоне от 3.4Е-38 до 3.4Е+38. Диапазон значений и их представление на самом деле сильно зависят от платформы, на которой установлен SQL Server. Следует помнить, что SQL Server произошел от Sybase SQL Server. На каждой из компьютерных систем, для которых была написана версия Sybase, тип данных real различается по диапазону доступных символов и их реальному представлению. Например, диапазон десятичных чисел, хранящихся в OpenVMS на компьютерах Digital VAX, находится в границах от 0.29Е38 до 1.7Е+38. Операционная система, на которой базируется SQL Server, может быть установлена на Intel, MIPS, PowerPC и Alpha AXP. Следует рассматривать ранее указанные границы диапазона от 3.4Е-38 до 3.4Е+38 как приблизительные и проверять реальный диапазон доступных чисел для типа данных с плавающей точкой, который в системе Windows NT занимает 4 байта. Следует также иметь в виду, что данные, хранящиеся как числа с плавающей точкой, при переносе между различными платформами Windows NT с различными архитектурами процессоров, могут потребовать конвертирования для компенсации отличий в представлении и диапазоне значений. Тип float[(n)]. Данные этого типа, если не задано значение параметра n, хранятся в 8 байтах. Вы можете хранить положительные или отрицательные десятичные числа как данные типа float с точностью до пятнадцати цифр. В столбце, определенном как float, числа хранятся в диапазоне от 1.7Е-308 до 1.7Е+308. Если значение параметра n указано в диапазоне от одного до семи, то фактически таким образом определяется тип данных real. Если значе-
196
Мартьянова А.Е. Базы данных и знаний
197
ние параметра n указано в диапазоне от восьми до пятнадцати, то тип данных имеет те же характеристики, что и float без параметра n. Числовые типы данных фиксированной точности Типы данных decimal[(p[,s])] (десятичный) и numeric[(p[,s])] (числовой). В отличие от типов float и real, позволяют хранить десятичные числа без потерь точности. Общая точность и количество цифр после десятичной точки за даются аргументами р и s. Значения лежат в диапазоне от -1038- 1 до 1038. При этом для хранения используются от 2 до 17 байтов. Аргумент р предназначен для определения общего количества цифр слева и справа от десятичной точки. Аргумент s, который должен быть меньше либо равен р, предназначен для определения количества цифр справа от десятичной точки. Если аргумент р не указан, по умолчанию он равен 18. Аргумент s по умолчанию равен 0. Ниже показано количество байт, которое выделяется в зависимости от заданной точности (значения аргумента р). Выделенные Точность Выделенные Точность байты байты 2 1-2 10 20-21 3 3-4 11 22-24 4 5-7 12 25-26 5 8-9 13 27-28 6 10-12 14 29-31 7 13-14 15 32-33 8 15-16 16 34-36 9 17-19 17 37-38 Символьные типы данных Символьные (character) типы данных часто применяются для определения столбцов таблицы и других структур базы данных. Символьные типы данных позволяют хранить более широкий набор символов, чем числовые типы данных, поскольку допускают хранение букв, а также числовых и специальных символов, например ? или >. При загрузке в область хранения, такую как столбец таблицы, символьные данные вводятся в одинарных или двойных кавычках. Тип char(n). При хранении данных этого типа для каждого символа используется один байт. Число n, заключенное в круглые скобки, определяет размер области хранения каждого значения столбца и максимальное количество символов в нем. Например, если вы определили для столбца таблицы тип char(16), то длина любого значения столбца не
198
Мартьянова А.Е. Базы данных и знаний
должна превышать 16 байтов, что позволяет хранить до 16 символов. Если вы введете значение меньшее, чем 16 символов, SQL Server добавит пробелы после последнего символа, чтобы общая длина равнялась 16. Тип данных char(n) позволяет хранить в поле столбца до 8 Кбайт символов. Следует помнить, что любое поле столбца всегда cодержит заданное количество символов. SQL Server автоматически добавляет пробелы в конец символьного значения для заполнения всего заданного пространства. Если тип данных столбца определен как char, но допускается вводить значение NULL, оно будет трактоваться системой как имеющее тип данных varchar. Тип varchar(n). Для хранения строк переменной длины, не превышающей 8 Кбайт символов, можно использовать тип varchcar. В отличие от типа данных char, размер области хранения для данных типа varchar меняется в соответствии с фактическим количеством символе хранящихся в каждом столбце таблицы. Например, если вы определяете столбец таблицы как varchar (16), максимальное число символов, которое может храниться в этом столбце таблицы равно 16. Однако никаких пробелов в конец введенного значения SQL Server не добавляет. Этот тип данных можно использовать для экономии дискового пространства, когда хранящиеся в столбце значения имеют разную длину. Тип text. Используется для хранения больших объемов текстовой информации. Символы, хранящиеся в текстовых полях, обычно могут напрямую выводиться на устройство отображения, такое как монитор или принтер. Допускается размер данных этого типа – от 1 до 8 Кбайт. Данные хранятся в виде строк (не путать со строками таблицы) символов фиксированной длины, и на начальном этапе для них выделяется 8 Кбайт памяти. Дополнительные 8 Кбайт добавляются динамически по мере необходимости и данные связываются вместе. Страницы данных размером 8 Кбайт логически, но не обязательно физически, непрерывны. При использовании инструкции INSERT для вставки данных в столбец, определенный для данных типа text, они должны быть заключены в одинарные кавычки. Если вы определяете текстовый столбец, в котором допускаются значения NULL, то при вставке с использованием инструкции INSERT в этот столбец значения NULL, в целях экономии памяти страница размером 8 Кбайт не выделяется. Однако любая инструкция UPDATE выделит по крайней мере одну страницу размером 8 Кб для каждого поля тексто198
Мартьянова А.Е. Базы данных и знаний
199
вого столбца, независимо от того, указано в столбце какое-либо значение или нет. Типы данных nchar(n), nvarchar(n) и ntext. Новые типы данных, введенные в SQL Server 7, которые используются для хранения строк в специальной кодировке UNICODE, где для хранения символов используется 16 бит, или 2 байта, а не один байт, как в коде ASCII. Соответственно, размер данных снижается в два раза по сравнению с традиционными типами данных char, varchar и text и ограничивается значением 4 Кбайт. При работе с символьными типами данных необходимо соблюдать следующие важные правила: • Когда для столбца таблицы определяется тип данных char, varchar или text, максимальная длина задается для всех значений, которые впоследствии будут введены в этот столбец. SQL Server автоматически усекает каждый набор символов, который больше максимально допустимой длины и не извещает вас о сокращении длины набора символов. • При применении типа данных char недостающие символы заменяются пробелами так, чтобы заполнить все выделенное для хранения поля пространство. Если вы ссылаетесь на данные этого типа в отчетах, получающиеся столбцы могут оказаться неровными. Если дополнительные пробелы становятся проблемой, используйте в своих запросах специальные инструкции для оформления данных или храните значения как данные типа varchar. В полной мере сказанное относится и к типам данных nchar, nvarchar и ntext. Типы данных для хранения даты и времени Типы данных datetime и smalldatetime. Типы данных datetime и smalldatetime используются для хранения даты и времени. Гораздо удобнее хранить дату и время в формате одного из предназначенных для этого типов данных, а не в виде строки символов. Если вы храните дату и время таким образом, то их проще выводить на экран, поскольку SQL Server автоматически придает им привычный формат. Для этих типов данных можно также использовать специальные функции обработки значений типа дата и время. Если же хранить дату и время как значения типа char или varchar, или как один из числовых типов данных, то при выводе на экран их формат окажется далеко не тем, к которому мы привыкли. Тип datetime. Позволяет определить для хранения в столбце таблицы дату и время, начиная от 1/1/1753 нашей эры и заканчивая 12/31/9999 нашей эры.
200
Мартьянова А.Е. Базы данных и знаний
Общий объем памяти для хранения значения типа datetime равен восьми байтам. SQL Server использует первые четыре байта для хранения числа _ней после или перед базовой датой 1 января 1900 года. Отрицательное значение представляет собой количество дней до базовой даты, а положительное – после. Время хранится во вторых четырех байтах как число миллисекунд после полуночи. Значения типа datetime хранятся с точностью 1/300 секунды (3,33 миллисекунды) и округляются в сторону уменьшения. Например, значение в одну, две или три миллисекунды хранится как ноль миллисекунд, значения от четырех до шести миллисекунд хранятся как три миллисекунды. Для отображения значений, хранящихся в виде данных типа datetime, по молчанию используется формат МММ DD YYYY hh:mmAM/PM, например, Sер 23 1949 11:14РМ. При употреблении значений типа datetime в инструкции INSERT или любой другой, их надо заключать в одинарные кавычки. Допускается ввести сначала дату, а потом время, или наоборот, поскольку SQL Server может отличить одно значение от другого и сохранить все так, как нужно. При вводе значения типа datetime для даты можно использовать как верхний, так и нижний регистры, а также вставлять один или более пробелов между месяцем, числом и годом. Если вы вводите только время, по умолчанию устанавливается дата 1 января 1900 года. Если вы вводите только дату, по умолчанию устанавливается время 12 часов ночи. Если вы пропустите дату и время, по умолчанию устанавливается 1 января 1900 года 12 часов ночи. Дату можно ввести тремя разными способами. Каждый из форматов даты распознается SQL Server, и значение сохраняется правильно. Можно ввести дату с помощью либо аббревиатуры месяца, либо полного имени месяца. Запятую между числом и годом можно ставить, а можно и не ставить. Если пропустить часть года, обозначающую век, то декада, меньшая пятидесяти, будет представлена с двадцать первым веком, а декада, большая пятидесяти – с двадцатым. Например, если вы ввели год как значение 49, будет сохранено значение 2049; если же вы ввели год как значение 94, будет сохранено значение 1994. Если вы хотите, чтобы век отличался от установленного по умолчанию, необходимо ввести год полностью. Кроме этого, год необходимо вводить полностью в том случае, если в дате пропущено число. Если вы вводите дату без числа, по умолчанию это значение будет равно первому числу. 200
Мартьянова А.Е. Базы данных и знаний
201
Если SQL Server был инсталлирован с поддержкой US_English Language, значения типа datetime по умолчанию выводятся на экран в следующем порядке: месяц, число, год. С помощью команды set dateformat этот порядок можно изменить. Дату можно вводить в следующих форматах: • Sep 23 1949 • SEP 23 1949 • September 23 1949 • sep 1949 23 • 1949 sep 23 • 1949 23 sep • 23 sep 1949 Числовой формат значений типа datetime позволяет в качестве разделителя между различными блоками данных ставить слэш (/), дефис (-) или точку (.). В числовом формате разделитель ставится между месяцем, числом и годом, которые вводятся в порядке, заданном командой set dateformat. Если порядок ввода значений типа datetime нарушен, значения месяца, дня или года будут неправильно интерпретированы и сохранены, а в случае выхода любого из этих значений за рамки допустимого диапазона появится сообщение об ошибке. Ниже приведены примеры ввода различных значений типа datetime в числовом формате. Порядок ввода, определенный с помощью команды set dateformat, следующий: месяц, число, год. SQL Server был инсталлирован с поддержкой US_English Language: • 1 6/24/71 • 06/24/71 • 6-24-1971 • 6.24.1971 • 06.24.71 Последний из возможных форматов ввода даты и времени для типа данных datetime представляет собой либо непрерывное значение, состоящее из четырех, шести или восьми цифр, либо время без значения даты. На этот формат команда set date format не влияет. Если вы вводите непрерывное значение из шести или восьми цифр, оно всегда интерпретируется как год, месяц, число. Значения месяца и числа всегда интерпретируются как состоящие из двух цифр каждое. Непрерывное значение из четырех цифр интерпретируется как год. По
202
Мартьянова А.Е. Базы данных и знаний
умолчанию устанавливаются текущий век, первый месяц года и первое число этого месяца. Ниже приведены примеры возможных интерпретаций введенных символов для типа datetime. Введенные символы Эквивалентное представление 710624 June 24, 1971 19710624 June 24, 1971 1971 January 1, 1971 71 “ January 1, 1900 12:00 A.M. При работе с датой и временем помните, что когда в качестве значения вы вводите в столбец пустую строку, а столбец определен для данных типа datetime, вы не получите значение NULL, как можно было бы ожидать. Когда в качестве значения типа datetime для даты или времени вы вводите два апострофа без каких-либо символов между ними, SQL Server всегда сохраняет значение January 1, 1900 12:00 A.M. Время должно вводиться в следующем порядке: часы, минуты, секунды и миллисекунды. В качестве разделителя между блоками времени используется двоеточие. Двоеточие необходимо, чтобы распознать вводимые цифры как время, а не как дату. Чтобы указать время до или время после полудня, нужно ввести соответственно AM или РМ в верхнем или нижнем регистре. Этого не требуется, если вы используете региональные установки. Перед заданием блока миллисекунд можно ставить точку или двоеточие, которые влияют на интерпретацию этого блока. Одно число, идущее после точки, обозначает десятые доли секунды; два числа интерпретируются как сотые доли секунды; три числа интерпретируются как тысячные доли секунды. Двоеточие указывает, что последующие числа должны быть интерпретированы как тысячные доли секунды. Приведем различные интерпретации введенного значения времени в значении типа datetime. Введенное значение времени 11:21 11:21:15:871 11:21:15.8 6am 7 PM 05:21:15:500AM
Интерпретация 11 ч 21 мин после полудня 11 ч 21 мин 15 с и 871 мс после полудня 11 ч 21 мин 15, и 8 с после полудня 6 ч после полудня 7 ч до полудня 5 ч 21 мин 15 с 500 мс после полудня
202
Мартьянова А.Е. Базы данных и знаний
203
Тип smalldatetime. Это второй тип данных даты и времени, с помощью которого можно определять структуры хранения данных, такие как столбцы таблицы. В формате этого типа данных вы можете хранить дату и время, начиная от 1/1/1900 нашей эры и заканчивая 6/6/2079 нашей эры. Общий размер области хранения для типа данных smalldatetime занимает 4 байта. SQL Server использует 2 байта для хранения числа дней после базовой даты (1 января 1900 года). Время хранится в другой паре байтов в виде количества минут после полудня. Точность для данных типа smalldatetime равна одной минуте. В отличие от значений типа datetime, значения типа smalldatetime имеют меньшие диапазон и точность. Использование данных типа smalldatetime вместо datetime при хранении значений даты и времени позволяет получить двойную экономию памяти. Специальные типы данных Перечисленные типы данных используются для хранения до 90% всей информации. Но в некоторых случаях возникает необходимость в более адаптированных решениях. Например, вам может понадобиться хранить только такие данные, которые представлены как «истина» или «ложь», «да» или «нет». Поскольку это является стандартным бинарным условием, вероятно, имеет смысл создать для таких значений специальный тип данных. Другой пример: хранение набора данных, имеющего размер, превышающий 8 Кбайт – максимально допустимый размер для обыкновенного символьного типа данных. Поэтому помимо перечисленных основных, Transact-SQL содержит набор специальных типов данных: Тип bit. Используется для хранения информации, которая имеет два возможных состояния: ноль или единица. Данные типа bit хранятся в одном бите. Если в структуру хранения данных типа bit, такую как столбец таблицы, ввести любое значение, отличное от нуля или единицы, то сохранится единица. Тип данных bit не допускает использования значения NULL. Хотя в документации SQL Server это напрямую не утверждается, но тип данных bit соответствует булевому типу в других языках программирования и баз данных. С помощью одного байта можно задать до восьми столбцов таблицы, определенных для данных типа bit. Пространство, выделяемое для
204
Мартьянова А.Е. Базы данных и знаний
нескольких столбцов в одном байте, не обязательно должно быть непрерывным. Если в таблице для данных типа bit вы определите 9 столбцов, то для всех этих столбцов будет выделено 2 байта. SQL Server записывает информацию о столбцах, определенных для данных типа bit, в системную таблицу syscolumns, в которой в столбце status хранятся смещения этих столбцов. Столбец, определенный для данных типа bit, не может быть индексом. Тип timestamp. Если вы определяете столбец таблицы для данных типа timestamp, то сразу же после вставки новой или обновления существующей строки в столбце этого типа автоматически добавляется значение счетчика. Непосредственно ввести значение в столбец с этим типом данных невозможно. Увеличивающееся значение счетчика может быть вставлено в такой столбец только самой системой SQL Server. Вставленное системой SQL Server в столбец значение счетчика идентифицирует последовательность операций, которые выполнил SQL Server. Значения в столбце типа timestamp хранятся в формате varbinary(8), а не в формате datetime или smalldatetime. По умолчанию в столбцах типа timestamp допустимы значения NULL. Значение типа timestamp не является датой или временем, но внутри таблицы или базы данных оно всегда уникально. В таблице можно определить только один столбец для данных этого типа. Тип данных timestamp часто используется для уникальной идентификации строки. Когда вы обновляете поля в строке, существует общая практика упоминать столбец, определенный как timestamp, в предложении WHERE инструкции UPDATE. В этом случае гарантируется, что инструкция UPDATE обновит только одну строку таблицы. Вы можете быть уверены в уникальности значения типа timestamp, поскольку сервер поддерживает и обновляет его всякий раз, когда вы вставляете новую или обновляете существующую строку. Данные типа timestamp используются как часть предложения WHERE для предотвращения одновременного обновления одной и той же строки двумя пользователями, поскольку при выполнении для строки инструкции WHERE значение данных типа timestamp меняется автоматически. Вы можете быть уверены, что не обновите чью-либо чужую информацию. Если кто-то еще изменяет строку, над которой вы сейчас работаете, то при сохранении им обновленной информации поле timestamp изменится и строка не будет больше соответствовать вашей копии. Когда вы выполните команду UPDATE для сохранения ваших изменений, предложение WHERE не даст вам этого сделать, поскольку команда 204
Мартьянова А.Е. Базы данных и знаний
205
не найдет выбранную вами строку. Данные типа timestamp – это прекрасное средство для поддерживания сервером уникальности каждой строки. Если вы присвоили столбцу имя timestamp, но не указали тип данных, то для него устанавливается тип данных timestamp. Используя глобальную системную переменную @@dbts, можно отобразить текущее значение поля типа timestamp, которое относится к очередному значению счетчика обновляемой или новой строки. Для ссылки на глобальную переменную @@dbts можно использовать инструкцию SELECT: SELECT @@dbts. Тип binary(п) можно использовать для хранения битовых образов (bit patterns) размером не более 8 Кбайт. С помощью указанного в круглых скобках целого числа (n) определяется длина всего битового образа. Размер поля столбца типа binary (двоичного) не может быть меньше одного байта, но при этом допускается хранение битового образа, целиком состоящего из нулей. Вводимое шестнадцатеричное значение должно начинаться символами 0х. Для них используются символы от 0 до 9 и от А до F. Например, для ввода значения А0, с учетом начальных символов 0х, получим формат 0хА0. Если вы вводите значение, длина которого превышает длину, определенную вами для полей столбца, оно будет усечено. Кроме этого, значения дополняются нулями после последней значащей цифры. Тип varbinary(n) можно использовать для хранения битовых образов размером не более 8 Кбайт. С помощью указанного в круглых скобках целого числа определяется длина всего битового образа. Размер поля этого двоичного столбца не должен быть меньше одного байта, но при этом допускается хранение битового образа, целиком состоящего из нулей. В отличие от данных типа binary, размер поля для данных типа varbinary ограничен только реальной длиной значения. Как и в типе данных binary, перед двоичным значением ставятся символы 0х. Для бинарных данных используются символы от 0 до 9 и от А до F. Если вы вводите значение, которое больше определенной вами длины поля столбца, оно будет усечено. Тип image позволяет при необходимости хранить большое количество символьной или двоичной информации (образы). Допускается хранить свыше 8 Кбайт данных этого типа. Предварительное выделение достаточного количества памяти для данных типа image расточительно,
206
Мартьянова А.Е. Базы данных и знаний
поэтому заранее выделяется только его часть. Оставшаяся память выделяется динамически. Тип данных image иногда используют для вставки в строку объектов OLE (Object Linking and Embedding, связывание и внедрение объектов), таких, например, как документы Word, электронные таблицы Excel, графические файлы GIF и JPEG. Данные хранятся в виде строк фиксированной длины и на начальном этапе для них выделяется 8 Кбайт памяти. Дополнительные 8 Кбайт добавляются динамически по мере необходимости, и данные связываются вместе так же, как для текстовых столбцов. Страницы данных размером в 8 Кбайт непрерывны логически, но не обязательно физически. Значения, которые хранятся как данные типа image, при использовании инструкции SELECT отображаются точно так же, как значения любых других столбцов. Количество отображаемых байтов ограничено значением глобальной переменной @@Textsize, которое по умолчанию равно 8 Кбайт. В столбце, определенном для данных типа text или image, можно разрешить значения NULL, и для такого значения страница памяти размером 8 Кбайт не выделяется (но только до тех пор, пока для строки, в которой имеется значение NULL, не выполнена операция UPDATE). Данные типа image при их отображении с помощью инструкции SELECT не транслируются автоматически в символы ASCII. Данные столбца образов не предназначены для прямого вывода на экран. Они могут быть переданы для обработки перед отображением другой программе, возможно, запущенной в системе клиента. Для работы с данными типа image имеется несколько ограничений. С их помощью можно определять только столбцы таблицы, но нельзя определять другие структуры хранения данных, такие как локальные переменные или параметры. Слишком большие объемы данных типа image, которые могут храниться в столбцах таблицы, делают этот тип данных неподходящим для многих инструкций Transact-SQL. Нельзя упоминать столбец, определенный для этого типа данных, в предложении ORDER BY, GROUP BY или COMPUTE. SQL Server не будет пытаться сортировать или группировать строки таблицы, содержащие столбцы, в которых может находиться более четырех миллиардов байт данных. Для перемещения такого количества информации пришлось бы выделять слишком большие объемы памяти.
206
Мартьянова А.Е. Базы данных и знаний
207
Ниже приведены некоторые правила, о которых необходимо помнить при создании запроса. • Недопустимы столбцы, определенные для данных типа image, в структуре UNION, если только это не UNION all. • Недопустим подзапрос, который возвращает значение типа image. • Столбцы, определенные для данных типа image, недопустимы в предложении where или having, если не используется оператор сравнения like. • Недопустимо объявление distinct, за которым следует столбец таблицы, определенный для данных типа image. • Недопустим индекс, первичный или внешний ключ столбцов, определенных для данных типа image. Для хранения значений денежных единиц в SQL Server реализованы два специальных типа данных: Тип money позволяет хранить значения денежных единиц. Данные типа money состоят из целой и дробной частей, хранящихся в виде двух целых значений, занимающих по 4 байта каждое. Точность значений типа money равна одной десятитысячной денежной единицы. Некоторые инструменты, специально предназначенные для представления денежных значений, отображают значения типа money округленными до ближайшей сотой доли. Тип smallmoney предназначен для хранения более ограниченного, чем в типе данных money, диапазона значений денежных единиц. Значения, которые можно хранить как данные типа smallmoney, хранятся в 4 байтах в виде целой и дробной частей. Как и значения типа money, значения типа smallmoney отображаются при помощи некоторых специальных инструментов округленными до ближайшей сотой доли. Хранение денежных значений в виде данных типа smallmoney вместо данных типа money ведет к двойной экономии памяти. Перед значением, добавляемым в столбцы таблицы, определенные для данных типа money или smallmoney, необходимо указывать символ доллара ($) или другой знак, определенный для конкретной денежной единицы. Тип sysname совпадает с типом данных varchar(30), однако используется для определения столбцов данных в системных таблицах и не допускает значений NULL. С помощью типа данных sysname нельзя определять столбцы вашей таблицы – используйте для этого тип данных varchar (30) или какой-либо ваш собственный.
208
Мартьянова А.Е. Базы данных и знаний
Тип uniqueldentifier. Состоит из 16-байтного шестнадцатеричного числа, представляющего собой глобальный уникальный идентификатор (Globally Unique Identification, GUID). Этот тип данных удобно использовать для обеспечения уникальности строк таблицы. В SQL Server 2000 появились еще два новых типа данных – sql_variant и table. Тип sql_variant. Этот тип данных подобен типу variant, используемому в Microsoft Visual Basic, и позволяет в одном столбце, параметре или переменной хранить значения различных типов данных. При его использовании следует руководствоваться следующими правилами: • Объекты типа sql_variant могут использоваться для хранения любых типов данных кроме text, ntext, image и timestamp. Ну и, естественно, самого типа sql_variant. • Столбцы с этим типом данных могут использоваться в индексах и уникальных ключах. • Для столбцов с типом данных sql_variant не поддерживается свойство IDENTITY, но столбцы могут входить в первичный или внешний ключ. • Столбцы с этим типом данных не могут использоваться в рассчитываемых столбцах. Если вы определили для столбца тип данных sql_variant, то уже не сможете изменить его на другой тип. Тип table. Подобен временной таблице и может использоваться для хранения результирующего набора для последующей обработки. Этот тип данных может использоваться только в качестве локальной переменной или возвращаемого значения в определенных пользователем функциях. Определение переменной этого типа должно включать определение столбцов, и типов данных с сопутствующими характеристиками – все как для обычной таблицы. Область применения этого типа данных ограничивается операторами SELECT и INSERT, а также – если он поддерживается – в операторах UPDATE, DELETE и DECLARE CURSOR. Типы данных, определяемые пользователем Можно определить собственный тип данных, который затем будет использоваться для сохраняемых структур, таких как столбцы таблицы [6]. Тип данных, определенный пользователем (user-defined), или просто пользовательский, всегда формируется на основе одного из существующих системных типов данных. Если необходимо, пользовательский тип данных может включать в себя спецификацию длины и характеристику NULL. 208
Мартьянова А.Е. Базы данных и знаний
209
Для пользовательского типа данных лучше использовать описательное имя информацией о системном типе данных, на основе которого он создается. Для определения пользовательского типа данных с помощью Enterprise Manager проделайте следующие действия: 1. Раскройте дерево баз данных щелчком мыши на значке + рядом с папкой \Databases. Выберите мышью базу данных. Пользовательский тип данных может быть создан только в выбранной базе данных. 2. Выделите папку \User Defined Datatypes и нажмите кнопку New на панели инструментов. 3. В поле Name (Имя) диалогового окна User-Defined Data Type Properties (Свойства пользовательского типа данных) введите имя типа данных. 4. В списке Data type (Тип данных) выберите один из системных типов данных, а в поле Length (Длина) задайте его длину, если это поле не заблокировано. Другими словами, это следует сделать, если выбран тип данных binary, char, decimal, nchar, numeric, nvarchar, varbinary или varchar. Вы можете также разрешить ввод значения NULL, применить предварительно определенное правило и установить значение по умолчанию. 5. Для того чтобы завершить процесс создания типа данных, нажмите кнопку OK. На рис. III.12 показано диалоговое окно, которое позволяет создавать пользовательские типы данных.
210
Мартьянова А.Е. Базы данных и знаний
Рис. III.12. Диалоговое окно создания пользовательского типа данных
Для удаления пользовательского типа данных необходимо выделить его в окне SQL Server Enterprise Manager и нажать кнопку Delete (Удалить) на панели правления. В результате на экран будет выведено диалоговое окно Drop Objects (Удаление объектов) с запросом на удаление (рис. III.13). Невозможно удалить пользовательский тип данных, если в какойлибо таблице (или таблицах) есть столбец, определенный для данных этого типа. Удалить пользовательский тип данных можно только в том случае, если он не используется ни в одной таблице. В противном случае на экран выводится окно с сообщением об ошибке.
210
Мартьянова А.Е. Базы данных и знаний
211
Рис. III.13. Диалоговое окно Drop Object
Как правильно выбрать тип данных Недопустимо называть объекты именами команд или использовать для этой цели другие зарезервированные слова. Типы данных – это полноценные объекты базы данных, которые хранятся в системной таблице systypes вместе с их кодовыми значениями. Для отображения типов данных и их кодовых значений (в столбце type) можно использовать инструкцию SELECT. При создании таблиц важно правильно выбрать типы данных для каждой из колонок. Наверное, вы хотели бы, чтобы позволялось хранить нужные данные, но не разрешалось хранить недопустимые данные (например, символьное значение в колонке для числовых данных). Эта забота и решается благодаря типам данных. При выборе типа данных вам полезно ответить на два следующих вопроса: • Подходит ли этот тип данных для вашей разновидности данных? • Какой тип данных следует использовать – с фиксированной либо с переменной длиной? Выбор подходящего типа данных является довольно понятным процессом. Данные, которые будут вводиться в колонку, должны соответствовать типу данных, заданному для этой колонки. Поэтому вам следует выбрать такой тип данных, который лучше всего охватит диапазон значений, которые могли бы храниться в колонке для всего срока эксплуатации вашего приложения, и в то же время стремясь ограничить не-
212
Мартьянова А.Е. Базы данных и знаний
нужный расход места на диске. Ненужный расход места на диске – это место на диске, выделенное для элементов данных, хранящихся в колонке, но не используемое. Например, предположим, у вас есть колонка, в которой нужно хранить одно целое число в диапазоне от 1 до 100. Очевидно, что эти значения могут храниться в типе integer, но каждое целое число типа integer занимает 4 байта. Данные с типом tinyint могут хранить значения от 0 до 255 и для них нужен только 1 байт места. В данном случае tinyint будет наилучшим выбором, потому что это экономит место на диске, необходимое для хранения данных из таблиц. Затем вы должны определить, какой тип данных следует использовать – с фиксированной либо с переменной длиной. Если все значения данных из колонки будут иметь приблизительно одинаковые размеры, то более эффективным станет применение типа данных с фиксированной длиной, так как обработка данных, имеющих типы переменной длины, вызывает повышенную нагрузку. Вообще говоря, типы данных с переменной длиной следует применять, только если вы предполагаете значительные различия в длине данных, хранимых в данной колонке, и когда данные из колонки обновляются редко. К данным с переменной длиной относятся varchar, nvarchar, varbinary, text, ntext и image. Применение типов данных с переменной длиной может привести к значительной экономии места для хранения данных. Например, если вы зададите тип данных с фиксированной длиной, достаточной для хранения значений в колонке с наибольшей возможной длиной, то для всех значений, занимающих меньше места, истратится столько же места, как и для этого самого объемного значения. Результатом этого станут огромный ненужный расход места на диске, потому что лишь немногие строки будут расходовать все максимально допустимое место для данных. В большинстве строк будет использовано меньше места, а все неиспользуемое место станет потерянным. А если вы зададите, что будет примениться тип данных с переменной длиной, то короткие значения будут расходовать лишь то место, которое им действительно нужно. Но опять-таки, применение типов данных с переменной длиной повышает нагрузку на процессор. Поэтому, если вам требуется тип данных с переменной длиной, то применяйте тип данных с фиксированной длиной. Если из соображений расходования места для хранения данных нужно применять тип данных с переменной длиной, то, конечно, применяйте его. Итак, как же выбрать нужные для ваших таблиц типы данных и их длины? Следуйте уже принятым ранее основным решениям и делайте выбор, который наилучшим образом будет соответствовать потребно212
Мартьянова А.Е. Базы данных и знаний
213
стям вашего приложения. Вообще говоря, определяясь с размерами колонок таблиц, старайтесь не тратить зря место на диске и не забывайте о потребностях в будущем.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Опишите назначение языка DDL (Data Definition Language). 2. Опишите два аспекта целостности базы данных – на уровне отдельных объектов и на уровне базы данных в целом. 3. Сформулируйте определение транзакции. 4. Опишите назначение журнала транзакций. 5. Перечислите виды конфликтов между транзакциями. 6. Перечислите самые распространенные SQL-серверы. 7. Опишите процесс создания базы данных и журнала транзакций в СУБД SQL Server 2000. 8. Опишите процесс удаления базы данных в СУБД SQL Server 2000. 9. Опишите процесс создания таблиц в СУБД SQL Server 2000. 10. Перечислите основные предопределенные (системные) типы данных, используемые в СУБД SQL Server 2000. 11. Как создать пользовательский тип данных в СУБД SQL Server 2000? 12. Найдите соответствие основных типов данных Access и СУБД SQL Server 2000 (см. табл. II.1 работы VI). Подготовьте сравнительную характеристику для основных типов данных. ЗАДАНИЕ на проектирование БД «Учебный процесс» в СУБД SQL Server 2000 1. Создайте БД и журнал транзакций БД «Учебный процесс». 2. Создайте по описанию таблицу «ГРУППА» БД «Учебный процесс» с использованием системных типов данных. 3. Самостоятельно создайте таблицы «СТУДЕНТ», «КАФЕДРА», «ПРЕПОДАВАТЕЛЬ», «ПРЕДМЕТ», «УЧЕБНЫЙ ПЛАН» и «УСПЕВАЕМОСТЬ» БД «Учебный процесс» с использованием соответствующих системных типов данных. Предполагается, что SQL Server уже запущен, и для наших целей воспользуемся SQL Server Enterprise Manager (Пуск/Программы/Microsoft SQL Server/ Enterprise Manager).
214
Мартьянова А.Е. Базы данных и знаний
Работа XII. MS SQL Server. Таблицы. Заполнение БД Проверьте тип данных всех созданных в предыдущей работе таблиц: «СТУДЕНТ», «КАФЕДРА», «ПРЕПОДАВАТЕЛЬ», «ПРЕДМЕТ», «УЧЕБНЫЙ ПЛАН» и «УСПЕВАЕМОСТЬ» БД «Учебный процесс» (см. табл. III.3 – III.9). Установите правильно значение «Allow Nulls» на поля таблиц. Ниже будет показано, как установить ключи, индексы и проверочные условия на значения соответствующих полей таблиц. Таблица III.3. Описание свойств полей таблицы ГРУППА Name Field
Код группы Обозначение группы Количество студентов Средний балл в группе при поступлении
Set Primary Key Да
Data Type
Length
Allow Nulls
Indexes
smallint 2 varchar 8
Нет Нет
Да
tinyint
1
Да
real
4
Да
Check Constraints
>=0 And <=35 >2 And <5 Or 0
Таблица III.4. Описание свойств полей таблицы СТУДЕНТ Name Field
Код студента Код группы Номер зачетной книжки Фамилия Имя Отчество Год рождения Адрес Домашний телефон Балл при поступлении
Set Primary Key Да Foreign
Data Type
Length
Indexes
Allow Nulls
int smallint varchar
4 2 10
Да
Нет Нет Нет
varchar varchar varchar smallint varchar varchar
15 15 15 2 25 10
Нет Да Да Да Да Да
real
4
Да
214
Мартьянова А.Е. Базы данных и знаний
215
Таблица III.5. Описание свойств полей таблицы КАФЕДРА Name Field
Код кафедры Название кафедры Телефон Заведующий Фото
Set Primary Key Да
Data Type
Length
Indexes
Allow Nulls
smallint varchar
2 20
Да
Нет Нет
varchar varchar image
10 15 16
Да Да Да
Таблица III.6. Описание свойств полей таблицы ПРЕПОДАВАТЕЛЬ Name Field
Код преподавателя Код кафедры Табельный номер Фамилия Имя Отчество Домашний адрес Домашний телефон Должность Ученая степень Ученое звание
Set Primary Key Да
Data Type
Length
Indexes
Allow Nulls
smallint
2
Да
Нет
Foreign
smallint varchar
2 10
Нет Нет
varchar varchar varchar varchar
15 15 15 25
Нет Да Да Да
varchar
10
Да
varchar varchar varchar
15 15 10
Да Да Да
Таблица III.7. Описание свойств полей таблицы ПРЕДМЕТ Name Field
Код предмета Название предмета Программа
Set Primary Key Да
Data Type
Length
Indexes
Allow Nulls
smallint varchar
2 20
Да
Нет Нет
text
16
Да
216
Мартьянова А.Е. Базы данных и знаний
Таблица III.8. Описание свойств полей таблицы УЧЕБНЫЙ ПЛАН Name Field Код учебного плана Код преподавателя Код предмета Часы
Set Primary Data Key Type Да smallint
Length
2
Allow Nulls Нет
Foreign
smallint
2
Нет
Foreign
smallint
2
Нет
smallint
2
Да
Вид занятия Семестр Вид сдачи
varchar
10
Да
tinyint
1
Да
varchar
10
Да
Indexes
Check Constraints
Да
>0 And <=300
Таблица III.9. Описание свойств полей таблицы УСПЕВАЕМОСТЬ Name Field
Set Primary Data Key Type
Lengt h
Allow Nulls
Код студента Код учебного плана Оценка
Foreign
4
Нет
Дата сдачи
int Да
Foreign
Indexes
Check Constraints
Да smallint
2
Нет
tinyint
1
Да
smalldatetime
4
Да
216
>=0 <=5
And
Мартьянова А.Е. Базы данных и знаний
217
Создание и использование условий на значения столбцов Условия на значения столбцов (constraints) определяются для обеспечения целостности данных в таблицах и отдельных столбцах. Инструкция CREATE TABLE дает возможность создавать первичные и внешние ключи, определять уникальные столбцы и строки, а также указывать проверочные (check) и устанавливаемые по умолчанию (default) условия на значение столбца. Условие на значение столбца PRIMARY KEY Условие на значение столбца PRIMARY KEY (первичный ключ) используется для обеспечения уникальности данных в заданных столбцах и в целом для обеспечения ссылочной целостности. Определение условия PRIMARY KEY для таблицы устанавливает определенные условия на значение первичного ключа, что гарантирует уникальность всех строк таблицы. Это делается путем запрещения ввода одинаковых значений в один столбец (или в несколько столбцов). Кроме того, условие на значение первичного ключа запрещает ввод значений NULL в столбец или столбцы, для которых оно определено. PRIMARY KEY создает для столбца, указанного в условии, уникальный индекс, позволяющий реализовать более быстрое считывание строк в таблице. Определение условия PRIMARY KEY в одной таблице само по себе не обеспечивает ссылочной целостности. Необходимо также определить соответствующие внешние ключи для других таблиц, строки которых будут комбинироваться со строками таблицы, где определено условие PRIMARY KEY. Установить это условие очень просто – выберите нужный столбец и нажмите кнопку Set primary key (Установить первичный ключ) на панели инструментов окна проектирования таблицы. В результате этих действий в крайнем левом столбце появится значок «ключа», показывающий, что для выбранного вами столбца «Код группы» определено условие PRIMARY KEY (рис. III.14).
218
Мартьянова А.Е. Базы данных и знаний
Рис. III.14. Определение условия PRIMARY KEY для одного столбца таблицы
В случае, когда необходимо определить условие PRIMARY KEY для нескольких столбцов таблицы, например таблицы «УСПЕВАЕМОСТЬ», последовательность действий будет иной: 1. Нажмите кнопку Manage Indexes/Keys (Управление индексами/ключами) на панели инструментов окна Design Table имя_таблицы, в результате чего на экране появится диалоговое окно Properties (Свойства), в котором необходимо выбрать вкладку Indexes/Keys (Индексы/Ключи), представленную на рис. III.15. 2. Теперь в полях Column Name (Имя столбца) выберите имена тех столбцов, которые вы хотите включить в первичный ключ. После закрытия этого диалогового окна условие на значение PRIMARY KEY будет установлено для всех заданных столбцов. Обратите внимание на флажок Create as CLUSTERED, который позволяет определять тип индекса – кластеризованный или некластеризованный MS SQL Server. Кластеризованный индекс таблицы (или представления) – в котором логический порядок значений ключа совпадает с физическим порядком хранения данных в таблице (или представлении). Иными словами, кластеризованный индекс определяет физический порядок, в котором данные хранятся в таблице (или в представлении) [8].
218
Мартьянова А.Е. Базы данных и знаний
219
Рис. III.15. Вкладка Indexes/Keys диалогового окна Properties
Некластеризованный индекс – в уотором столбцы хранятся в порядке, отличном от физического порядка данных (противоположен кластеризованному индексу). Определение условия PRIMARY KEY может быть осуществлено и через кнопку Set primary key при одновременном выделении всех полей, входящих в первичный ключ таблицы (рис. III.16). После чего следует через кнопку Manage Indexes/Keys (Управление индексами/ключами) в диалоговом окне Properties (Свойства), на вкладке Indexes/Keys (Индексы/Ключи) просмотреть устанавливаемые параметры.
220
Мартьянова А.Е. Базы данных и знаний
Рис. III.16. Определение условия PRIMARY KEY для нескольких столбцов таблицы
Условие на значение столбца FOREIGN KEY Условие на значение FOREIGN KEY (внешний ключ) применяется вместе с ранее определенным условием PRIMARY KEY в ассоциированной таблице. Условие на значение FOREIGN KEY ставит в соответствие один или несколько столбцов таблицы идентичному набору столбцов другой таблицы, для которых определено условие на значение PRIMARY KEY. При обновлении значений тех столбцов таблицы, для которых определено условие PRIMARY KEY, автоматически обновляются значения столбцов других таблиц, для которых определено условие FOREIGN KEY. Условия на значения PRIMARY KEY и FOREIGN KEY обеспечивают совпадение строк ассоциированных таблиц, поэтому они могут быть использованы в последующих объединениях. Автоматическое обновление соответствующих столбцов в различных таблицах после того, как для них определены условия на значения столбцов PRIMARY KEY и FOREIGN KEY, называется декларативной ссылочной целостностью (declarative referential integrity). Эта характеристика была добавлена к SQL Server еще в версии 6.0. Соответствующие столбцы, для которых определены условия на значения PRIMARY KEY и FOREIGN KEY, не обязательно должны иметь одно и то же имя. Хотя обычно используются именно одинаковые для обоих столбцов имена, чтобы было более понятно, какие именно 220
Мартьянова А.Е. Базы данных и знаний
221
столбцы связаны между собой. Для определения условия на значение FOREIGN KEY необходимо раскрыть закладку Relationships диалогового окна Properties и указать значения первичного и внешнего ключей (рис. III.17). Следует особо отметить появление в SQL Server 2000 двух флажков: Cascade Update Related Fields (Каскадное обновление связанных полей) и Cascade Delete Related Records (Каскадное удаление связанных записей). Теперь разработчик не должен заботиться о создании, например, триггеров, чтобы отследить модификацию данных в связанных таблицах, как это приходилось делать даже в SQL Server 7, не говоря уже о более ранних версиях.
Рис. III.17. Вкладка Relationships диалогового окна Properties
222
Мартьянова А.Е. Базы данных и знаний
Уникальное условие на значение столбца Для того чтобы запретить повторение значений в любом столбце таблицы, можно применить на значения этого столбца условие уникальное (unique). Важно помнить, что столбец, для которого определено подобное условие на значение, не может быть первичным ключом или частью первичного ключа таблицы. Связано это с тем, что уникальное условие на значение столбца реализуется посредством автоматического создания уникального индекса для столбца таблицы. На рис. III.18 показан пример уникального индекса для таблицы «СТУДЕНТ», который автоматически устанавливается на столбцы PRIMARY KEY (см. табл. III.4).
Рис. III.18. Вкладка Indexes/Keys диалогового окна Properties
222
Мартьянова А.Е. Базы данных и знаний
223
Проверочное условие на значение столбца Проверочное (check) условие на значение устанавливает диапазон значений, которые могут быть введены в один или несколько столбцов таблицы базы данных, например, в столбец, определенный для данных числовых типов. Процесс «введения» проверки в столбец таблицы называется связыванием (binding). Вы можете определить и ввести несколько проверок в один столбец. Проверка может быть определена для столбца даже в том случае, если для него уже существует какое-либо правило. В примере на рис. III.19 определено проверочное условие на значение для столбца Количество студентов таблицы «ГРУППА», и теперь попытка ввести в поле значение, лежащее вне указанного диапазона, приведет к ошибке (рис. III.20).
Рис. III.19. Определение проверочного условия на значение
224
Мартьянова А.Е. Базы данных и знаний
Рис. III.20. Сообщение об ошибке при попытке ввести в поле значение лежащее за пределами установленного ограничения
Может показаться, что проверочное и прочие условия на значение дублируют функции других механизмов SQL Server. Это действительно так. Версия 6.0 SQL Server изменена разработчиками Microsoft таким образом, чтобы язык Transact-SQL соответствовал стандарту ANSI для SQL. Хотя Transact-SQL уже имел средства для выполнения некоторых операций, например, правила или установки по умолчанию, синтаксис, пришедший в Transact-SQL из ANSI SQL, добавляет альтернативные способы. Условие на вводимые в столбец значения, можно задать тем способом, который кажется вам самым удобным. Например, вместо определения правила и связывания его со столбцом – ограничить диапазон введенных в столбец значений с помощью проверочного условия на значение. Тем не менее, необходимо изучить все механизмы, поскольку один из них может подходить для вашего конкретного случая больше, чем другой. Проверочные условия на значение работают быстрее и устанавливаются проще, однако правила являются более гибкими и могут быть связаны со столбцами нескольких таблиц. Например, правило может оказаться более удобным в тех случаях, когда вы собираетесь определять диапазон допустимых значений для столбцов нескольких таблиц. Условие на значение столбца по умолчанию Некоторые замечания к условию на значение столбца по умолчанию (default), Это условие используется для автоматического ввода в столбец таблицы значения, если при вставке строки оно не указано. Имеет смысл установить подобное условие равным наиболее часто используемому внутри данного столбца значению, что освободит пользователя от необходимости каждый раз указывать это значение при вставке в таблицу новой строки (рис. III.21).
224
Мартьянова А.Е. Базы данных и знаний
225
Рис. III.21. Установка условия на значение столбца по умолчанию
Добавление данных к таблице С появлением SQL Server 7 процесс добавления данных значительно упростился. Эта тенденция, естественно, сохранилась и в SQL Server 2000. Теперь не надо каждый раз набирать инструкцию INSERT и вводимые в соответствующие столбцы таблицы значения, как это требовалось в SQL Server 6.5. Достаточно щелкнуть правой кнопкой мыши на интересующей нас таблице и в появившемся контекстном меню выбрать команду Open Table\Return All Rows (Открыть таблицу\Возвратить все строки) или команду Open Table\Return Top (Открыть таблицу\Возвратить первые строки). Результат выполнения первой команды иллюстрируется на рис. III.22.
Рис. III.22. Отображение данных таблицы «ГРУППА»
226
Мартьянова А.Е. Базы данных и знаний
Теперь для того чтобы ввести в таблицу новое значение, необходимо просто перейти к строке, отмеченной звездочкой (*), и начать вводить требуемые значения в соответствующие столбцы. В столбец с установленным свойством identity нельзя самим вводить какое-либо значение. После того как введены все новые строки, необходимо зафиксировать этот факт в базе данных, для чего требуется выполнить команду Run, нажав, например, одноименную кнопку на панели инструментов окна Data in Table имя_таблицы. Аналогичную операцию необходимо проделать при обработке и модификации данных. Для того чтобы удалить какую-либо строку таблицы, достаточно выделить ее, нажать правую кнопку мыши и выполнить команду Delete (Удалить) контекстного меню, или аналогичную клавишу на клавиатуре.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Что такое условие на значение столбца PRIMARY KEY? 2. Как установить условие на значение столбца PRIMARY KEY? 3. 4. 5. 6. 7. 8. 9. 10.
Что такое условие на значение столбца FOREIGN KEY? Как установить условие на значение FOREIGN KEY? Что такое уникальное условие на значение столбца? Что такое проверочное условие на значение столбца? Как установить проверочное условие на значение столбца? Что такое условие на значение столбца по умолчанию? Как установить условие на значение столбца по умолчанию? Как добавить данные к таблице?
ЗАДАНИЕ на проектирование БД «Учебный процесс» в СУБД SQL Server 2000 1. Проверьте тип данных всех созданных таблиц «ГРУППА», «СТУДЕНТ», «КАФЕДРА», «ПРЕПОДАВАТЕЛЬ», «ПРЕДМЕТ», «УЧЕБНЫЙ ПЛАН» и «УСПЕВАЕМОСТЬ» БД «Учебный процесс» по табл. III.3 – III.9. Установите правильно значение «Allow Nulls» на поля таблиц. 2. Установите первичные и внешние ключи во всех таблицах БД «Учебный процесс». 3. Установите проверочные условия на соответствующие поля 226
Мартьянова А.Е. Базы данных и знаний
227
таблиц БД «Учебный процесс». 4. Установите условие на значение столбца по умолчанию на поле Адрес таблицы «СТУДЕНТ» БД «Учебный процесс». 5. Заполните все таблицы данными, приведенными в табл. III.10 – III.16. Таблица III.10. Данные для заполнения полей таблицы ГРУППА Код группы
Обозначение группы
Количество дентов
1 2
ДФД-31 ДФД-32
25 26
сту- Средний балл в группе при поступлении 4,75 4,2
Таблица III.11. Данные для заполнения полей таблицы СТУДЕНТ Код группы
Номер Фазачетминой лия книжки
Имя Отчество
Год рождения
1001
1
ДФД-301
Иван
1987
4,2
1002
1
ДФД-302
1987
4,7
1003
2
ДФД-331
1987
4,5
1004
2
ДФД-332
1987
4
Иванов Петров Сидоров Никановров
Петр Сидор Ника нор
Иванович Петрович Сидорович Никанорович
Адрес
Домашний телефон
Балл при поступлении
Код студента
Таблица III.12. Данные для заполнения полей таблицы КАФЕДРА Код кафедры
101 102
Название ка- Телефон федры Информатика 25-25-25 Математика 25-52-25
Заведующий
Алмазов А.А. Токарев Т.Т.
Фото
228
Мартьянова А.Е. Базы данных и знаний
Таблица III.13. Данные для заполнения полей таблицы ПРЕПОДАВАТЕЛЬ Код преподавателя
Код кафедры
Табельный номер
Фамилия
Имя От- Дочемашство ний адрес
10001
101
INF001
Алмазов
Алмаз
10002
102
MAT -001
Соколов
Сокол
Домашний телефон
Алмазович Соко лович
Должность
Ученая степень
Ученое звание
проф.
д-р техн. наук
проф.
асс.
Таблица III.14. Данные для заполнения полей таблицы ПРЕДМЕТ Код предмета
Наименование предмета
20001 20002
Информатика Математика
Программа
Таблица III.15. Данные для заполнения полей таблицы УЧЕБНЫЙ ПЛАН Код учебного плана 5001 5002 5003 5004 5005 5006 5007 5008
Код преподавателя 10001 10001 10001 10001 10002 10002 10002 10002
Код Часы предмета
Вид за- Семестр Вид нятия сдачи
20001 20001 20001 20001 20002 20002 20002 20002
лекц. лаб. лекц. лаб. лекц. практ. лекц. практ.
100 100 100 100 100 100 100
228
1 1 2 2 1 1 2 2
зачет экзамен допуск экзамен допуск экзамен допуск
Мартьянова А.Е. Базы данных и знаний
229
Таблица III.16. Данные для заполнения полей таблицы УСПЕВАЕМОСТЬ Код студента
1001 1001 1001 1001 1001 1001 1001 1001 1002 1002 1002 1002 1002 1002 1002 1002 1003 1003 1003 1003 1003 1003 1003 1003 1004 1004 1004 1004 1004 1004 1004 1004
Код учебного пла- Оценка на 5001 5002 5003 5 5004 5005 4 5006 5007 5 5008 5001 5002 5003 4 5004 5005 4 5006 5007 3 5008 5001 5002 5003 5 5004 5005 5 5006 5007 5 5008 5001 5002 5003 3 5004 5005 3 5006 5007 3 5008
Дата сдачи
25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05 25.12.04 07.06.05 05.06.05 14.01.05 09.01.05 11.06.05 05.06.05
Теперь нужно поближе познакомиться с языком баз данных Transact-SQL, на котором основывается вся работа в SQL Server и без знания которого невозможно будет написать приложение для работы с базами данных, что будет сделано нами в следующей работе.
230
Мартьянова А.Е. Базы данных и знаний
Работа XIII. MS SQL Server. Диаграммы. Запросы к БД. Представления Прежде чем приступить к работе с запросами, необходимо проверить правильность установленных нами реляционных связей между таблицами БД «Учебный процесс»; это можно сделать средствами объекта Database Diagrams [6]. Выделите в списке объектов БД «Учебный процесс» Diagrams и нажмите кнопку New на панели инструментов. Результат представлен на рис. III.23.
Рис. III.23. Первое окно мастера диаграмм
Нажмите кнопку Next (Далее), чтобы начать процесс создания новой диаграммы. Выделите с помощью клавиши клавиатуры Shift в списке таблиц БД «Учебный процесс» таблицы «ГРУППА», «КАФЕДРА», «ПРЕДМЕТ», «ПРЕПОДАВАТЕЛЬ», «СТУДЕНТ», «УСПЕВАЕМОСТЬ», «УЧЕБНЫЙ ПЛАН» и, используя кнопку Add, включите в диаграмму все эти таблицы, а затем Next для перехода к следующему окну мастера (рис. III.24). В следующем окне мастера нажмите кнопку Next, поскольку сейчас не важно, как будут упорядочены таблицы в диаграмме. Заключительное окно мастера диаграмм еще раз показывает, какие именно таблицы были выбраны для включения в диаграмму (рис. III.25). 230
Мартьянова А.Е. Базы данных и знаний
231
Рис. III.24. Второе окно мастера диаграмм
Рис. III.25. Третье окно мастера диаграмм
Нажмите кнопку Finish, и мастер диаграмм создаст для вас диаграмму (рис. III.26).
232
Мартьянова А.Е. Базы данных и знаний
В диаграмме можно удалять, редактировать существующие или устанавливать новые связи между таблицами.
Рис. III.26. Правильно установленные связи между таблицами БД «Учебный процесс»
Для того чтобы удалить существующую связь, необходимо выделить ее с помощью указателя мыши и через контекстное меню, пункт «Delete Relationship from Database», используя кнопку OK, удалить существующую связь. Можно удалить связь, используя клавишу клавиатуры Delete. Например, удалите связь между таблицами «УСПЕВАЕМОСТЬ» и «УЧЕБНЫЙ ПЛАН». Для того чтобы добавить новую связь между таблицами, необходимо выделить ключевое поле главной таблицы и при нажатой левой кнопке перетащите курсор мыши на поле внешнего ключа подчиненной таблицы. После того, как вы отпустите кнопку мыши, на экран будет выведено диалоговое окно Create Relationship (Создать связь), уже знакомое нам из предыдущей работы. В этом диалоговом окне необходимо внимательно проверить список полей включаемых в связь (рис. III.27). 232
Мартьянова А.Е. Базы данных и знаний
233
После этого нажмите кнопку OK, в результате вновь появится линия, связывающая эти таблицы.
Рис. III.27. Уточнение параметров связи между таблицами
Обратите внимание на значки, расположенные по краям линии: символ ключа с одной стороны (со стороны таблицы «УЧЕБНЫЙ ПЛАН») говорит о том, что в таблице «УЧЕБНЫЙ ПЛАН» установлен первичный ключ, а символ «бесконечность» с другой стороны (со стороны таблицы «УСПЕВАЕМОСТЬ») – о том, что в таблице «УСПЕВАЕМОСТЬ» установлен внешний ключ, и каждому значению первичного ключа может соответствовать несколько значений внешнего ключа. С помощью правой кнопки мыши, используя контекстное меню Show Relationship Labels, можно показать подписи к связям между таблицами базы (рис. III.28).
234
Мартьянова А.Е. Базы данных и знаний
Рис. III.28. Установка подписей к связям между таблицами
Пункт контекстного меню Properties, вызванного на связи между таблицами, позволяет редактировать существующие связи. Диаграмма может быть сохранена со своим именем, например «DIAGRAM1». Язык Transact-SQL Взаимодействие с большинством реляционных баз данных, в частности с СУБД SQL Server, осуществляется посредством языка SQL или его диалекта. SQL – это, фактически, стандарт для операций с базами данных, поэтому любой разработчик приложений для работы с базами данных обязан знать хотя бы один (а лучше несколько) диалектов этого языка. Структурированный язык запросов (Structured Query Laguage, SQL) – это язык, разработанный корпорацией IBM в 1970 году. Он фактически стал стандартом в качестве языка реляционных баз данных. Диалект SQL, используемый в SQL Server, называется Transact-SQL и базируется на грамматике SQL-92. Transact-SQL добавляет к базовому языку SQL ключевые слова, позволяющие формировать инструкции выборки, а также сохранения данных и манипуляций над ними. При разработке диалекта SQL, применяемого в SQL Server фирма Microsoft добавила к нему дополнительные возможности и расширения, что делают и многие другие разработчики систем управления базами данных [15]. По сравнению с другими диалектами языка SQL, синтаксис Transact-SQL наиболее близок к стандарту. Этим он отличается, например, от диалекта SQL-PLUS, применяемого для реляционных баз данных Oracle, который имеет наиболее специфический дополнительный синтаксис. Как обычно, наличие большого набора уникальных выражений имеет свои плюсы и минусы. С одной стороны – это очень удобно и во 234
Мартьянова А.Е. Базы данных и знаний
235
многих случаях позволяет получить результат при минимальных затратах. С другой – использование синтаксиса, характерного только для конкретного диалекта, не позволяет переносить наборы команд SQL, хранимые на диске, и может вызвать наибольшие трудности при межсистемном переносе. Язык Transact-SQL можно характеризовать как оптимальный и строгий. Кроме того, имеется достаточный набор дополнений к базовому языку SQL, позволяющий формировать функциональные запросы. Можно также использовать инструкции Transact-SQL для создания таких объектов, как таблицы и представления (views), которые хранятся внутри баз данных. Таким образом, подобно всем другим языкам программирования (a SQL можно считать языком программирования баз данных), TransactSQL представляет собой набор инструкций (или операторов), правильное применение которых позволяет выполнить поставленную задачу. Query Analyzer Query Analyzer применяется для исполнения операторов или сценариев T-SQL из графического пользовательского интерфейса и для получения результатов в форматированном виде. Query Analyzer обладает также некоторыми средствами для анализа индексов запросов. Некоторые люди предпочитают применять Query Analyzer, a не запускать операторы в окне «приглашения MS-DOS». Для работы с Query Analyzer выполните следующие действия: • откройте Enterprise Manager и выберите SQL Query Analyzer в меню Tools; • в меню кнопки Start наведите указатель мыши сначала на Programs, затем на Microsoft SQL Server, а затем выберите Query Analyzer. Если вы не соединены с сервером, то появится диалоговое окно Connect to SQL Server (Соединиться с SQL Server) (рис. III.29). В ниспадающем списке SQL Server выберите сервер, с которым вы хотите соединяться. Точка, стоящая в этом поле, означает соединение с локальным сервером. Введите информацию для входа в систему. Флажок Start SQL Server if it is stopped устанавливается, если вы желаете, чтобы в случаях, когда SQL Server не запущен, он запускался бы автоматически (не устанавливать!). Затем нажмите на экранную кнопку OK. Появится стартовое окно Query Analyzer.
236
Мартьянова А.Е. Базы данных и знаний
Рис. III.29. Диалоговое окно Connect to SQL Server
В окне запросов введите с клавиатуры любой оператор Т-SQL или вызов хранимой процедуры, например «sp_who» (рис. III.30). Заметьте, что окно запросов на приведенном рисунке развернуто и занимает всё окно Query Analyzer.
Рис. III.30. Вызов хранимой процедуры в окне запросов
Чтобы выполнить введенный оператор, нажмите на кнопку Execute Query (Исполнить запрос), находящуюся на панели инструментов и выглядящую как зеленый треугольник, указывающий острием вправо, либо нажмите Ctrl+E. Результаты исполнения запроса появятся в панели результатов (рис. III.31). Эта процедура позволяет просматривать информацию об активных процессах.
236
Мартьянова А.Е. Базы данных и знаний
237
Рис. III.31. Query Analyzer показывает результаты исполнения запроса
В списке баз данных на панели инструментов выберите БД «Учебный процесс» и установите обращение к ней. С помощью панели инструментов установите один из способов вывода данных: • Results in Text, • Results in Grid, • Results To File…, например, вывод в таблицу (Results in Grid). В окне запросов введите с клавиатуры запрос на Т-SQL (рис. III.32):
Рис. III.32. Текст запроса на Т-SQL в окне запросов Query Analyzer
Выполните запрос, нажав на зеленый треугольник, находящийся на панели инструментов. Результатом будет таблица, представленная на рис. III.33.
238
Мартьянова А.Е. Базы данных и знаний
Рис. III.33. Вывод результата запроса в таблицу в Query Analyzer
Этот результат необходимо сохранить в формате «.sql», то есть в качестве сценария с названием «Клв_стд_грп.sql». Сценарий (script) – это просто файл, в котором содержатся операторы T-SQL, которые нужно запускать. В скрипте может быть как один оператор, так и последовательность операторов. Если нужно, чтобы Query Analyzer загрузил и исполнил созданный вами ранее T-SQL-сценарий, то нажмите на кнопку Load SQL Script на панели инструментов, выглядящую как желтая папка, или выберите команду Open в меню File, a затем найдите и укажите нужный файл со сценарием. Весь сценарий появится в верхней панели окна запросов. Для запуска сценария нажмите на кнопку Execute Query. В окне запросов введите с клавиатуры и выполните запрос на ТSQL (рис. III.34):
Рис. III.34. Вывод результата запроса в таблицу в Query Analyzer
Сохраните этот запрос как «Кд_прдмт.sql». В окне запросов введите с клавиатуры и выполните запрос на ТSQL (рис. III.35):
238
Мартьянова А.Е. Базы данных и знаний
239
Рис. III.35. Вывод результата запроса в таблицу в Query Analyzer
Сохраните этот запрос как «Клв_стд_грп_сч.sql». Этот запрос в отличие от предыдущего «Клв_стд_грп.sql» вычисляет действительное значение количества студентов в группе с помощью функции Count. Выполните следующие запросы: 1. Запрос «Заведующие кафедрами»
2. Запрос «План проведения занятий в группах» SELECT Группа.[Обозначение группы], Предмет.[Наименование предмета], Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Преподаватель.[Табельный номер], [Учебный план].Часы, [Учебный план].[Вид занятия], [Учебный план].Семестр FROM (Группа INNER JOIN Студент ON Группа.[Код группы] = Студент.[Код группы]) INNER JOIN (Преподаватель INNER JOIN (Предмет INNER JOIN ([Учебный план] INNER JOIN Успеваемость ON [Учебный план].[Код учебного плана] = Успеваемость.[Код учебного плана]) ON Предмет.[Код предмета] = [Учебный план].[Код предмета]) ON Преподаватель.[Код преподавателя] = [Учебный план].[Код преподавателя]) ON Студент.[Код студента] = Успеваемость.[Код студента] GROUP BY Группа.[Обозначение группы], Предмет.[Наименование предмета], Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Преподаватель.[Табельный номер], [Учебный план].Часы, [Учебный план].[Вид занятия], [Учебный план].Семестр ORDER BY Группа.[Обозначение группы], Предмет.[Наименование предмета], Преподаватель.Фамилия;
3. Запрос «Список студентов по группам» SELECT Группа.[Обозначение группы], Группа.[Количество студентов], Группа.[Средний балл в группе при поступлении], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Студент.[Год рождения], Студент.[Балл при поступлении] FROM Группа INNER JOIN Студент ON Группа.[Код группы]=Студент.[Код группы] ORDER BY Студент.[Номер зачетной книжки], Студент.Фамилия;
240
Мартьянова А.Е. Базы данных и знаний
4. Запрос «Список студентов группы ДФД-31» SELECT Группа.[Обозначение группы], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Студент.[Год рождения] FROM Группа INNER JOIN Студент ON Группа.[Код группы] = Студент.[Код группы] WHERE (((Группа.[Обозначение группы])='ДФД-31'));
5. Запрос «Список преподавателей по кафедрам» SELECT Кафедра.[Название кафедры], Кафедра.Заведующий, Преподаватель.[Табельный номер], Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Преподаватель.[Ученая степень], Преподаватель.[Ученое звание] FROM Кафедра INNER JOIN Преподаватель ON Кафедра.[Код кафедры] = Преподаватель.[Код кафедры] ORDER BY Кафедра.[Название кафедры], Преподаватель.[Табельный номер];
6. Запрос «Экзаменационная ведомость» SELECT Предмет.[Наименование предмета], Группа.[Обозначение группы], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Успеваемость.Оценка, Успеваемость.[Дата сдачи], [Учебный план].Семестр, [Учебный план].[Вид сдачи] FROM (Группа INNER JOIN Студент ON Группа.[Код группы]=Студент.[Код группы]) INNER JOIN (Преподаватель INNER JOIN (Предмет INNER JOIN ([Учебный план] INNER JOIN Успеваемость ON [Учебный план].[Код учебного плана]=Успеваемость.[Код учебного плана]) ON Предмет.[Код предмета]=[Учебный план].[Код предмета]) ON Преподаватель.[Код преподавателя]=[Учебный план].[Код преподавателя]) ON Студент.[Код студента]=Успеваемость.[Код студента] WHERE ((([Учебный план].[Вид сдачи])='экзамен' Or ([Учебный план].[Вид сдачи])='Зачет')) ORDER BY Предмет.[Наименование предмета], Группа.[Обозначение группы], Студент.Фамилия;
7. Запрос «Успеваемость студентов в группах по предметам у преподавателей» SELECT Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, Предмет.[Наименование предмета], Успеваемость.Оценка, [Учебный план].Семестр, Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество FROM (Группа INNER JOIN Студент ON Группа.[Код группы] = Студент.[Код группы]) INNER JOIN (Преподаватель INNER JOIN (Предмет INNER JOIN ([Учебный план] INNER JOIN Успеваемость ON [Учебный план].[Код учебного плана] = Успеваемость.[Код учебного плана]) ON Предмет.[Код предмета] = [Учебный план].[Код предмета]) ON Преподаватель.[Код преподавателя] = [Учебный план].[Код преподавателя]) ON Студент.[Код студента] = Успеваемость.[Код студента] GROUP BY Группа.[Обозначение группы], Студент.[Номер зачетной книжки], Студент.Фамилия, Студент.Имя, Студент.Отчество, [Учебный план].Семестр, Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество, Предмет.[Наименование предмета], Успеваемость.Оценка;
240
Мартьянова А.Е. Базы данных и знаний
241
Представления Представление – это виртуальная таблица, определяемая запросом, содержащим оператор SELECT [6]. Эта виртуальная таблица состоит из данных одной или нескольких реальных таблиц, а для пользователей представление выглядит, как реальная таблица. И действительно, с представлением можно работать, как с обычной таблицей. Пользователи могут обращаться к этим виртуальным таблицам в операторах Transact-SQL (T-SQL) таким же образом, как и к таблицам. К представлению можно применять операции SELECT, INSERT, UPDATE и DELETE. На самом деле представление хранится просто как заранее определенный оператор SQL. При доступе к представлению оптимизатор запросов SQL Server объединяет текущий выполняемый оператор SQL с запросом, который был использован для определения данного представления. Преимущество использования представлений заключается в том, что можно создавать представления с различными атрибутами без необходимости дублирования данных. Представления полезны в целом ряде ситуаций. Их полезно использовать для обеспечения безопасности данных, для упрощения презентации данных и для логической презентации данных. Их можно также использовать для слияния секционированных (partitioned) данных. Типы представлений Можно создавать несколько типов представлений, каждый из которых имеет свои преимущества в определенных ситуациях [6]. Тип представления, которое вы создаете, целиком зависит от цели, для которой вы хотите его использовать. Вы можете создавать представления в любой из следующих форм: • Подмножество колонок таблицы. Представление может состоять из одной или нескольких колонок таблицы. Видимо, это наиболее распространенный тип представления, который можно применять для упрощения или безопасности данных. • Подмножество строк таблицы. Представление может содержать любое нужное количество строк. Этот тип представления также полезен для обеспечения безопасности. • Связывание двух и более таблиц. Вы можете создать представление с помощью операции связывания (join). Сложные операции связывания можно упростить, если использовать для этого представление. • Агрегированная информация. Вы можете создать представление, содержащее агрегированные данные. Этот тип представления также ис-
242
Мартьянова А.Е. Базы данных и знаний
пользуется для упрощения сложных операций. Представления можно также использовать для объединения секционированных данных. Данные большой таблицы можно секционировать на несколько меньших таблиц, чтобы облегчить управление этими данными, а затем с целью упрощения доступа можно использовать представления для слияния этих таблиц в одну более крупную виртуальную таблицу. Преимущества представлений Одним из преимуществ использования представлений является то, что они всегда содержат самые свежие данные. Оператор SELECT, определяющий представление, выполняется только при доступе к этому представлению, поэтому все изменения, внесенные в базовые таблицы представления, отражаются в этом представлении. Еще одним преимуществом использования представлений является то, что представление может иметь уровень безопасности, отличный от его базовой таблицы. Запрос, определяющий представление, запускается с уровнем безопасности пользователя, создавшего это представление. Так, вы можете использовать представление, чтобы маскировать (скрыть) данные, которые вы не хотите показывать определенным классам пользователей. Ограничения представлений SQL Server налагает несколько ограничений на создание и использование представлений. Это следующие ограничения: • Ограничения по колонкам. Представление может использовать до 1024 колонок таблицы. Если вам требуется ссылка на большее число колонок, то придется использовать какой-либо другой метод. • Ограничение базы данных. Представление можно создать по таблице только в той базе данных, к которой осуществляет доступ создатель представления. • Ограничение безопасности. Создатель представления должен иметь доступ ко всем колонкам, входящим в это представление. • Правила целостности данных. Любые обновления, модификации и т.п., вносимые в представление, не могут нарушать правил целостности данных. Например, если базовая таблица не допускает null-значений, то они также не допускаются этим представлением. • Ограничение на количество уровней вложенности представлений. Представления могут формироваться на основе других представлений – иными словами, вы можете создать представление, имеющее доступ к другим представлениям. Допускается до 32 уровней вложенности 242
Мартьянова А.Е. Базы данных и знаний
243
представлений. • Ограничение оператора SELECT. Используемый для представления оператор SELECT не может содержать оператора ORDER BY, COMPUTE или COMPUTE BY или ключевого слова INTO. Создание представлений Представления можно создавать с помощью целого ряда способов. Вы можете создать представление с помощью оператора T-SQL CREATE VIEW. Этот метод предпочтительнее других, если существует вероятность, что вы будете создавать другие представления в будущем, поскольку вы можете помещать операторы T-SQL в файл сценария и затем редактировать и использовать этот файл снова. SQL Server Enterprise Manager поддерживает графическую среду, в которое вы можете создавать представление. И, наконец, вы можете использовать мастер создания представлений Create View Wizard, когда вам требуется помощь, чтобы пройти через процесс создания представления, что может оказаться полезным как для новичка, так и специалиста. Использование Enterprise Manager для создания представления В этом разделе мы будет использовать Enterprise Manager для создания представления в базе данных «Учебный процесс». Следующие шаги позволят вам пройти через этот процесс: 1. В окне Enterprise Manager раскройте папку Databases (Базы данных) для сервера, на котором находится база данных «Учебный процесс», и щелкните на «Учебный процесс». Информация по базе данных появится в правой панели окна. 2. Щелкните правой кнопкой мыши на «Учебный процесс» в левой панели. Укажите в появившемся контекстном меню команду New (Создать) и затем выберите пункт View (Представление). Появится окно New View (Создание представления). Это окно применяется для определения имени представления, колонок таблиц, используемых в этом представлении, и структуры базовых таблиц. Окно New View состоит из следующих четырех панелей: • Панель схемы (Diagram pane). Показывает данные таблицы, которые используются для создания представления. В этой панели можно выбирать колонки. • Панель-сетка (Grid pane). Показывает колонки, выбранные из таблицы или базовых таблиц. В этой панели можно выбирать колонки. • Панель SQL (SQL pane). Показывает оператор SQL, используемый для определения данного представления. SQL Server генерирует этот оператор SQL, когда вы перетаскиваете элементы панели схемы и выби-
244
Мартьянова А.Е. Базы данных и знаний
раете колонки в панели-сетке. • Панель результатов (Results pane). Показывает строки, считанные из представления. Эта информация позволяет вам понять, как выглядят данные. Вы можете задавать визуализацию этих панелей, щелкая на соответствующих кнопках в панели инструментов окна New View. Другие кнопки панели инструментов используются для некоторых важных функций. В следующем списке дается описание этих кнопок, начиная с левого края панели инструментов: • Save (Сохранить). Сохраняет данное представление. • Properties (Свойства). Позволяет вам изменять свойства данного представления. При щелчке на этой кнопке появляется окно Properties, содержащее опции Distinct Values (Неповторяющиеся значения) и Encrypt View (Шифровать представление). • Show/Hide Panes (Показать/Скрыть панели) – четыре кнопки. Позволяют вам показывать или скрывать четыре панели окна New View. • Run (Выполнить). Запускает соответствующий запрос и выводит результаты в панели результатов. Эту проверку можно использовать, чтобы убедиться в правильности работы запроса. • Cancel Execution And Clear Results (Прекратить выполнение и удалить результаты). Очищает панель результатов. • Verify SQL (Проверить SQL). Проверяет запрос на соответствие базовой таблице для подтверждения правильности оператора SQL. • Remove Filter (Удалить фильтр). Удаляет все определенные ранее фильтры. • Use GROUP BY (Использовать GROUP BY). Добавляет предложение GROUP BY к оператору в панели SQL. • Add Table (Добавить таблицу). Позволяет добавить какую-либо таблицу к запросу. 3. Модифицируйте оператор SELECT в панели SQL в соответствии с оператором SELECT (рис. III.32). Представление будет содержать колонки Обозначение группы и Количество студентов. Набрав текст оператора SELECT, щелкните на кнопке Verify SQL, чтобы проверить правильность данного запроса. Если это так, то вы должны щелкнуть на кнопке OK. в появившемся диалоговом окне, чтобы Enterprise Manager заполнил панель схемы и панель-сетку. Ваше окно New View будет выглядеть (рис. III. 36).
244
Мартьянова А.Е. Базы данных и знаний
245
Рис. III.36. Вид окна New View
4. Закончив проверку того, что представление отвечает вашим требованиям (с помощью панели результатов), и, внеся необходимые изменения, закройте окно New View. Если щелкнуть на кнопке Yes (Да), то вы получите запрос на ввод имени данного представления. Введите описательное имя вашего представления «Количество студентов в группах» и сохраните представление, щелкнув на кнопке OK. Ваше представление теперь доступно для использования. Вы можете использовать Enterprise Manager, чтобы задать свойства нового представления, включая полномочия доступа. Окно View Properties (Свойства представления) описывается ниже. Использование Enterprise Manager для изменения и удаления представлений Для изменения и удаления представлений с помощью Enterprise Manager выполните следующие шаги: 1. В окне Enterprise Manager раскройте папку Databases на нужном сервере, раскройте базу данных, содержащую представление, которое хотите удалить или изменить, и затем щелкните на Views (Представления), чтобы в правой панели этого окна появился список представлений. 2. Щелкните правой кнопкой мыши на имени представления, которое хотите модифицировать или удалить. Появится контекстное меню.
246
Мартьянова А.Е. Базы данных и знаний
Чтобы удалить представление, выберите в этом меню пункт Delete (Удалить). Чтобы изменить представление, выберите пункт Design View (Разработка представления). 3. Если выбран пункт Delete, то появится диалоговое окно Drop Objects (Удаление объектов). Щелкните на кнопке Show Dependencies (Показать зависимости), чтобы увидеть базовую структуру представления. Здесь вы можете видеть, от каких таблиц зависит представление. Если выбрано представление типа join (связывание) или union (объединение), то вы увидите все участвующие таблицы; если это представление по определенным колонкам или строкам, то вы увидите только одну таблицу. Когда вы будете готовы удалить выбранное представление, щелкните на кнопке Drop All (Удалить все) в диалоговом окне Drop Objects. Если в контекстном меню выбран пункт Design View, то появится окно Design View. Можно использовать окно Design View для модифицирования вашего представления таким же способом, что и при создании представления в окне New View. 4. После внесения необходимых изменений в представление закройте окно Design View, щелкнув на кнопке Close (Закрыть) этого окна. Затем вы получите предложение сохранить это представление.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Для каких целей может служить объект Database Diagrams? 2. Как создать объект Database Diagrams? 3. Как удалить связь между таблицами с помощью объекта Database Diagrams? 4. Как установить связь между таблицами с помощью объекта Database Diagrams? 5. Как изменить связь между таблицами с помощью объекта Database Diagrams? 6. Что означает аббревиатура SQL (Structured Query Language)? 7. Что такое Transact-SQL? 8. Для каких целей применяется Query Analyzer? 9. Как соединиться с локальным сервером в диалоговом окне Connect to SQL? 10. Перечислите способы вывода данных в Query Analyzer. 11. Что такое T-SQL-сценарий? 12. Вспомните формат команды SELECT: что означают предложения FROM, WHERE, GROUP BY, ORDER BY? 246
Мартьянова А.Е. Базы данных и знаний
247
13. Что означает предложение INNER JOIN? 14. Что такое представление? 15. Как можно, используя Enterprise Manager, создать, изменить и удалить представление в SQL Server? ЗАДАНИЕ на проектирование БД «Учебный процесс» в СУБД SQL Server 2000 1. Создайте объект Database Diagrams. 2. Проверьте существующие связи между таблицами БД «Учебный процесс» и измените их, если это необходимо. 3. Сохраните объект Database Diagrams с именем, например «DIAGRAM1». 4. Запустите Query Analyzer через меню кнопки Пуск/Программы/Microsoft SQL Server/Query Analyzer. 5. Выполните хранимую процедуру «sp_who». 6. Введите с клавиатуры запрос на Т-SQL «Количество студентов в группе», запросив к выводу поля «Код группы» и «Количество студентов». 7. Введите с клавиатуры запрос на Т-SQL «Код предмета». 8. Введите с клавиатуры запрос на Т-SQL «Количество студентов в группах», вычислив количество студентов с помощью функции Count. Выполните запросы «Заведующие кафедрами», «План проведения занятий в группах», «Список студентов по группам», «Список студентов группы ДФД-31», «Список преподавателей по кафедрам», «Экзаменационная ведомость», «Успеваемость студентов в группах по предметам у преподавателей». Сохраните запросы в формате «.sql». 9. Составить запрос для вывода всех полей таблицы «ПРЕПОДАВАТЕЛЬ» с условием, что ученое звание преподаватель – профессор (рис. III.37).
Рис. III.37. Вывод результата запроса в таблицу в Query Analyzer
10. Составить запрос по таблицам «ГРУППА», «СТУДЕНТ» для вывода номеров групп и ФИО студентов по группам (рис. III.38).
248
Мартьянова А.Е. Базы данных и знаний
Рис. III.38. Вывод результата запроса в таблицу в Query Analyzer
Обратите внимание на то, что таблицы являются связанными по ключевому полю «Код группы». 11. Составить запрос по таблицам «ГРУППА», «СТУДЕНТ», «УСПЕВАЕМОСТЬ», «ПРЕДМЕТ» для вывода ФИО, номеров групп, названий предметов всех студентов, получивших оценку =5 (рис. III.39).
Рис. III.39. Вывод результата запроса в таблицу в Query Analyzer
12. Создайте и сохраните представления «Количество студентов в группах», «Код предмета», «Заведующие кафедрами», «План проведения занятий в группах», «Список студентов по группам», «Список преподавателей по кафедрам», «Экзаменационная ведомость», «Успеваемость студентов в группах по предметам у преподавателей», используя Enterprise Manager.
248
Мартьянова А.Е. Базы данных и знаний
249
Работа XIV. MS SQL Server. Изменение данных в БД С помощью Query Analyzer можно не только выполнить запросы, но и выполнить, например, обновление данных в таблице, добавление записей и удаление записей таблиц. Операторы для модифицирования данных относятся к расширенному описанию Transact-SQL, это операторы UPDATE, INSERT, DELETE. Выполните обновление таблицы «ПРЕДМЕТ» для строки с кодом предмета «20001» и столбца с названием «Программа» (рис. III.40) и произведите запрос для проверки обновления соответствующего значения (рис. III.41).
Рис. III.40. Выполнение обновления таблицы в Query Analyzer
Рис. III.41. Вывод результата запроса в таблицу в Query Analyzer
Ниже используется переменная @Pointer_Values. Прежде всего, имени объявляемой переменной должно предшествовать ключевое слово DECLARE [8]. Имена всех переменных должны начинаться с символа @ и являться локальными именами в отношении конкретного кода, в котором они объявлены. Иными словами, объявленная ниже переменная с именем @Pointer_Values доступна только в пределах данной транзакции. Если попытаться обратиться к этой переменной в другой транзакции, то получим сообщение об ошибке. Наконец, необходимо указать имя типа данных, к которому относится объявленная переменная, и ее размер.
250
Мартьянова А.Е. Базы данных и знаний
Функция TEXTPTR использует информацию из столбца «Кафедра.Фото» для создания указателя. Почему же нам просто не оставить в столбце значение NULL, не заполняя его никак? NULL – это не нулевое значение, а отсутствие значения вообще. Поэтому в столбце «Кафедра.Фото» обязательно должно присутствовать шестнадцатиричное число и, чтобы оно случайно не совпало с одним из реально существующих указателей, используется максимальное значение – 0xFFFFFFFF, которое предварительно вводится в столбец «Кафедра.Фото». На рис. III.42 и рис. III.43 представлены выполнение обновления и результат обновления поля «Фото» таблицы «КАФЕДРА» при условии, что код кафедры равен «101».
Рис. III.42. Выполнение обновления таблицы в Query Analyzer
Рис. III.43. Вывод результата запроса в таблицу в Query Analyzer
250
Мартьянова А.Е. Базы данных и знаний
251
Полностью весь код, выведенный в результате запроса, представляет собой: 0x443A5C506F722E626D70. Графические данные лучше хранить отдельно. В этом случае столбец, определенный как image будет содержать указатели на данные, которые физически находятся в другом месте. Рис. III.42 показывает, что в результате выполнения кода ссылка на фотографию будет вставлена в таблицу «КАФЕДРА»: «The command(s) completed successfully». Для того, чтобы преобразовать указатель, хранящийся в столбце в форме шестнадцатеричного числа в двоичное значение, используется функция TEXTPTR. Команда WRITETEXT использует указатель на положение фотографии с тем, чтобы переписать ранее сохраненную информацию и сгенерировать указатель в шестнадцатеричном коде. Команда READTEXT на рис. III.43 читает указатель на положение фотографии, результатом будет шестнадцатеричное значение. Далее получаем каждое значение со стандартного вывода (каждому значению соответствуют два символа), преобразовываем число для получения ASCII-значения. Таким образом, строим путь к графическому изображению, хранящемуся на диске. После выполнения кода видим путь к графическому файлу. Для добавления информации к таблице используется инструкция INSERT. С помощью нее задаются таблица и столбец, а также добавляемые значения. Например, добавим в таблицу «СТУДЕНТ» информацию о новом студенте группы ДФД-31 (рис. III.44).
Рис. III.44. Выполнение добавления записи в таблицу «СТУДЕНТ» с помощью Query Analyzer
В столбце «Адрес» окажется значение по умолчанию, установленное для этого поля. Выполните запрос для проверки ввода указанной строки (рис. III.45):
252
Мартьянова А.Е. Базы данных и знаний
Рис. III.45. Вывод результата запроса в таблицу в Query Analyzer
Результат запроса покажет наличие такой записи в таблице «СТУДЕНТ». Для удаления записи из таблицы используется инструкция DELETE. Удалим из таблицы «СТУДЕНТ» новую запись о студенте с номером зачетной книжки ДФД-303 (рис. III.46).
Рис. III.46. Выполнение удаления записи из таблицы «СТУДЕНТ» с помощью Query Analyzer
Для проверки следует выполнить запрос (рис. III.47).
Рис. III.47. Вывод результата запроса в таблицу в Query Analyzer
В результате запроса не будет найдено ни одной записи.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Вспомните, что такое язык Transact-SQL? 2. Опишите назначение языка DML (Data Manager Language)? 3. Для чего используются операторы UPDATE, INSERT, DELETE?
252
Мартьянова А.Е. Базы данных и знаний
253
ЗАДАНИЕ на проектирование БД «Учебный процесс» в СУБД SQL Server 2000 1. Выполните обновление поля «Программа» таблицы «ПРЕДМЕТ», введя туда фразу «Эта строка вставлена для проверки». Выполните соответствующий запрос для проверки результата ввода данных. 2. Выполните обновление поля «Фото» таблицы «КАФЕДРА», введя туда путь размещения объекта. Выполните запрос для просмотра результата ввода данных. 3. Добавьте в таблицу «СТУДЕНТ» запись о новом студенте группы ДФД-31 (см. рис. III.44). Выполните запрос для проверки ввода указанной записи. 4. Удалите из таблицы «СТУДЕНТ» новую запись о студенте с номером зачетной книжки ДФД-303. Выполните запрос для проверки удаления указанной записи. 5. Дополните таблицу «ПРЕПОДАВАТЕЛЬ» новой записью о преподавателе, работающем на кафедре информатики кодом преподавателя 10003, кодом кафедры – 101, табельным номером – INF-002, ФИО преподавателя – Симонов Симон Симонович, должностью – асс. Выполните запрос для проверки записи. Результат выведите в файл. Файл затем следует просмотреть в блокноте. 6. Дополните таблицу «ПРЕДМЕТ» новой записью о предмете с кодом 20003, названием «Базы данных». Выполните запрос для проверки записи. Результат выведите в файл. Файл затем следует просмотреть в блокноте. 7. Дополните таблицу «УЧЕБНЫЙ ПЛАН» новыми записями, введя сведения для групп ДФД-31 и ДФД-32: коды учебного плана – 5009 – 5012, код предмета – 20003, код преподавателя – 10003, часы – по 100 для каждой записи, вид занятия – лекц. и лаб., семестр – 1 и 2, вид сдачи – зачет. Выполните запрос для проверки записи. Результат запишите в файл. 8. Выполните запрос для вычисления суммарной нагрузки преподавателя Симонова по дисциплине «Базы данных», вид занятия – лаб., используя функцию Sum (рис. III.48).
254
Мартьянова А.Е. Базы данных и знаний
Рис. III.48. Вывод результата запроса в таблицу в Query Analyzer
254
Мартьянова А.Е. Базы данных и знаний
255
Работа XV. MS SQL Server. Управление SQL Server Применение SQL Server Enterprise Manager Enterprise Manager – это часть Microsoft Management Console (MMC), «Консоли Управления Microsoft». MMC является основным приложением, служащим для управления всеми аспектами работы компьютера под управлением Windows 2000 Server [6, 8]. Управление SQL Server Для конфигурирования и управления инсталляцией SQL Server чаще всего применяется Enterprise Manager. Enterprise Manager может останавливать и запускать сервер, а также выполнять следующие действия: • Регистрировать сервер. • Конфигурировать локальные и удаленные серверы. • Конфигурировать многосерверные инсталляции и управлять ими. • Выполнять настройку входа в систему и добавлять новых пользователей, системных администраторов и операторов. • Назначать пароль системного администратора (sa). • Создавать и планировать задания. • Создавать оповещения и конфигурировать SQL Server для общения с системными администраторами через электронную почту. • Устанавливать базы данных, таблицы, индексы, представления, хранимые процедуры, правила, триггеры, настройки по умолчанию, устройства для резервного копирования, журналы ошибок и управлять ими. • Управлять другими службами SQL Server. Enterprise Manager является как бы «универсальным средством» для решения всех этих и других задач. Ниже перечислены четыре задачи, которые можно выполнять при помощи Enterprise Manager. Эти задачи нужно выполнить, когда вы впервые начинаете пользоваться некоторой инсталляцией SQL Server. Создание группы серверов Создав группу серверов, вы сможете ограничить доступ так, что информация будет доступна только для этой группы. Администрирование учетных записей становится проще, когда учетные записи с одинаковыми потребностями доступа к ресурсам объединяются в группы. Регистрация вашего сервера Прежде чем начать управлять сервером, вы должны зарегистрировать его с ММС.
256
Мартьянова А.Е. Базы данных и знаний
Доступ к свойствам вашего сервера Как только вы зарегистрируете свой сервер, можно будет просматривать и конфигурировать множество свойств. Если вы работаете в многосерверном окружении, то вы можете применять Enterprise Manager для управления всеми серверами и конфигурирования всех серверов из одного места. Изменение стандартного пароля администратора При инсталляции SQL Server он конфигурируется как не имеющий пароля для учетной записи системного администратора, применяемой по умолчанию. Прежде чем начать пользоваться SQL Server, вам следует задать этот пароль. Создание групп сервера При помощи Enterprise Manager вы можете создавать группы серверов, которые окажутся полезными для решения ваших административных задач. Группы серверов позволяют организовать наборы взаимосвязанных серверов для удобного доступа, подобно тому, как папки позволяют организовывать наборы взаимосвязанных файлов. После этого вы сможете одной командой выполнять действия, которые будут оказывать влияние на все серверы группы, а не повторять одну и ту же команду для каждого сервера. (При администрировании SQL Server 2000 применяются два типа групп. В данном модуле речь идет о Группах Зарегистрированных Серверов. Этот тип группирования предназначен только для удобства расположения (и в дальнейшем нахождения) сервера в окне Enterprise Manadger. Другой тип групп, так называемый Target Server Groups (группы серверов назначения), действительно предназначен для централизованного выполнения заданий. Однако эти группы к регистрационным группам прямого отношения не имеют.) По умолчанию, при инсталляции SQL Server, создается группа с названием SQL Server Group. Чтобы создать группу серверов, выполните следующие действия. 1. Нажмите на экранную кнопку Start, наведите курсор на Programs, наведите курсор на Microsoft SQL Server 2000, а затем выберите Enterprise Manager, чтобы запустить приложение Enterprise Manager. 2. В левой части окна Enterprise Manager будут показаны папки групп серверов (как подпапки Microsoft SQL Server), а в правой части окна будут показаны значки-иконки групп серверов. Чтобы создать группу серверов SQL Server, нажмите правой кнопкой мыши на папку Microsoft SQL Server, а затем выберите New SQL Server Group в появившемся контекстном меню (рис. III.49). 256
Мартьянова А.Е. Базы данных и знаний
257
3. Появится диалоговое окно Server Groups, введите в него с клавиатуры имя новой группы серверов, например «P0» (рис. III.50). Если вы нажмете на селективную экранную кнопку Sub-group of (Подгруппа в …), то сможете выбрать группу, для которой новая группа серверов будет подгруппой. Если вы нажмете на Top level group (Группа высшего уровня), то ваша новая группа серверов будет группой SQL Server самого высшего уровня, того же уровня, что и группа SQL Server Group. Чтобы сохранить свою новую группу, нажмите на OK. В группе серверов появилась новая группа (рис. III.51).
Рис. III.49. Выбор New SQL Server Group в контекстном меню
258
Мартьянова А.Е. Базы данных и знаний Рис. III.50. Диалоговое окно Server Groups
Рис. III.51. Новая группа серверов «P0» в группе серверов
Регистрация сервера После того как вы создадите группу SQL Server, вам надо будет зарегистрировать свои локальные или удаленные серверы в качестве членов этой группы. Чтобы зарегистрировать сервер, выполните следующие действия: 1. Нажмите правой кнопкой мыши на значок-иконку группы серверов в правой панели окна Enterprise Manager. (Если заголовок Microsoft SQL Servers раскрыт, то вы можете также нажать правой кнопкой мыши на имя папки группы в левой панели окна.) В появившемся контекстном меню выберите New SQL Server Registration (рис. III.52).
Рис. III.52. Выбор New SQL Server Registraion в контекстном меню
2. Появится стартовый экран мастера Register SQL Server Wizard (Мастер регистрации SQL Server) (рис. III.53). Этот мастер поможет вам в прохождении процесса выполнения многих рутинные административ-
258
Мартьянова А.Е. Базы данных и знаний
259
ные задачи, решаемых с помощью Enterprise Manager. Для продолжения регистрации сервера нажмите на Next.
Рис. III.53. Стартовый экран мастера Register SQL Server Wizard
3. Появится экран Select a SQL Server (Выберите SQL Server). В списковом поле Available Servers (Доступные серверы) будут показаны инсталляции SQL Server, доступные через сеть. Выберите серверы, которые вы хотите зарегистрировать (или наберите с клавиатуры имя сервера в текстовом поле), а затем нажмите на Add, чтобы переместить имя сервера в списковое поле Added Servers (Добавленные серверы) (рис. III.54). Завершив действия по выбору, нажмите на Next.
260
Мартьянова А.Е. Базы данных и знаний
Рис. III.54. Экран Select a SQL Server
4. Появится экран Select An Authentication Mode (Выберите режим аутентификации). Выберите тип защиты, которую вы хотите применять при соединении с вашей инсталляцией SQL Server. (Если вы выполнили «типичную» инсталляцию, то SQL Server уже сконфигурирован на применение режима аутентификации Windows NT.) (рис. III.55). Для продолжения нажмите на Next.
260
Мартьянова А.Е. Базы данных и знаний
261
Рис. III.55. Экран Select An Authentication Mode
5. Появится экран Select SQL Server Group (Выберите группу SQL Server) (рис. III.56). Вы можете выбрать уже существующую группу, в которую добавите свой сервер, а можете создать для своего сервера группу высшего уровня. Добавьте свой сервер в существующую группу, для чего нажмите на первую селективную кнопку экрана, а затем выберите имя группы в выпадающем списке. А если вы хотите создать еще одну новую группу, то нажмите на вторую, а затем введите с клавиатуры имя группы в текстовое поле. Для продолжения нажмите на Next. 6. Появится экран Completing The Register SQL Server Wizard (Завершение мастера регистрации SQL Server) (рис. III.57). Серверы, показанные в списке, будут зарегистрированы. Если вы хотите внести какие-либо изменения, то нажмите на Back, а если изменения не нужны, то нажмите на Finish, и тогда запустится процесс регистрации. 7. Появится диалоговое окно Register SQL Server Messages (Сообщения регистрации SQL Server) (рис. III.58), являющееся подтверждением успешности вашей регистрации. Чтобы закрыть это окно, нажмите на Close.
262
Мартьянова А.Е. Базы данных и знаний
Рис. III.56. Экран Select SQL Server Group
Рис. III.57. Экран Completing The Register SQL Server Wizard
262
Мартьянова А.Е. Базы данных и знаний
263
Рис. III.58. Диалоговое окно Register SQL Server Messages
Доступ к свойствам сервера После успешной регистрации сервера P0 с помощью Enterprise Manager вы получаете доступ к его свойствам, базам данных и объектам. Чтобы посмотреть свойства и объекты только что зарегистрированного сервера, сначала раскройте имя группы сервера в левой панели окна Enterprise Manager. Появится список всех серверов из этой группы. Затем раскройте имя сервера P0, чтобы стали видны его свойства. В списке Databases выберите уже существующую там базу с именем «своего» ПК, например, P1 для ПК с именем P1 в локальной сети (рис. III.59), или создайте на сервере P0 «свою» базу данных.
Рис. III.59. Выбор «своей» базы данных для ПК с именем P1 на сервере P0
264
Мартьянова А.Е. Базы данных и знаний
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Опишите назначение языка DCL (Data Control Language). 2. Опишите, как реализуется защита информации в базах данных. 3. Опишите реализацию защиты в MS SQL Server. 4. Опишите архитектуру «клиент-сервер» применительно к системам баз данных. 5. Опишите структуру типового интерактивного приложения, работающего с базой данных. 6. Опишите двухуровневые и трехуровневую модели распределенной обработки данных. 7. Для каких задач конфигурирования и управления SQL Server применяется Enterprise Manager? 8. Опишите создание групп сервера SQL Server с помощью Enterprise Manager. 9. Опишите регистрацию сервера SQL Server с помощью Enterprise Manager. 10. Как осуществляется получение доступа к свойствам сервера SQL Server с помощью Enterprise Manager? ЗАДАНИЕ на проектирование БД «Учебный процесс» в СУБД SQL Server 2000 1. Создайте группу сервера SQL Server P0 с помощью Enterprise Manager. 2. Произведите регистрацию сервера SQL Server P0 на своем ПК с помощью Enterprise Manager. 3. Получите доступ к «своей» существующей на сервере P0 базе данных сервера P0 с помощью Enterprise Manager, или создайте «свою» базу данных. Создайте в «своей» базе данных на сервере P0 новую таблицу с именем «ГРУППА» по описанию свойств полей, приведенному в табл. III.3. Установите первичный ключ, установите проверочные условия на значения столбцов. Заполните таблицу «ГРУППА» данными табл. III.11. 4. Создайте в «своей» базе данных на сервере P0 еще одну новую таблицу с именем «СТУДЕНТ» по описанию свойств полей, приведенному в табл. III.4. Заполните таблицу «СТУДЕНТ» данными табл. III.11. 5. С помощью объекта Database Diagrams установите реляционные связи между таблицами «ГРУППА» и «СТУДЕНТ» «своей» базы 264
Мартьянова А.Е. Базы данных и знаний
данных. Сохраните в «своей» именем«DIAGRAM 1» (рис. III.60).
265
базе
данных
диаграмму
с
Рис. III.60. Диаграмма с установленными реляционными связями между таблицами «ГРУППА» и «СТУДЕНТ»
266
Мартьянова А.Е. Базы данных и знаний
Работа XVI. SQL Server. Создание соединений с сервером баз данных. Управление данными В Visual Basic 6.0 для работы можно использовать базы данных, размещенные на сервере. Прежде чем работать с такой базой данных, необходимо создать соединение с ней. Для создания соединения выполните следующие действия [1]: 1. Откройте окно DataEnvironment (рис. III.61). Для этого в меню Project (Проект) выберите команду Add Data Environment (Среда окружения).
Рис. III.61. Окно DataEnvironment
2. Для добавления нового соединения нажмите кнопку Add Connection (Добавить соединение) на панели инструментов. В окне появится новый элемент, который по умолчанию имеет наименование Conntction1. 3. Выберите для данного элемента команду контекстного меню Properties (Свойства). Открывается диалоговое окно Свойства связи с данными, предназначенное для ввода параметров соединения с сервером. 4. На вкладке Поставщик услуг диалогового окна Свойства связи с данными (рис. III.62) выберите из предложенного списка тип подключаемых данных.
266
Мартьянова А.Е. Базы данных и знаний
267
Рис. III.62. Диалоговое окно установления соединения с базой данных на сервере
5. Перейдите на вкладку Подключение (рис. III.63) и введите имя сервера, имя и пароль пользователя (если в этом есть необходимость), выберите из раскрывающегося списка базу данных на сервере. 6. Чтобы убедиться в правильности задания параметров соединения, нажмите кнопку Проверить подключение. Если подключение выполнено успешно, появится сообщение, что проверка подключения выполнена. 7. Завершив установку параметров, нажмите OK для закрытия диалогового окна.
268
Мартьянова А.Е. Базы данных и знаний
Рис. III.63. Вкладка Подключение диалогового окна Свойства связи с данными
Для просмотра входящих в соединение объектов откройте Data View. Для этого в меню View (Вид) выберите команду Data View Window (Окно просмотра данных) или нажмите одноименную кнопку на стандартной панели инструментов Visual Basic. На рис. III.64 показано окно Data View (Просмотр данных) с таблицами базы данных «Учебный процесс», размещенной на сервере Microsoft SQL Server.
268
Мартьянова А.Е. Базы данных и знаний
269
Рис. III.64. Просмотр размещенных на сервере данных в окне Data View
Вы можете открыть для просмотра любую из таблиц, находящихся в окне Data View. Для этого установите курсор на наименование просматриваемой таблицы, нажмите правую кнопку мыши и выберите из контекстного меню команду Open (Открыть). Для открытия таблицы можно также дважды щелкнуть мышью на ее наименовании. На рис. III.65 показана в режиме просмотра таблица «ГРУППА» базы данных «Учебный процесс», размещенной на сервере Microsoft SQL Server.
Рис. III.65. Просмотр размещенной на сервере Microsoft SQL Server таблицы «ГРУППА»
Аналогично вы можете открыть представления, находящиеся в окне в окне Data View. Технология ActiveX Технология ActiveX, разработанная фирмой Microsoft дает возможность программисту оторваться от среды разработки, поскольку среда, в которой поддерживается технология ActiveX, «понимает» любой компонент ActiveX, в том числе разработанный в другой среде [1]. Это
270
Мартьянова А.Е. Базы данных и знаний
означает, что любые компоненты, созданные в Visual Basic 6, можно без проблем использовать при работе, например, в Visual C++ или в любой другой среде проектирования, которая поддерживает технологию ActiveX. Одним из основных свойств технологии ActiveX является ее ориентацией на Internet, что позволяет применять в своей разработке любые физически удаленные компоненты, используя возможности доступа через Internet. Это также означает, что любой компонент, разработанный при помощи этой технологии, можно использовать в проектах, предназначенных для работы в Internet. На самом деле технология ActiveX – собирательное понятие, это сумма технологий, таких как: • элементы управления ActiveX – технология создания элементов управления ActiveX; • документы ActiveX – технология создания документов, работающих в браузерах Internet, и приведение документов (например, документов Word) к стандарту документов ActiveX; • Remote Automation – технология удаленного управления; • технология Active DeskTop – средства интеграции HTMLдокументов и элементов (таких, как элементы управления ActiveX или Java-апплеты – сценарии) непосредственно на рабочем экране пользователя; • Active Movie – технология работы с аудио и видео форматами в броузерax Internet; • Active Server Pages – технология создания и выполнения сценариев на Web-серверах. Основные понятия технологии ActiveX – компоненты ActiveX, объектные модели СОМ (Component Object Model, модель составных объектов) и DCOM (Distributed СОМ). Компоненты ActiveX – это элементы управления ActiveX, документы ActiveX, источники данных (ADO или RDO), выполняемые файлы ActiveX EXE и библиотеки ActiveX DLL. Компоненты представляют собой отдельные файлы OCX, EXE или DLL и могут использоваться для создания классов объектов или выполнения каких-либо функций приложения. Фактически компонент ActiveX – это отдельный проект, содержащий набор элементов управления, классов и других программных модулей, скомпилированный затем в файл OCX, EXE или DLL в зависимости от целей применения этого компонента. 270
Мартьянова А.Е. Базы данных и знаний
271
При разработке компонентов ActiveX необходимо исходить из целей применения этих компонентов. Можно создать целый набор элементов управления в одном файле OCX для настольных приложений, однако из-за большого размера файла они будут медленно работать в Internetприложениях. Для работы в Internet эти элементы управления необходимо выделить в отдельные файлы небольшого размера. Компоненты ActiveX основаны на программной модели СОМ, которая обеспечивает межплатформенные возможности технологии ActiveX. Модель составных объектов (COM) представляет собой программную модель, а именно: набор стандартных сервисов (функций) и спецификаций (стандартов обмена, стандартов вызова функций), обеспечивающих реализацию объектно-ориентированного подхода для разработки приложений клиент/сервер, работающих в том числе и в Internet, точнее, в первую очередь в Internet. Причем данная модель работает вне зависимости от среды проектирования, с условием, конечно, что эта платформа (среда проектирования) поддерживает модель СОМ. Модель СОМ определяет стандартный внутренний интерфейс между объектами и методику существования (создание объекта, инициализация объекта, завершение работы объекта) и взаимодействия объектов (вызов функций, обмен данными между объектами). Этот интерфейс обеспечивает взаимодействие любых объектов модели СОМ между собой. Программная модель СОМ имеет открытую архитектуру, что дополняет гибкость модели и возможность работы с любой платформой. Модель распределенных составных объектов DCOM (Distributed СОМ) – это развитие модели СОМ для эффективной работы в Internet. В модели DCOM поддерживается объектный протокол, который дает возможность прямого доступа объектов СОМ друг другу при помощи сети. Технология ADO (ActiveX Data Object) является новейшим средством доступа к различным типам данных, которую рекомендуется применять при разработке приложений в Visual Basic 6.0. ADO позволяет программе получить доступ к базе данных с помощью провайдера OLE DB, который представляет собой интерфейс, обеспечивающий доступ к различным источникам данных. Доступ к базам данных в двухуровневых моделях «клиент – сервер» В простых двухуровневых моделях «клиент – сервер», где несколько баз данных обслуживают ограниченное число пользователей на-
272
Мартьянова А.Е. Базы данных и знаний
стольных ПК, в роли встроенного программного обеспечения доступа к данным могут выступать обычные ODBC-драйверы. Стандарт SQL2 определил интерфейс уровня вызова (CLI — Call Level Interface), в котором стандартизирован общий набор рабочих процедур, обеспечивающий совместимость со всеми основными типами серверов баз данных [7]. Технологическая основа CLI – размещаемая на компьютере клиента специальная библиотека, в которой хранятся вызовы процедур и сетевых компонентов для организации связи с сервером. Это программное обеспечение поставляется обычно в составе среды разработки и поддерживает разнообразные сетевые протоколы. Использование программных вызовов позволяет свести к минимуму операции на компьютере-клиенте. В общем случае клиент формирует оператор языка SQL в виде строки и пересылает ее на сервер посредством процедуры исполнения (execute). Когда же сервер в качестве ответа возвращает несколько строк данных, клиент считывает результат последовательным вызовом процедуры выборки данных. Далее данные из столбцов полученной таблицы могут быть связаны с соответствующими переменными приложения. Вызов специальной процедуры позволяет клиенту определить число полученных строк, столбцов и типы данных в каждом столбце. Спецификация открытого интерфейса баз данных (ODBC Open Database Connectivity), предназначена для унификации доступа к данным, размешенным на удаленных серверах. ODBC опирается на спецификации CLI. ODBC представляет собой программный слой, унифицирующий интерфейс взаимодействия приложений с базами данных. За реализацию особенностей доступа к каждой отдельной СУБД отвечает соответствующий специальный ODBC-драйвер. Пользовательское приложение этих особенностей не видит, так как взаимодействует с универсальным программным слоем более высокого уровня. Таким образом, приложение становится в значительной степени независимым от СУБД. Вместо создания в каждом отдельном случае СУБД приложения с обращениями через «родной», но быстро устаревающий интерфейс, можно использовать один общий стандартизированный программный интерфейс. В архитектуре ODBC используется один ODBC Driver Manager и несколько ODBCдрайверов, обеспечивающих доступ к конкретным СУБД. Driver Manager связывает приложение и интерфейсные объекты, которые выполняют обработку SQL-запросов к конкретной СУБД.
272
Мартьянова А.Е. Базы данных и знаний
273
Такой подход является достаточно универсальным, стандартизируемым, что и позволяет использовать ODBC-механизмы для работы практически с любой системой. Однако этот способ также не лишен недостатков: • увеличивается время обработки запросов (как следствие введения дополнительного программного слоя); • необходимы предварительная инсталляция и настройка ODBCдрайвера (указание драйвера СУБД, сетевого пути к серверу, базы данных и т.д.) на каждом рабочем месте. Параметры этой настройки являются статическими, то есть приложение их изменить самостоятельно не может. Встраивание и связывание объектов в базах данных – OLE DI (Object Linking and Embedding Data Base), как и ODBC – прикладные интерфейсы доступа к данным с использованием SQL. OLE DB специфицирует взаимодействие, обеспечивая единый интерфейс доступа к данным через провайдеров – поставщиков данных не только из реляционных БД. В отличие от ODBC, OLE DB предоставляет общее решение обеспечения COM-приложениям доступа к информации независимо от типа источника данных. OLE DB включает два базовых компонента: провайдер данных и потребитель данных. Потребитель (клиент) – это приложение или СОМкомпонент, обращающийся посредством API-вызовов к OLE DB. Провайдер (сервер) – это приложение отвечающее на вызовы OLE DB и возвращающее запрашиваемый объект – обычно это данные в табличном виде. ADO (Active Data Object) – это универсальный интерфейс высокого уровня к OLE DB. Модель объекта ADO не содержит таблиц, среды или машины БД. Здесь основными объектами являются следующие: объект Соединение, создающий связь с провайдером данных; объект Набор данных и объект Команда – выполнение процедуры, SQL-строки. В общем случае ADO можно рассматривать как язык программирования с БД, позволяющий выбирать, модифицировать и удалять записи. И поскольку он опирается на универсальный OLE DB, то может использоваться практически в любых приложениях Microsoft. Рассмотренные технологии построения приложения ориентированы на извлечение данных непосредственно из статического источника (хранилища данных) и не могут обращаться за данными к другому прикладному модулю.
274
Мартьянова А.Е. Базы данных и знаний
Подключение компонентов ADO к проекту Чтобы использовать компоненты ADO в проекте, необходимо подключить библиотеки, которые их содержат. Для этого в меню Project (Проект) выбрать команду References (Ссылки), а затем в диалоговом окне References установить флажки рядом с наименованиями следующих библиотек: • Microsoft ActiveX Data Objects 2.1 Library; • Microsoft ActiveX Data Objects Recordset 2.1 Library. Для того чтобы использовать элементы управления, которые применяют технологию ADO при создании и редактировании форм, необходимо эти компоненты поместить на панель инструментов. Для этого в меню Project (Проект) выберите команду Components (Компоненты) и в диалоговом окне Components установите флажки рядом с именами следующих компонентов: • Microsoft ADO Data Control 6.0 (OLEDB); • Microsoft DataGrid Control 6.0 (OLEDB); • Microsoft DataList Control 6.0 (OLEDB); • Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB). Соединение элемента с источником данных В Visual Basic появился новый объект для управления данными – ADO Data Control, который имеет непосредственную связь с набором записей и позволяет пользователю перемещаться по нему в любом направлении (рис. III.66).
Рис. III.66. Размещение объекта ADO Data Control в форме
Элемент управления ADO Data Control обладает общими свойствами, описанными в табл. III.17 [1]. 274
Мартьянова А.Е. Базы данных и знаний
275
Таблица III.17. Свойства элемента управления ADO Data Control Свойство BOF и EOF
Описание Свойства, которые содержат признак того, что текущая строка находится перед первой строкой или после последней строки, соответственно CommandTinieout Время ожидания выполнения команды, после превышения которого выдается сообщение об ошибке CacheSize Количество строк, выбираемых в память CommandType Тип выполняемой команды ConnectionString Содержит информацию, необходимую для соединения с источником данных ConnectionTimeout Время ожидания соединения с источником данных, после превышения которого выдается сообщение об ошибке CursorLocation Устанавливает или возвращает местонахождение курсора Cursor-Type Тип курсора, используемый в объекте Recordset Lock- Тип блокировки Type MaxRecords Максимальное количество строк, передаваемых объекту Recordset Mode Устанавливает ограничения для редактирования данных Password Пароль, который будет использоваться при доступе к данным Recordset Возвращает или устанавливает ссылку на объект Recordset RecordSource Данное свойство содержит наименование таблицы или запроса и определяет содержимое объекта Recordset UserName Имя пользователя, используемое при создании объекта
Элемент управления ADO Data Control характеризуется событиями, описанными в табл. III.18 [1]. Таблица III.18. События элемента управления ADO Data Control Событие 1 EndOfRecordset
FetchConplete FetchProgress WillChangeField, FieldChangeComplete
Описание 2 Возникает при достижении последней записи в объекте Recordset Возникает после заполнения всех записей в объекте Recordset Возникает периодически во время заполнения записей в объекте Recordset Данные события возникают соответственно до и после изменения какого-либо поля или полей в объекте Recordset
276
Мартьянова А.Е. Базы данных и знаний Окончание таблицы III.18
1 2 WillChangeRecord, Re- Данные события возникают соответственно до и после cordChangeComplete изменения какой-либо записи или записей в объекте Recordset Первое событие возникает до изменения данных в объекWillChangeRecordset, те Recordset, а второе – после изменения данных RecordsetChangeComplete WillMove, MoveCom- События возникают соответственно до и после изменения plete текущей позиции в объекте Recordset
Для соединения элемента управления ADO Data Control с источником данных используется свойство ConnectionString диалогового окна Properties (Свойства). Чтобы ввести информацию в это свойство, нажмите кнопку с тремя точками в правом столбце свойства. Откроется диалоговое окно Property Pages (рис. III.67), в котором можно будет настроить соединение с источником данных.
Рис. III.67. Диалоговое окно для настройки строки соединения с источником данных
Для использования строки соединения с источником данных выберите опцию Use Connection String. Для формирования строки соединения служит диалоговое окно Data Link Properties (Свойства связи с данными) (рис. III.68), которое открывается при нажатии на кнопку Build, расположенную справа от поля ввода.
276
Мартьянова А.Е. Базы данных и знаний
277
Рис. III.68. Диалоговое окно Data Link Properties
Диалоговое окно Data Link Properties содержит четыре вкладки. На вкладке Provider (Поставщик услуг) в списке OLE DB Provider(s) (Поставщики OLE DB) необходимо выбрать поставщика услуг данных. Для продолжения настройки нажмите Next (Далее) или выберите вкладку Connection (Подключение) (рис. III.69), на которой можно настроить соединение. В первую очередь надо выбрать из раскрывающегося списка наименование сервера баз данных. После этого необходимо ввести информацию о пользователе, которая включает псевдоним пользователя и пароль (если это необходимо). Последним этапом настройки соединения будет выбор базы данных из раскрывающегося списка или путем ввода имени базы данных в поле ввода.
278
Мартьянова А.Е. Базы данных и знаний
Рис. III.69. Вкладка Connection диалогового окна Data Link Properties
На вкладке Advanced (Дополнительно) размещены дополнительные параметры для настройки соединения с источником данных. В области Network setting (Параметры сети) вкладки Advanced расположены следующие списки: • Impersonation level – уровень представления, используемый сервером при исполнении роли клиентов; • Protection level – определяет уровень защиты данных при обмене между сервером и клиентом. В области Other (Другое) вкладки Advanced размещены дополнительные параметры настройки соединения. Поле ввода Connect timeout (Время ожидания) устанавливает промежуток времени, через который после начала соединения попытка соединения прекращается. С помощью списка Access permissions (Права доступа) можно установить ограничения для работы с данными.
278
Мартьянова А.Е. Базы данных и знаний
279
На вкладке All (Все) диалогового окна Data Link Properties предоставляется возможность изменять все свойства, которые допустимы для выбранного поставщика данных. Определение источника записей После того как для элемента управления ADO Data Control было настроено соединение с источником данных, можно приступить к определению источника записей. Для этого в диалоговом окне Property Pages элемента управления ADO Data Control следует перейти на вкладку Authentication (рис. III.70) и ввести имя пользователя и пароль для активизации соединения с источником данных. Затем можно непосредственно перейти к настройке источника записей, воспользовавшись вкладкой RecordSource (Источник записи) (рис. III.71) диалогового окна Property Pages.
Рис. III.70. Вкладка Authentication диалогового окна Property Pages
280
Мартьянова А.Е. Базы данных и знаний
Рис. III.71. Вкладка RecordSource диалогового окна Property Pages
Использование элемента ADO Data Control в форме После настройки элемента ADO Data Control можно приступить к размещению в форме элементов управления для отображения данных из таблицы. Далее необходимо связать элементы отображения данных с элементом ADO Data Control. Для каждого элемента управления необходимо выполнить следующие действия: • выбрать элемент, который необходимо связать с источником записей; • в окне Properties выбранного элемента из раскрывающегося списка свойства DataSource (Источник данных) выбрать элемент ADO Data Control, который был размещен на форме; • после того как элемент связан с источником записей, необходимо связать его с полем таблицы. Для этого используют свойство DataField (Поле данных), из списка которого выбирают требуемое поле таблицы. После завершения настройки всех элементов формы, запустите проект на выполнение и просмотрите полученный результат (рис. III.72).
280
Мартьянова А.Е. Базы данных и знаний
281
Рис. III.72. Форма таблицы «ГРУППА» с объектом ADO Data Control
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1.Опишите процесс соединения с базой данных, размещенной на сервере. 2.Опишите технологию ActiveX. 3.Опишите, как осуществляется доступ к базам данных в двухуровневых моделях «клиент – сервер». 4.Опишите, как осуществляется подключение компонентов ADO к проекту. 5.Опишите использование элемента управления ADO Data Control для подключения к базам данных. 6.Опишите использование элемента управления ADO Data Control в форме. ЗАДАНИЕ на создание соединений с сервером баз данных и управление данными 1. Выполните соединение с базой данных «Учебный процесс», размещенной на сервере SQL Server. 2. Просмотрите входящие в соединение объекты базы данных «Учебный процесс», размещенной на сервере SQL Server, с помощью Data View.
282
Мартьянова А.Е. Базы данных и знаний
3. Спроектируйте так, как это описано в Работе VIII вручную форму для отображения полей таблицы «ГРУППА» базы данных «Учебный процесс», используя элемент управления ADO Data Control. Поместите на эту форму кнопки для выполнения различных операций: добавление и удаление записей, обновления записей и т.п. (см. рис. III.72). В окно кода введите следующий код событийных процедур для командных кнопок: Private Sub cmdAdd_Click() Adodc1.Recordset.AddNew End Sub Private Sub cmdDelete_Click() Adodc1.Recordset.Delete Adodc1.Recordset.MoveNext End Sub Private Sub cmdRefresh_Click() Adodc1.Refresh End Sub Private Sub cmdUpdate_Click() Adodc1.Recordset.Update End Sub Private Sub cmdClose_Click() Unload Me End Sub
4. Спроектируйте формы для отображения данных из таблиц «КАФЕДРА», «ПРЕДМЕТ», «ПРЕПОДАВАТЕЛЬ», «СТУДЕНТ», «УСПЕВАЕМОСТЬ», «УЧЕБНЫЙ ПЛАН» с использованием элемента управления ADO Data Control. 5. Спроектируйте формы для отображения данных из представлений «Количество студентов в группах», «Код предмета», «Заведующие кафедрами», «План проведения занятий в группах», «Список студентов по группам», «Список преподавателей по кафедрам», «Экзаменационная ведомость», «Успеваемость студентов в группах по предметам у преподавателей». 6. Так как это описано в работах IX – X спроектируйте интерфейс приложения базы данных «Учебный процесс». Используйте для вывода табличных данных элемент Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB) или Microsoft DataGrid Control 6.0 (OLEDB) вместо элемента Microsoft FlexGrid Control 6.0. 282
Мартьянова А.Е. Базы данных и знаний
283
ЧАСТЬ IV
Работа XVII. Проектирование простейшей экспертной системы Понятие об экспертной системе Экспертные системы (ЭС) – это сложные программные комплексы, аккумулирующие знания специалистов в конкретных предметных областях и тиражирующие этот эмпирический опыт для консультаций менее квалифицированных пользователей [5]. В целом процесс функционирования ЭС можно представить следующим образом: пользователь, желающий получить необходимую информацию, через пользовательский интерфейс посылает запрос к ЭС; решатель, пользуясь базой знаний, генерирует и выдает пользователю подходящую рекомендацию, объясняя ход своих рассуждений при помощи подсистемы объяснений. Так как терминология в области разработки ЭС постоянно модифицируется, приведем основные термины из источника [5]. Пользователь – специалист предметной области, для которого предназначена система. Обычно его квалификация недостаточно высока, и поэтому он нуждается в помощи и поддержке своей деятельности со стороны ЭС. Инженер по знаниям – специалист в области искусственного интеллекта, выступающий в роли промежуточного буфера между экспертом и базой знаний. Синонимы: когнитолог, инженер-интерпретатор, аналитик. Интерфейс пользователя – комплекс программ, реализующих диалог пользователя с ЭС как на стадии ввода информации, так и при получении результатов. База знаний (БЗ) – ядро ЭС, совокупность знаний предметной области, записанная на машинный носитель в форме, понятной эксперту и пользователю (обычно на некотором языке, приближенном к естественному). Параллельно такому «человеческому» представлению существует БЗ во внутреннем «машинном» представлении. Решатель – программа, моделирующая ход рассуждений эксперта на основании знаний, имеющихся в БЗ. Синонимы: дедуктивная машина, машина вывода, блок логического вывода. Подсистема объяснений – программа, позволяющая пользователю получить ответы на вопросы: «Как была получена та или иная рекомендация?» и «Почему система приняла такое решение?» Ответ на вопрос
284
Мартьянова А.Е. Базы данных и знаний
«как» – это трассировка всего процесса получения решения с указанием использованных фрагментов БЗ, то есть всех шагов цепи умозаключений. Ответ на вопрос «почему» – ссылка на умозаключение, непосредственно предшествовавшее полученному решению, то есть отход на один шаг назад. Развитые подсистемы объяснений поддерживают и другие типы вопросов. Интеллектуальный редактор БЗ – программа, представляющая инженеру по знаниям возможность создавать БЗ в диалоговом режиме. Включает в себя систему вложенных меню, шаблонов языка представления знаний, подсказок («help» – режим) и других сервисных средств, облегчающих работу с базой. Если система объявлена разработчиками как экспертная, только наличие всех этих блоков гарантирует реальное использование аппарата обработки знаний. Однако промышленные прикладные ЭС могут быть существенно сложнее и дополнительно включать базы данных, интерфейсы обмена данными с различными пакетами прикладных программ, электронными библиотеками и т.д. Приведем пример, заимствованный из книги К. Нейлора [13]. Создадим экспертную систему, с помощью которой можно отличить птицу от самолета. В нашем случае мы собираемся получить не только экспертную, но также и обучающую систему, так как хотелось бы, чтобы машина кого-то еще и обучала. Процесс обучения называется машинным обучением. Что же вы при этом делаете? Вы устанавливаете экспертную систему так, чтобы она провела с вами урок, во время которого вы учите ее принимать решения на основе имеющегося «жизненного» опыта. После такой тренировки вы освобождаете систему от своей опеки и даете ей возможность сделать самостоятельное решение, используя ее собственные экспертные возможности. Пока вам не пришлось анализировать программу, нет необходимости выяснять, как система получила данное решение. Программа, которую мы будем использовать, приведена на рис. IV.1, а ее структурная схема – на рис. IV.2. Если вы введете программу в компьютер и запустите ее, то на экране появятся вопросы о количестве задействованных переменных. Затем машина задаст в программе три массива с помощью оператора DIM. Один из них – массив RULES – должен содержать правила вывода суждений (которые разрабатывает ЭВМ), другой – массив VALUE – значения переменных, представленных в данном конкретном случае, а массив VAR$ служит для хранения имен переменных. 284
Мартьянова А.Е. Базы данных и знаний
285
Рис. IV.1. Простая обучающая программа
Программа по мере продолжения диалога запрашивает имена этих переменных. Она также запрашивает вас о двух других именах – OUTCOMEl$ и OUTCOME2$ – двух возможных исходных. Затем в цикле программы выясняются детали конкретного примера (в этом случае требуются ответы типа Да/Нет). Собрав все необходимые сведения, делают предположение относительно возможного исхода, и формируется некое предложение. Когда вы согласны с мнением системы, вводите «Y», если
286
Мартьянова А.Е. Базы данных и знаний
Да, или «N», если Нет. Затем переходите к другому примеру. Если же вы не согласны, то система изменяет свое правило вывода суждений и переходит к другому случаю.
Рис. IV.2. Структурная схема процесса набора решающих правил
Следует отметить, что постепенно машина улучшает свои предсказания относительно возможного исхода, хотя насколько лучше – зависит от того, какую информацию вы в нее ввели вначале. Если, например, вы все еще пытаетесь предсказать погоду и возможными исходами является Дождь/Нет Дождя, то трудно сказать, была ли машина права, до тех пор пока вы не подождете до завтра, чтобы все это выяснить. Тогда окажется, что и один запрос в день – это не слишком часто, поскольку такова скорость обучения. Существенно более продуктивной схемой обучения является использование систематизированного списка сводок погоды, так как в этом случае вы будете фактически знать реальный исход. С другой стороны, лучше не иметь таких проблем. Вам следует изобрести нечто более строгое, например систему классификации объектов. Допустим, вы исследуете некоторый объект – он должен принадлежать к одному из двух классов. Продумайте, какие переменные будут его
286
Мартьянова А.Е. Базы данных и знаний
287
характеризовать, и введите их. Программа должна быть в состоянии определить, к какому классу принадлежит объект, исследуемый вами. Вы можете, например, захотеть, чтобы экспертная система отгадала, что вы задумали: Птицу или Самолет. Список переменных в этом случае может быть таким: Крылья, Хвост, Клюв, Двигатель, Оперение, Шасси и т.д. Очевидно, если вы определили, что предполагаемый объект имеет Шасси, то каждый скажет, что это несомненно Самолет, а не Птица, так как если вы определяете объект, то невозможно избежать ответа на вопрос о Шасси. Следовательно, ответ вполне определен и задача состоит только в том, чтобы выяснить, действительно ли экспертная система отвечает с такой же определенностью, как и мы. Если выберем в качестве объектов Птицу и Самолет и запустим программу, то вначале система будет предсказывать, что мы загадали Самолет, а не Птицу. Мы сообщим ей, что она ошиблась. В следующий раз она угадает уже правильно. Затем мы загадаем Самолет и посмотрим, может ли система дать правильный ответ. Если нет, то мы сообщим ей правильный ответ, и фактически она достигнет такого состояния, что не даст больше ни одного неправильного ответа. Таким образом, система станет действительно экспертом в распознавании двух объектов: Птицы и Самолета. Это прекрасно, мы начинаем думать, что наконец-то получили чтото существенное. Но перед тем как отпраздновать это событие, было бы полезно выяснить, что же все-таки произошло и почему произошло именно так, а не иначе. Может ли указанная программа быть универсальным средством решения задач, которые ставятся перед экспертными системами? Прежде всего, опишем переменные, которые считаем равными 1, как если бы они были истинными. Другими словами, массив переменных VALUE сформирован из 0 и 1 в соответствии с тем, имеет или нет данный объект указанные признаки. Если рассматриваемый объект Птица, то массив VALUE формируется в виде (1,1,1,0,1,0), если Самолет, то (1,1,0,1,0,1). В табл. IV.1 представлен массив FACTS (факты), который фактически является в нашем случае базой знаний [9]. В нем перечислены некоторые характеристики объектов «птица» и «самолет», наличие данной характеристики и объекта отмечено цифрой 1, отсутствие – 0.
288
Мартьянова А.Е. Базы данных и знаний Таблица IV.1. Характеристики объектов «птица» и «самолет»
Характеристика Крылья Хвост Клюв Двигатель Оперение Шасси
Птица 1 1 1 0 1 0
Самолет 1 1 0 1 0 1
Rules 0 0 1 -1 1 -1
Теперь рассмотрим массив RULES, который содержит правила, вырабатываемые экспертной системой для вывода суждений относительно исхода двух возможностей. В момент, когда система перестает делать ошибки, массив RULES принимает вид (0, 0, 1, -1, 1, -1). Сформируем теперь переменную DECISION путем перемножения массивов VALUE и RULES так, чтобы DECISION = DECISION + VALUE(I)*RULES(I) для всех значений I = 1, ... , 6. Следовательно, если теперь мы возьмем массив VALUE для Птицы, то получим для переменной DECISION=0+0+l+0+1+0=2. Если же определим массив VALUE для Самолета, то переменная DECISION=0+0+0-1+0-1= -2. Эксперт может сказать, что объект – Птица, если переменная DECISION положительна, и Самолет, если она отрицательна. Закончив анализ, делаем вывод, что экспертная система обучена корректно (на рассматриваемом наборе переменных) и любые ошибки исключены. Возвращаясь вновь к изучению массива правил вывода, заметим, что переменным Крылья и Хвост соответствуют 1. Мы этого не учли при выработке решения. Для этих переменных в векторе решения были 0, что не могло изменить значение вектора DECISION. Это вполне объяснимо, так как и Крылья, и Хвост есть и у Птицы, и у Самолета. Эти знания, следовательно, не говорят нам ничего решающего. С другой стороны, значения переменных Клюв и Крылья равны +1, а Двигателя и Шасси -1. Если рассматривать Крылья и Хвост, то таблица не позволяет нам однозначно выбрать объект: Птицу или Самолет, так как они имеют одинаковые шансы. Четыре другие переменные указывают нам либо на Птицу, либо на Самолет (но не на оба объекта сразу), поскольку соответствующие им вероятности равны или 1, или 0. Показательной в этом смысле является диаграмма на рис. IV.3.
288
Мартьянова А.Е. Базы данных и знаний
289
В этом примере если у вашего объекта есть Клюв, то он должен иметь Оперение и не иметь Двигателя и Шасси. Следовательно, это Птица с вероятностью, равной 1.
Рис. IV.3. Птица имеет Крылья, Хвост, Клюв и Оперение. Самолет имеет Крылья, Хвост. Двигатель, Шасси
Если же объект имеет Двигатель, то значит и Шасси, поэтому он не может иметь Клюв и Оперение. Это должна быть не Птица, а Самолет с вероятностью 1. Рассмотренный пример дает представление о возможностях нашей экспертной системы – ее правило вывода разработано таким образом, что ошибка исключается. То, что является для этой системы исходом (событием), совершается с вероятностью 1.
КОНТРОЛЬНЫЕ ВОПРОСЫ к заданию 1. Дайте определение базы знаний. 2. Дайте определение экспертной системы. 3. Опишите процесс функционирования экспертной системы. 4. Опишите преимущества и недостатки экспертных систем и область их применения. 5. Опишите группу специалистов, входящих в состав коллектива разработчиков экспертных систем. 6. Опишите технологию проектирования и разработки экспертных систем. 7. Поясните функционирование экспертной системы, с помощью которой можно отличить птицу от самолета.
290
Мартьянова А.Е. Базы данных и знаний
ЗАДАНИЕ на проектирование простой обучающей системы 1. Напишите программу, представленную на рис. IV.1 на языке Quick Basic. 2. Ответьте на вопрос о назначении массива RULES программы. 3. Проследите момент, когда система перестает делать ошибки: массив RULES принимает вид (0, 0, 1, -1, 1, -1). Как ведет себя система в этот момент?
290
Мартьянова А.Е. Базы данных и знаний
291
СПИСОК ПРИМЕРНЫХ ТЕМ КУРСОВЫХ РАБОТ 1. База данных учета движения товара в магазине. 2. База данных отдела по обращениям и жалобам граждан. 3. База данных проектов организации, осуществляющей сборку изделий. 4. База данных библиотеки. 5. База данных регистрации документов. 6. База данных ресторана. 7. База данных магазина. 8. База данных организации, занимающейся транспортными услугами. 9. База данных научной лаборатории. 10. База данных отдела кадров предприятия. 11. База данных склада предприятия. 12. База данных системы учета деятельности спортивного клуба. 13. База данных компании, занимающейся издательской деятельностью. 14. База данных штатных расписаний. 15. База данных учебного процесса в колледже. 16. База данных учебного процесса университета. 17. База данных фирмы, разрабатывающей программное обеспечение. 18. База данных ЖЭКа. 19. База данных отдела закупок. 20. База данных рабочего места секретаря. 21. База данных больницы. 22. База данных учебного процесса школы. 23. База данных ветеринарной лаборатории. 24. База данных системы учета заказов. 25. База данных для учета гарантийного обслуживания указанных товаров сервисными центрами. 26. База данных компании, производящей автомобили. 27. База данных компании, предоставляющей образовательные услуги. 28. База данных независимого разведывательного агентства. 29. База данных строительной компании. 30. База данных кафедры (информатики). 31. База данных отдела сбыта.
292
Мартьянова А.Е. Базы данных и знаний
32. База данных оперативного хранения дел. 33. База данных компьютерной фирмы. 34. База данных деловых контактов сотрудников фирмы. 35. База данных отдела проката видео-продукции. 36. База данных контроля исполнения документов. 37. База данных поликлиники. 38. База данных экспертизы ценности документов. 39. База данных фирмы организующей развлекательные мероприятия. 40. База данных расходов сотрудников компании. 41. База данных работы с конфиденциальными документами. 42. База данных проката автотранспорта. 43. База данных молодежного клуба. 44. База данных сети аптек. 45. База данных частной кредитующей организации. 46. База данных домашней бухгалтерии. 47. База данных фирмы, выполняющей статистическую обработку данных по заказам клиентов. 48. База данных информационного обслуживания производителей лекарственных препаратов. 49. База данных договоров предприятия. 50. База данных фирмы, торгующей группой товаров определенного назначения. 51. База данных компании, осуществляющей сертификационные услуги по безопасности информационных систем. 52. База данных учета сотрудников корпорации. 53. База данных фирмы, осуществляющей изготовление графической рекламной продукции. 54. База данных фирмы, осуществляющей составление отчетов для клиентов по определенной тематике. 55. База данных Интернет-кафе. 56. База данных информации о деловых партнерах. 57. База данных салона, оказывающего услуги указанного профиля. 58. База данных коллекционера-любителя. 59. База данных общественной организации. 60. База данных конструкторского бюро.
292
Мартьянова А.Е. Базы данных и знаний
293
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 1. Ананьев А.И., Федоров А.Ф. Самоучитель Visual Basic 6.0. – СПб.: БХВ-Петербург, 2003. – 624 с. 2. Бекаревич Ю.Б., Пушкина Н.В. Самоучитель Microsoft Access 2002. – СПб.: БХВ-СПб., 2003. – 720 с. 3. Виноградов С.А. Базы данных – теория и практика. Часто задаваемые вопросы (FAQ). 2001 – 2008. (http://rdbms.narod.ru/faq/index.html) 4. Виноградова И.А., Грибова Е.А., Зубков В.Г. Практикум на ЭВМ. MS Access: Учебное пособие для студентов заочной (дистанционной) формы обучения. – М.: ГИНФО, 2000. – 124 с. 5. Гаврилова Т.А., Хорошевский В.Ф. Базы знаний интеллектуальных систем. – СПб.: Питер, 2001. – 384 с. 6. Гарсиа М.Ф., Рединг ДЖ., Уолен Э., ДеЛюк С.А. Micrasoft SQL Server 2000. Справочник администратора. Пер. с англ. – М.: Издательство ЭКОМ, 2002. – 976 с. 7. Голицына О.Л., Максимов Н.В., Попов И.И. Базы данных: Учебное пособие. – М.: ФОРУМ: ИНФРА-М, 2003. – 352 с. 8. Дьюсон Р. SQL Server 2000. Программирование. – М.: БИНОМ ЛЗ, 2002. – 812 с. 9. Зеленков Ю.А. Введение в базы данных. Центр Интернет ЯрГУ. 1997. (http://www.mstu.edu.ru/education/materials/zelenkov/toc.html) 10. Карпова Т.С. Базы данных: модели, разработка, реализация. – СПб.: Питер, 2002. – 304 с. 11. Кузьменко В.Г. Visual Basic 6. Самоучитель. – М.: БиномПресс, 2002. – 400 с. 12. Литвиненко Т.В. Visual Basic 6: Учебное пособие для вузов. – М.: Горячая линия – Телеком, 2001. – 140 с. 13. Нейлор К. Как построить свою экспертную систему. Пер. с англ. – М.: Энергоатомиздат, 1991. – 286 с. 14. Петров В.Н. Информационные системы. – СПб.: Питер, 2003. – 688 с. 15. Тихомиров Ю.В. MS SQL Server 2000: разработка приложений. – СПб.: БХВ-Петербург, 2000. – 368 с.