Transcript
Page 1: Предмет Базы данных

Предмет «Базы данных»

1. Да́�нные (калька от англ. data) — представление фактов и идей в формализованном виде, пригодном для передачи и обработки в некотором информационном процессе. В информатике данные — это результат фиксации, отображения информации на каком-либо материальном носителе, то есть зарегистрированное на носителе представление сведений независимо от того, дошли ли эти сведения до какого-нибудь приёмника и интересуют ли они его. 2. Концепция БД. Термин база данных вошел в употребление в конце 60-х-начале 70-х годов прошлого столетия. В то же время появились и работы, в которых обсуждались различные модели данных, анализировались принципы и особенности организации баз данных. Ба5за да5нных — представленная в объективной форме совокупность самостоятельных материалов (статей, расчётов, нормативных актов, судебных решений и иных подобных материалов), систематизированных таким образом, чтобы эти материалы могли быть найдены и обработаны с помощью электронной вычислительной машины (ЭВМ) (Гражданский кодекс РФ, ст. 1260). Наиболее часто используются следующие отличительные признаки: 1.БД хранится и обрабатывается в вычислительной системе. Таким образом, любые внекомпьютерные хранилища информации (архивы, библиотеки, картотеки и т. п.) базами данных не являются. 2. Данные в БД логически структурированы (систематизированы) с целью обеспечения возможности их эффективного поиска и обработки в вычислительной системе. 3. Структурированность подразумевает явное выделение составных частей (элементов), связей между ними, а также типизацию элементов и связей, при которой с типом элемента (связи) соотносится определённая семантика и допустимые операции. БД включает схему, или метаданные, описывающие логическую структуру БД в формальном виде (в соответствии с некоторой метамоделью). В соответствии с ГОСТ Р ИСО МЭК ТО 10032-2007, «постоянные данные в среде базы данных включают в себя схему и базу данных. Схема включает в себя описания содержания, структуры и ограничений целостности, используемые для создания и поддержки базы данных. База данных включает в себя набор постоянных данных, определенных с помощью схемы. Система управления данными использует определения данных в схеме для обеспечения доступа и управления доступом к данным в базе данных». Из перечисленных признаков только первый является строгим, а другие допускают различные трактовки и различные степени оценки. Можно лишь установить некоторую степень соответствия требованиям к БД.3. Архитектура́ СУБД. Модели да́нных в СУБД. Архитектура СУБД своего рода схема построения и действия БД. В компьютерных технологиях трёхуровневая архитектура, синоним трёхзвенная архитектура (англ. three-tier или Multitier architecture) предполагает наличие следующих компонентов приложения: клиентское приложение (обычно говорят «тонкий клиент» или терминал), подключенное к серверу приложений, который в свою очередь подключен к серверу базы данных. - Клиент — это интерфейсный (обычно графический) компонент, который представляет первый уровень, собственно приложение для конечного пользователя. Первый уровень не должен иметь прямых связей с базой данных (по требованиям безопасности), быть нагруженным основной бизнес-логикой (по требованиям масштабируемости) и хранить состояние приложения (по требованиям надежности). На первый уровень может быть вынесена и обычно выносится простейшая бизнес-логика: интерфейс авторизации, алгоритмы шифрования, проверка вводимых значений на допустимость и соответствие формату, несложные операции (сортировка, группировка, подсчет значений) с данными, уже загруженными на терминал.- Сервер приложений располагается на втором уровне. На втором уровне сосредоточена бо5льшая часть бизнес-логики. Вне его остаются фрагменты, экспортируемые на терминалы (см.выше), а также погруженные в третий уровень хранимые процедуры и триггеры.- Сервер базы данных обеспечивает хранение данных и выносится на третий уровень. Обычно это стандартная реляционная или объектно-ориентированная СУБД. Если третий уровень представляет собой базу данных вместе с хранимыми процедурами, триггерами и схемой, описывающей приложение в терминах реляционной модели, то второй уровень строится как программный интерфейс, связывающий клиентские компоненты с прикладной логикой базы данных.В зависимости от структуры различают иерархическую, сетевую, реляционную, объектно-ориентированную и гибридную модели баз данных. Самой популярной на сегодняшний день является реляционная структура. Иера́рхическа́я структура́ ба́зы да́нных. Это древовидная структура представления информации. Ее особенность в том, что каждый узел на более низком уровне имеет связь только с одним узлом на более высоком уровне.Сетева́я структура́ ба́зы да́нных. По сути, это расширение иерархической структуры. Все то же самое, но существует связь "многие ко многим". Сетевая структура базы данных позволяет нам добавить группы в наш пример. Недостатком сетевой модели является сложность разработки серьезных приложений.Реляционна́я структура́ ба́зы да́нных. Все данные представлены в виде простых таблиц, разбитых на строки и столбцы, на пересечении которых расположены данные. Подробно об этом мы будем говорить в следующих уроках, здесь же хочется отметить, что эта структура стала настоящим прорывом в развитии баз данных.Объектно-ориентирова́нные и гибридные ба́зы да́нных. В объектно-ориентированных базах данных данные хранятся в виде объектов, что очень удобно. Но на сегодняшний день такие БД еще распространенны, т.к. уступают в производительности реляционным. Гибридные БД совмещают в себе возможности реляционных и объектно-ориентированных, поэтому их часто называют объектно-реляционными. Примером такой СУБД

Page 2: Предмет Базы данных

является Oracle, начиная с восьмой версии. Несомненно, такие БД будут развиваться в будущем, но пока первенство остается за реляционными структурами. Поэтому именно их мы и будем изучать в последующих уроках.4. Инфологическа́я модель ба́зы да́нных. Инфологическая модель базы данных представляет собой описание объектов (сущностей), с набором атрибутов и связей между ними, которые выявляются в процессе исследования как входных, так и выходных данных. Она предназначается для структурного образования предметной области, с ориентированием на информационное внимание пользователей, разрабатываемой системы. Так же инфологическая модель должна быть как стабильной, так и неизменной, и являться представлением аспекта пользователя на описанную раннее предметную область. Однако, при проектировании инфологической модели, должна присутствовать возможность для её увеличения и вставки вспомогательных данных. Самая распространенная модель в инфологическом моделировании это модель "сущность-связь", к главным компонентам её относятся - сущности и связи. Под понятием сущности трактуется содержание объекта, о котором набирают необходимую информацию. Экземпляром сущности представляется - чёткий объект. Сущность определяется атрибутами, которые в свою очередь описаны определёнными характеристиками. Связи должны показывать определённые отношения между сущностями. Во время построения инфологической модели чаще используют графические схемы. Основными понятиями ER-модели являются сущность, связь и атрибут. Сущность – это реальный или представляемый объект, информация о котором должна сохраняться и быть доступной. При определении типа сущности необходимо гарантировать, что каждый экземпляр сущности может быть отличим от любого другого экземпляра той же сущности. Это требование в некотором роде аналогично требованию отсутствия кортежей-дубликатов в реляционных таблицах.Связь – это графически изображаемая ассоциация, устанавливаемая между двумя типами сущностей. Как и сущность, связь – это типовое понятие, все экземпляры обоих связываемых типов сущностей подчиняются устанавливаемым правилам связывания. Поэтому правильнее говорить о типе связи, устанавливаемой между типами сущности, и об экземплярах типа связи, устанавливаемых между экземплярами типа сущности.45) В обсуждаемом здесь варианте ER-модели эта ассоциация всегда является бинарной и может существовать между двумя разными типами сущностей или между типом сущности и им же самим (рекурсивная связь). В любой связи выделяются два конца (в соответствии с существующей парой связываемых сущностей), на каждом из которых указываются имя конца связи, степень конца связи (сколько экземпляров данного типа сущности должно присутствовать в каждом экземпляре данного типа связи), обязательность связи (т. е. любой ли экземпляр данного типа сущности должен участвовать в некотором экземпляре данного типа связи).Связь представляется в виде ненаправленной линии, соединяющей две сущности или ведущей от сущности к ней же самой. При этом в месте «стыковки» связи с сущностью используются:- трехточечный вход в прямоугольник сущности, если для этой сущности в связи могут (или должны) использоваться много (many) экземпляров сущности;- одноточечный вход, если в связи может (или должен) участвовать только один экземпляр сущность.Атрибутом сущности является любая деталь, которая служит для уточнения, идентификации, классификации, числовой характеристики или выражения состояния сущности. Имена атрибутов заносятся в прямоугольник, изображающий сущность, под именем сущности и изображаются малыми буквами, возможно, с примерами.Ключ – минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся. Для сущности Расписание ключом является атрибут Номер_рейса или набор: Пункт_отправления, Время_вылета и Пункт_назначения (при условии, что из пункта в пункт вылетает в каждый момент времени один самолет).5. Ха́ра́ктеристика́ и типы связей инфологической модели да́нных. Инфологическа́я модель да́нных с помощью ER диа́гра́ммы.Между двумя сущностям, например, А и В возможны четыре вида связей.Первый тип – связь ОДИН-К-ОДНОМУ (1:1): в каждый момент времени каждому представителю (экземпляру) сущности А соответствует 1 или 0 представителей сущности В: Студент может не "заработать" стипендию, получить обычную или одну из повышенных стипендий.Второй тип – связь ОДИН-КО-МНОГИМ (1:М): одному представителю сущности А соответствуют 0, 1 или несколько представителей сущности В. Квартира может пустовать, в ней может жить один или несколько жильцов.Так как между двумя сущностями возможны связи в обоих направлениях, то существует еще два типа связи МНОГИЕ-К-ОДНОМУ (М:1) и МНОГИЕ-КО-МНОГИМ (М:N).Характер связей между сущностями не ограничивается перечисленными. Существуют и более сложные связи: множество связей между одними и теми же сущностями (пациент, имея одного лечащего врача, может иметь также несколько врачей-консультантов; врач может быть лечащим врачом нескольких пациентов и может одновременно консультировать несколько других пациентов);трена́рные связи(врач может назначить несколько пациентов на несколько анализов, анализ может быть назначен несколькими врачами нескольким пациентам и пациент может быть назначен на несколько анализов несколькими врачами);связи более высоких порядков, семантика (смысл) которых иногда очень сложна.

Page 3: Предмет Базы данных

При построении инфологических моделей можно использовать язык ER-диа́гра́мм (от англ. Entity-Relationship, т.е. сущность-связь). В них сущности изображаются помеченными прямоугольниками, ассоциации – помеченными ромбами или шестиугольниками, атрибуты – помеченными овалами, а связи между ними – ненаправленными ребрами, над которыми может проставляться степень связи (1 или буква, заменяющая слово "много") и необходимое пояснение.ER-модель используется при высокоуровневом (концептуальном) проектировании баз данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые могут устанавливаться между этими сущностями. Во время проектирования баз данных происходит преобразование ER-модели в конкретную схему базы данных на основе выбранной модели данных (реляционной, объектной, сетевой или др.) Модель «сущность-связь» была предложена в 1976 году Питером Пин-Шен Ченом (англ. Peter Pin-Shen Chen), американским профессором компьютерных наук в университете штата Луизиана. 6. С помощью указанных пользователей выделены следующие объекты и характеристики проектируемой базы: 1.Блюда, для описания которых нужны данные, входящие в их кулинарные рецепты: номер блюда (например, из книги кулинарных рецептов), название блюда, вид блюда (закуска, суп, горячее и т.п.), рецепт (технология приготовления блюда), выход (вес порции), название, калорийность и вес каждого продукта, входящего в блюдо.2.Для каждого поставщика продуктов: наименование, адрес, название поставляемого продукта, дата поставки и цена на момент поставки.3.Ежедневное потребление блюд (расход): блюдо, количество порций, дата.Анализ объектов позволяет выделить:-стержни Блюда, Продукты и Города;-ассоциации Состав (связывает Блюда с Продуктами) иПоставки (связывает Поставщиков с Продуктами);-обозначение Поставщики;-характеристики Рецепты и Расход.ER-диаграмма модели показана на рис, а модель на языке ЯИМ имеет следующий вид:Блюда (БЛ, Блюдо, Вид)Продукты (ПР, Продукт, Калорийность)Поставщики (ПОС, Город, Поставщик) [Город]Состав [Блюда M, Продукты N] (БЛ, ПР, Вес (г))Поставки [Поставщики M, Продукты N] (ПОС, ПР, Дата_П, Цена, Вес (кг))Города (Город, Страна) Рецепты (БЛ, Рецепт) {Блюда}Расход (БЛ, Дата_Р, Порций) {Блюда}

7. Кла́ссифика́ция сущностей инфологической модели ба́зы да́нных. Ра́сширенный язык ЯИМ. К.Дейт определяет три основные класса сущностей: стержневые, ассоциативные и характеристические, а также подкласс ассоциативных сущностей – обозначения.Стержневая сущность (стержень) – это независимая сущность, названия которых помещены в прямоугольники.Ассоциативная сущность (ассоциация) – это связь вида "многие-ко-многим" ("-ко-многим" и т.д.) между двумя или более сущностями или экземплярами сущности . Ассоциации рассматриваются как полноправные сущности:они могут участвовать в других ассоциациях и обозначениях точно так же, как стержневые сущности;могут обладать свойствами, т.е. иметь не только набор ключевых атрибутов, необходимых для указания связей, но и любое число других атрибутов, характеризующих связь. Например, ассоциации "Брак" из примеров и содержат ключевые атрибуты "Код_М", "Код_Ж" и "Табельный номер мужа", "Табельный номер жены", а также уточняющие атрибуты "Номер свидетельства", "Дата регистрации", "Место_регистрации", "Номер записи в книгу ЗАГС" и т.д.

Характеристическая сущность (характеристика) – это связь вида "многие-к-одной" или "одна-к-одной" между двумя сущностями (частный случай ассоциации). Единственная цель характеристики в рамках рассматриваемой предметной области состоит в описании или уточнении некоторой другой сущности. Необходимость в них возникает в связи с тем, что сущности реального мира имеют иногда многозначные свойства. Муж может иметь несколько жен (пример 2.3), книга – несколько характеристик переиздания (исправленное, дополненное, переработанное, ...) и т.д.Существование характеристики полностью зависит от характеризуемой сущности: женщины лишаются статуса жен, если умирает их муж.Для описания характеристики используется новое предложение ЯИМ, имеющее в общем случае вид:ХАРАКТЕРИСТИКА (атрибут 1, атрибут 2, ...) {СПИСОК ХАРАКТЕРИЗУЕМЫХ СУЩНОСТЕЙ}.

Page 4: Предмет Базы данных

Расширим также язык ER-диаграмм, введя для изображения характеристики трапецию:

Рассмотрим пример, связанный с зачислением сотрудников в различные отделы организации. При отсутствии жестких правил (сотрудник может одновременно зачисляться в несколько отделов или не зачисляться ни в один отдел) необходимо создать описание с ассоциацией Зачисление:Отделы (Номер отдела, Название отдела, ...)Служащие (Табельный номер, Фамилия, ...)Зачисление [Отделы M, Служащие N] (Номер отдела, Табельный номер, Дата зачисления).Однако, при условии, что каждый из сотрудников должен быть обязательно зачислен в один из отделов, можно создать описание с обозначением Служащие:Отделы (Номер отдела, Название отдела, ...)Служащие (Табельный номер, Фамилия, ... , Номер отдела, Дата зачисления)[Отделы]В данном примере служащие имеют независимое существование (если удаляется отдел, то из этого не следует, что также должны быть удалены служащие такого отдела). Поэтому они не могут быть характеристиками отделов и названы обозначениями. Обозначения используют для хранения повторяющихся значений больших текстовых атрибутов: "кодификаторы" изучаемых студентами дисциплин, наименований организаций и их отделов, перечней товаров и т.п.Описание обозначения внешне отличается от описания характеристики только тем, что обозначаемые сущности заключается не в фигурные скобки, а в квадратные:ОБОЗНАЧЕНИЕ (атрибут 1, атрибут 2, ...)[СПИСОК ОБОЗНАЧАЕМЫХ СУЩНОСТЕЙ].Как правило, обозначения не рассматриваются как полноправные сущности, хотя это не привело бы к какой-либо ошибке. Обозначения и характеристики не являются полностью независимыми сущностями, поскольку они предполагают наличие некоторой другой сущности, которая будет "обозначаться" или "характеризоваться". Однако они все же представляют собой частные случаи сущности и могут, конечно, иметь свойства, могут участвовать в ассоциациях, обозначениях и иметь свои собственные (более низкого уровня) характеристики. Подчеркнем также, что все экземпляры характеристики должны быть обязательно связаны с каким-либо экземпляром характеризуемой сущности. Однако допускается, чтобы некоторые экземпляры характеризуемой сущности не имели связей.

9. Понятие первичного и внешнего ключей. Напомним, что ключ или возможный ключ – это минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся. Каждая сущность обладает хотя бы одним возможным ключом. Один из них принимается за первичный ключ. При выборе первичного ключа следует отдавать предпочтение несоставным ключам или ключам, составленным из минимального числа атрибутов. Нецелесообразно также использовать ключи с длинными текстовыми значениями (предпочтительнее использовать целочисленные атрибуты). Так, для идентификации студента можно использовать либо уникальный номер зачетной книжки, либо набор из фамилии, имени, отчества, номера группы и может быть дополнительных атрибутов, так как не исключено появление в группе двух студентов (а чаще студенток) с одинаковыми фамилиями, именами и отчествами. Плохо также использовать в качестве ключа не номер блюда, а его название, например, " Закуска из плавленых сырков "Дружба" с ветчиной и соленым огурцом" или "Заяц в сметане с картофельными крокетами и салатом из красной капусты".Не допускается, чтобы первичный ключ стержневой сущности (любой атрибут, участвующий в первичном ключе) принимал неопределенное значение. Иначе возникнет противоречивая ситуация: появится не обладающий индивидуальностью, и, следовательно не существующий экземпляр стержневой сущности. По тем же причинам необходимо обеспечить уникальность первичного ключа.Теперь о внешних ключах:

Page 5: Предмет Базы данных

- Если сущность С связывает сущности А и В, то она должна включать внешние ключи, соответствующие первичным ключам сущностей А и В.

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

ассоциаций) используется новый обобщающий термин "Цель" или "Целевая сущность". Таким образом, при рассмотрении проблемы выбора способа представления ассоциаций и обозначений в базе данных основной вопрос, на который следует получить ответ: "Каковы внешние ключи?" И далее, для каждого внешнего ключа необходимо решить три вопроса:1. Может ли данный внешний ключ принимать неопределенные значения (NULL-значения)?2. Что должно случиться при попытке УДАЛЕНИЯ целевой сущности, на которую ссылается внешний ключ?3. Что должно происходить при попытке ОБНОВЛЕНИЯ первичного ключа целевой сущности, на которую ссылается некоторый внешний ключ? Таким образом, для каждого внешнего ключа в проекте проектировщик базы данных должен специфицировать не только поле или комбинацию полей, составляющих этот внешний ключ, и целевую таблицу, которая

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

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

NULL-значения не допустимыУДАЛЕНИЕ ИЗ (цель) КАСКАДИРУЕТСЯОБНОВЛЕНИЕ (первичный ключ цели) КАСКАДИРУЕТСЯУказанные спецификации представляют зависимость по существованию характеристических сущностей.10. Зна́чения, принима́емые внешним ключом в БД при ра́боте с да́нными.Вне5шний ключ (англ. foreign key) — понятие теории реляционных баз данных, относящееся к ограничениям целостности базы данных.Неформально выражаясь, внешний ключ представляет собой подмножество атрибутов некоторой переменной отношения R2, значения которых должны совпадать со значениями некоторого потенциального ключа некоторой переменной отношения R1. Формальное определение. Пусть R1 и R2 — две переменные отношения, не обязательно различные. Внешним ключом FK в R2 является подмножество атрибутов переменной R2 такое, что выполняются следующие требования:В переменной отношения R1 имеется потенциальный ключ CK такой, что FK и CK совпадают с точностью до переименования атрибутов (то есть переименованием некоторого подмножества атрибутов FK можно получить такое подмножество атрибутов FK’, что FK’ и CK совпадают как по именами, так и по типам атрибутов).В любой момент времени каждое значение FK в текущем значении R2 идентично значению CK в некотором кортеже в текущем значении R1. Иными словами, в каждый момент времени множество всех значений FK в R2 является (нестрогим) подмножеством значений CK в R1.При этом для данного конкретного внешнего ключа FK → CK отношение R1, содержащее потенциальный ключ, называют главным, целевым, или родительским отношением, а отношение R2, содержащее внешний ключ, называют подчинённым, или дочерним отношением.Поддержка внешних ключей также называется соблюдением ссылочной целостности. Реляционные СУБД поддерживают автоматический контроль ссылочной целостности.11. Целостность БД. Целостность (от англ. integrity – нетронутость, неприкосновенность, сохранность, целостность) – понимается как правильность данных в любой момент времени. Но эта цель может быть достигнута лишь в определенных пределах: СУБД не может контролировать правильность каждого отдельного значения, вводимого в базу данных (хотя каждое значение можно проверить на правдоподобность). Например, нельзя обнаружить, что вводимое значение 5 (представляющее номер дня недели) в действительности должно быть равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны принадлежать набору (1,2,3,4,5,6,7). Поддержание целостности базы данных может рассматриваться как защита данных от неверных изменений или разрушений (не путать с незаконными изменениями и разрушениями, являющимися проблемой безопасности). Современные СУБД имеют ряд средств для обеспечения поддержания целостности (так же, как и средств обеспечения поддержания безопасности).

Page 6: Предмет Базы данных

Выделяют три группы правил целостности:Целостность по сущностям.Целостность по ссылкам.Целостность, определяемая пользователем.Не допускается, чтобы какой-либо атрибут, участвующий в первичном ключе, принимал неопределенное значение.Значение внешнего ключа должно либо:быть равным значению первичного ключа цели;быть полностью неопределенным, т.е. каждое значение атрибута, участвующего во внешнем ключе должно быть неопределенным.Для любой конкретной базы данных существует ряд дополнительных специфических правил, которые относятся к ней одной и определяются разработчиком. Чаще всего контролируется:уникальность тех или иных атрибутов,диапазон значений (экзаменационная оценка от 2 до 5),принадлежность набору значений (пол "М" или "Ж").12. Реляционна́я структура́ да́нных.В конце 60-х годов появились работы, в которых обсуждались возможности применения различных табличных даталогических моделей данных, т.е. возможности использования привычных и естественных способов представления данных. Наиболее значительной из них была статья сотрудника фирмы IBM д-ра Э.Кодда (Codd E.F., A Relational Model of Data for Large Shared Data Banks. CACM 13: 6, June 1970), где, вероятно, впервые был применен термин "реляционная модель данных". Будучи математиком по образованию Э.Кодд предложил использовать для обработки данных аппарат теории множеств (объединение, пересечение, разность, декартово произведение). Он показал, что любое представление данных сводится к совокупности двумерных таблиц особого вида, известного в математике как отношение – relation (англ.) Наименьшая единица данных реляционной модели – это отдельное атомарное (неразложимое) для данной модели значение данных. Так, в одной предметной области фамилия, имя и отчество могут рассматриваться как единое значение, а в другой – как три различных значения. Доменом называется множество атомарных значений одного и того же типа. Так, на

рис. домен пунктов отправления (назначения) – множество названий населенных пунктов, а домен номеров рейса – множество целых положительных чисел. Смысл доменов состоит в следующем. Если значения двух атрибутов берутся из одного и того же домена, то, вероятно, имеют смысл сравнения, использующие эти два атрибута (например, для организации транзитного рейса можно дать запрос "Выдать рейсы, в которых время вылета из Москвы в Сочи больше времени прибытия из Архангельска в Москву"). Если же значения двух атрибутов берутся из различных доменов, то их сравнение, вероятно, лишено смысла: стоит ли сравнивать номер рейса со стоимостью билета? Отношение на доменах D1, D2, ..., Dn (не обязательно, чтобы все они были различны) состоит из заголовка и тела. На рис. 3.1 приведен пример отношения для расписания движения самолетов (рис. 1.1). Заголовок (на рис. 1.1 он назывался интерпретацией) состоит из такого фиксированного множества атрибутов A1, A2, ..., An,

что существует взаимно однозначное соответствие между этими атрибутами Ai и определяющими их доменами Di (i=1,2,...,n). Тело состоит из меняющегося во времени множества кортежей, где каждый кортеж состоит в свою очередь из множества пар атрибут-значение (Ai:Vi), (i=1,2,...,n), по одной такой паре для каждого атрибута Ai в заголовке. Для любой заданной пары атрибут-значение (Ai:Vi) Vi является значением из единственного домена Di, который связан с атрибутом Ai.Степень отношения – это число его атрибутов. Отношение степени один называют унарным, степени два – бинарным, степени три – тернарным, ..., а степени n – n-арным. Степень отношения "Рейс" (рис. 1.1) – 8.Кардинальное число или мощность отношения – это число его кортежей. Мощность отношения "Рейс" равна 10. Кардинальное число отношения изменяется во времени в отличие от его степени.Поскольку отношение – это множество, а множества по определению не содержат совпадающих элементов, то никакие два кортежа отношения не могут быть дубликатами друг друга в любой произвольно-заданный момент времени. Пусть R – отношение с атрибутами A1, A2, ..., An. Говорят, что множество атрибутов K=(Ai, Aj, ..., Ak) отношения R является возможным ключом R тогда и только тогда, когда удовлетворяются два независимых от времени условия:Уникальность: в произвольный заданный момент времени никакие два различных кортежа R не имеют одного и того же значения для Ai, Aj, ..., Ak.Минимальность: ни один из атрибутов Ai, Aj, ..., Ak не может быть исключен из K без нарушения уникальности.Каждое отношение обладает хотя бы одним возможным ключом, поскольку по меньшей мере комбинация всех его атрибутов удовлетворяет условию уникальности. Один из возможных ключей (выбранный произвольным

Page 7: Предмет Базы данных

образом) принимается за его первичный ключ. Остальные возможные ключи, если они есть, называются альтернативными ключами.Вышеупомянутые и некоторые другие математические понятия явились теоретической базой для создания реляционных СУБД, разработки соответствующих языковых средств и программных систем, обеспечивающих их высокую производительность, и создания основ теории проектирования баз данных. Однако для массового пользователя реляционных СУБД можно с успехом использовать неформальные эквиваленты этих понятий:Отношение – Таблица (иногда Файл),Кортеж – Строка (иногда Запись),Атрибут – Столбец, Поле.При этом принимается, что "запись" означает "экземпляр записи", а "поле" означает "имя и тип поля".13. Реляционна́я ба́за́ да́нных.Реляционная база данных – это совокупность отношений, содержащих всю информацию, которая должна храниться в БД. Однако пользователи могут воспринимать такую базу данных как совокупность таблиц. Так на рис. 3.2 показаны таблицы базы данных, построенные по инфологической модели базы данных "Питание" рис.

1. Каждая таблица состоит из однотипных строк и имеет уникальное имя.2. Строки имеют фиксированное число полей (столбцов) и значений (множественные поля и повторяющиеся группы недопустимы). Иначе говоря, в каждой позиции таблицы на пересечении строки и столбца всегда имеется в точности одно значение или ничего.3. Строки таблицы обязательно отличаются друг от друга хотя бы единственным значением, что позволяет однозначно идентифицировать любую строку такой таблицы.4. Столбцам таблицы однозначно присваиваются имена, и в каждом из них размещаются однородные значения данных (даты, фамилии, целые числа или денежные суммы).5. Полное информационное содержание базы данных представляется в виде явных значений данных и такой метод представления является единственным. В частности, не существует каких-либо специальных "связей" или указателей, соединяющих одну таблицу с другой. Так, связи между строкой с БЛ = 2 таблицы "Блюда" на рис. 3.2 и строкой с ПР = 7 таблицы продукты (для приготовления Харчо нужен Рис), представляется не с помощью указателей, а благодаря существованию в таблице "Состав" строки, в которой номер блюда равен 2, а номер продукта – 7.6. При выполнении операций с таблицей ее строки и столбцы можно обрабатывать в любом порядке безотносительно к их информационному содержанию. Этому способствует наличие имен таблиц и их столбцов, а также возможность выделения любой их строки или любого набора строк с указанными признаками (например, рейсов с пунктом назначения "Париж" и временем прибытия до 12 часов).14. Цели проектирова́ния реляционных ба́з да́нных.Только небольшие организации могут обобществить данные в одной полностью интегрированной базе данных. Чаще всего администратор баз данных (даже если это группа лиц) практически не в состоянии охватить и осмыслить все информационные требования сотрудников организации (т.е. будущих пользователей системы). Поэтому информационные системы больших организаций содержат несколько десятков БД, нередко распределенных между несколькими взаимосвязанными ЭВМ различных подразделений. (Так в больших городах создается не одна, а несколько овощных баз, расположенных в разных районах.)Отдельные БД могут объединять все данные, необходимые для решения одной или нескольких прикладных задач, или данные, относящиеся к какой-либо предметной области (например, финансам, студентам, преподавателям, кулинарии и т.п.). Первые обычно называют прикладными БД, а вторые – предметными БД (соотносящимся с предметами организации, а не с ее информационными приложениями). (Первые можно сравнить с базами материально-технического снабжения или отдыха, а вторые – с овощными и обувными базами.)

Page 8: Предмет Базы данных

Предметные БД позволяют обеспечить поддержку любых текущих и будущих приложений, поскольку набор их элементов данных включает в себя наборы элементов данных прикладных БД. Вследствие этого предметные БД создают основу для обработки неформализованных, изменяющихся и неизвестных запросов и приложений (приложений, для которых невозможно заранее определить требования к данным). Такая гибкость и приспосабливаемость позволяет создавать на основе предметных БД достаточно стабильные информационные системы, т.е. системы, в которых большинство изменений можно осуществить без вынужденного переписывания старых приложений.Основывая же проектирование БД на текущих и предвидимых приложениях, можно существенно ускорить создание высокоэффективной информационной системы, т.е. системы, структура которой учитывает наиболее часто встречающиеся пути доступа к данным. Поэтому прикладное проектирование до сих пор привлекает некоторых разработчиков. Однако по мере роста числа приложений таких информационных систем быстро увеличивается число прикладных БД, резко возрастает уровень дублирования данных и повышается стоимость их ведения.Таким образом, каждый из рассмотренных подходов к проектированию воздействует на результаты проектирования в разных направлениях. Желание достичь и гибкости, и эффективности привело к формированию методологии проектирования, использующей как предметный, так и прикладной подходы. В общем случае предметный подход используется для построения первоначальной информационной структуры, а прикладной – для ее совершенствования с целью повышения эффективности обработки данных.При проектировании информационной системы необходимо провести анализ целей этой системы и выявить требования к ней отдельных пользователей (сотрудников организации) [2, 3, 4, 6, 8, 9, 10]. Сбор данных начинается с изучения сущностей организации и процессов, использующих эти сущности (подробнее в приложении Б). Сущности группируются по "сходству" (частоте их использования для выполнения тех или иных действий) и по количеству ассоциативных связей между ними (самолет – пассажир, преподаватель – дисциплина, студент – сессия и т.д.). Сущности или группы сущностей, обладающие наибольшим сходством и (или) с наибольшей частотой ассоциативных связей объединяются в предметные БД. (Нередко сущности объединяются в предметные БД без использования формальных методик – по "здравому смыслу".) Для проектирования и ведения каждой предметной БД (нескольких БД) назначается АБД, который далее занимается детальным проектированием базы.Далее будут рассматриваться вопросы, связанные с проектированием отдельных реляционных предметных БД.Основная цель проектирования БД – это сокращение избыточности хранимых данных, а следовательно, экономия объема используемой памяти, уменьшение затрат на многократные операции обновления избыточных копий и устранение возможности возникновения противоречий из-за хранения в разных местах сведений об одном и том же объекте. Так называемый, "чистый" проект БД ("Каждый факт в одном месте") можно создать, используя методологию нормализации отношений. И хотя нормализация должна использоваться на завершающей проверочной стадии проектирования БД, мы начнем обсуждение вопросов проектирования с рассмотрения причин, которые заставили Кодда создать основы теории нормализации.15. Универса́льное отношение в реляционных БД.

Предположим, что проектирование базы данных "Питание" (рис.) начинается с выявления атрибутов и подбора данных, образец которых (часть блюд изготовленных и реализованных 1/9/94 г.) показан на рис. Этот вариант таблицы "Питание" не является отношением, так как большинство ее строк не атомарны. Атомарными являются лишь значения полей Блюдо, Вид, Рецепт (хотя он и большой), Порций и Дата_Р остальные же поля таблицы рис. 4.1 – множественные. Для придания таким данным формы отношения необходимо реконструировать таблицу. Наиболее просто это сделать с помощью простого процесса вставки,

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

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

Page 9: Предмет Базы данных

16. Причины норма́лиза́ции универса́льного отношения РБД.1. Избыточность. Данные практически всех столбцов многократно повторяются. Повторяются и некоторые наборы данных (Блюдо-Вид-Рецепт, Продукт-Калорийность, Поставщик-Город-Страна). Нежелательно повторение рецептов, некоторые из которых намного больше рецепта "Лобио" (см. рис. 2.3). И уж совсем плохо, что все данные о блюде (включая рецепт) повторяются каждый раз, когда это блюдо включается в меню.2. Потенциальная противоречивость (аномалии обновления). Вследствие избыточности можно обновить адрес поставщика в одной строке, оставляя его неизменным в других. Если поставщик кофе сообщил о своем переезде в Харбин и была обновлена строка с продуктом кофе, то у поставщика "Хуанхэ" появляется два адреса, один из которых не актуален. Следовательно, при обновлениях необходимо просматривать всю таблицу для нахождения и изменения всех подходящих строк.3. Аномалии включения. В БД не может быть записан новый поставщик ("Няринга", Вильнюс, Литва), если поставляемый им продукт (Огурцы) не используется ни в одном блюде. Можно, конечно, поместить неопределенные значения в столбцы Блюдо, Вид, Порций и Вес (г) для этого поставщика. Но если появится блюдо, в котором используется этот продукт, не забудем ли мы удалить строку с неопределенными значениями?По аналогичным причинам нельзя ввести и новый продукт (например, Баклажаны), который предлагает существующий поставщик (например, "Полесье"). А как ввести новое блюдо, если в нем используется новый продукт (Крабы)?4. Аномалии удаления. Обратная проблема возникает при необходимости удаления всех продуктов, поставляемых данным поставщиком или всех блюд, использующих эти продукты. При таких удалениях будут утрачены сведения о таком поставщике.17. Норма́лиза́ция БД.Нормализация – это разбиение таблицы на две или более, обладающих лучшими свойствами при включении, изменении и удалении данных. Окончательная цель нормализации сводится к получению такого проекта базы данных, в котором каждый факт появляется лишь в одном месте, т.е. исключена избыточность информации. Это делается не столько с целью экономии памяти, сколько для исключения возможной противоречивости хранимых данных. Каждая таблица в реляционной БД удовлетворяет условию, в соответствии с которым в позиции на пересечении каждой строки и столбца таблицы всегда находится единственное атомарное значение, и никогда не может быть множества таких значений. Любая таблица, удовлетворяющая этому условию, называется нормализованной. Фактически, ненормализованные таблицы, т.е. таблицы, содержащие повторяющиеся группы, даже не допускаются в реляционной БД. Всякая нормализованная таблица автоматически считается таблицей в первой нормальной форме, сокращенно 1НФ. Таким образом, строго говоря, "нормализованная" и "находящаяся в 1НФ" означают одно и то же. Однако на практике термин "нормализованная" часто используется в более узком смысле – "полностью нормализованная", который означает, что в проекте не нарушаются никакие принципы нормализации. Теперь в дополнение к 1НФ можно определить дальнейшие уровни нормализации – вторую нормальную форму (2НФ), третью нормальную форму (3НФ) и т.д. По существу, таблица находится в 2НФ, если она находится в 1НФ и удовлетворяет, кроме того, некоторому дополнительному условию, суть которого будет рассмотрена ниже. Таблица находится в 3НФ, если она находится в 2НФ и, помимо этого, удовлетворяет еще другому дополнительному условию и т.д.Таким образом, каждая нормальная форма является в некотором смысле более ограниченной, но и более желательной, чем предшествующая. Это связано с тем, что "(N+1)-я нормальная форма" не обладает некоторыми непривлекательными особенностями, свойственным "N-й нормальной форме". Общий смысл дополнительного условия, налагаемого на (N+1)-ю нормальную форму по отношению к N-й нормальной форме, состоит в исключении этих непривлекательных особенностей. Теория нормализации основывается на наличии той или иной зависимости между полями таблицы. Определены два вида таких зависимостей: функциональные и многозначные.Функциональная зависимость. Поле В таблицы функционально зависит от поля А той же таблицы в том и только в том случае, когда в любой заданный момент времени для каждого из различных значений поля А обязательно существует только одно из различных значений поля В. Отметим, что здесь допускается, что поля А и В могут быть составными.Например, в таблице Блюда (рис. 4.4) поля Блюдо и Вид функционально зависят от ключа БЛ, а в таблице Поставщики рис. 4.3 поле Страна функционально зависит от составного ключа (Поставщик, Город). Однако последняя зависимость не является функционально полной, так как Страна функционально зависит и от части ключа – поля Город.Полная функциональная зависимость. Поле В находится в полной функциональной зависимости от составного поля А, если оно функционально зависит от А и не зависит функционально от любого подмножества поля А.Многозначная зависимость. Поле А многозначно определяет поле В той же таблицы, если для каждого значения поля А существует хорошо определенное множество соответствующих значений В.18. Функциона́льна́я и многоза́да́чна́я за́висимость в БД.Полная функциональная зависимость. Поле В находится в полной функциональной зависимости от составного поля А, если оно функционально зависит от А и не зависит функционально от любого подмножества поля А.

Page 10: Предмет Базы данных

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

Для примера рассмотрим таблицу "Обучение" (рис.). В ней есть многозначная зависимость "Дисциплина-Преподаватель": дисциплина (в примере Информатика) может может читаться несколькими преподавателями (в примере Шипиловым и Голованевским). Есть и другая многозначная зависимость "Дисциплина-Учебник": при изучении Информатики используются учебники "Паскаль для всех" и "Язык Си". При этом Преподаватель и

Учебник не связныфункциональной зависимостью, что приводит к появлению избыточности (для добавление еще одного учебника придется ввести в таблицу две новых строки). Дело улучшается при замене этой таблицы на две: (Дисциплина-Преподаватель и Дисциплина-Учебник).19. Норма́льные формы для проектирова́ния БД.Таблица находится в первой нормальной форме (1НФ) тогда и только тогда, когда ни одна из ее строк не содержит в любом своем поле более одного значения и ни одно из ее ключевых полей не пусто.Таблица находится во второй нормальной форме (2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом.Рекомендация. При проведении нормализации таблиц, в которые введены цифровые (или другие) заменители составных и (или) текстовых первичных и внешних ключей, следует хотя бы мысленно подменять их на исходные ключи, а после окончания нормализации снова восстанавливать.Таблица находится в третьей нормальной форме (3НФ), если она удовлетворяет определению 2НФ и не одно из ее неключевых полей не зависит функционально от любого другого неключевого поля.Таблица находится в нормальной форме Бойса-Кодда (НФБК), если и только если любая функциональная зависимость между его полями сводится к полной функциональной зависимости от возможного ключа.Полной декомпозицией таблицы называют такую совокупность произвольного числа ее проекций, соединение которых полностью совпадает с содержимым таблицы.Таблица находится в пятой нормальной форме (5НФ) тогда и только тогда, когда в каждой ее полной декомпозиции все проекции содержат возможный ключ. Таблица, не имеющая ни одной полной декомпозиции, также находится в 5НФ. Четвертая нормальная форма (4НФ) является частным случаем 5НФ, когда полная декомпозиция должна быть соединением ровно двух проекций. Весьма не просто подобрать реальную таблицу, которая находилась бы в 4НФ, но не была бы в 5НФ.

20. Процедура́ норма́лиза́ции.Как уже говорилось, нормализация – это разбиение таблицы на несколько, обладающих лучшими свойствами при обновлении, включении и удалении данных. Теперь можно дать и другое определение: нормализация – это процесс последовательной замены таблицы ее полными декомпозициями до тех пор, пока все они не будут находиться в 5НФ. На практике же достаточно привести таблицы к НФБК и с большой гарантией считать, что они находятся в 5НФ. Разумеется, этот факт нуждается в проверке, однако пока не существует эффективного алгоритма такой проверки. Поэтому остановимся лишь на процедуре приведения таблиц к НФБК. Эта процедура основывается на том, что единственными функциональными зависимостями в любой таблице должны быть зависимости вида K->F, где K – первичный ключ, а F – некоторое другое поле. Заметим, что это следует из определения первичного ключа таблицы, в соответствии с которым K->F всегда имеет место для всех полей данной таблицы. "Один факт в одном месте" говорит о том, что не имеют силы никакие другие функциональные зависимости. Цель нормализации состоит именно в том, чтобы избавиться от всех этих "других" функциональных зависимостей, т.е. таких, которые имеют иной вид, чем K->F.1. Таблица имеет составной первичный ключ вида, скажем, (К1,К2), и включает также поле F, которое функционально зависит от части этого ключа, например, от К2, но не от полного ключа. В этом случае рекомендуется сформировать другую таблицу, содержащую К2 и F (первичный ключ – К2), и удалить F из первоначальной таблицы:Заменить T(K1,K2,F), первичный ключ (К1,К2), ФЗ К2->F на T1(K1,K2), первичный ключ (К1,К2), и T2(K2,F), первичный ключ К2.2. Таблица имеет первичный (возможный) ключ К, не являющееся возможным ключом поле F1, которое, конечно, функционально зависит от К, и другое неключевое поле F2, которое функционально зависит от F1. Решение здесь, по существу, то же самое, что и прежде – формируется другая таблица, содержащая F1 и F2, с первичным ключом F1, и F2 удаляется из первоначальной таблицы:Заменить T(K,F1,F2), первичный ключ К, ФЗ F1->F2 на T1(K,F1), первичный ключ К, и T2(F1,F2), первичный ключ F1.

Page 11: Предмет Базы данных

Для любой заданной таблицы, повторяя применение двух рассмотренных правил, почти во всех практических ситуациях можно получить в конечном счете множество таблиц, которые находятся в "окончательной" нормальной форме и, таким образом, не содержат каких-либо функциональных зависимостей вида, отличного от K->F. Для выполнения этих операций необходимо первоначально иметь в качестве входных данных какие-либо "большие" таблицы (например, универсальные отношения). Но нормализация ничего не говорит о том, как получить эти большие таблицы. В следующей главе будет рассмотрена процедура получения таких исходных таблиц, а здесь приведем примеры нормализации.Пример Применим рассмотренные правила для полной нормализации универсального отношения "Питание" (из вопроса 15).Шаг 1. Определение первичного ключа таблицы. Предположим, что каждое блюдо имеет уникальное название, относится к единственному виду и приготавливается по единственному рецепту, т.е. название блюда однозначно определяет его вид и рецепт. Предположим также, что название организации поставщика уникально для того города, в котором он расположен, и названия городов уникальны для каждой из стран, т.е. название поставщика и город однозначно определяют этого поставщика, а город – страну его нахождения. Наконец, предположим, что поставщик может осуществлять в один и тот же день только одну поставку каждого продукта, т.е. название продукта, название организации поставщика, город и дата поставки однозначно определяют вес и цену поставленного продукта. Тогда в качестве первичного ключа отношения "Питание" можно использовать следующий набор атрибутов: Блюдо, Дата_Р, Продукт, Поставщик, Город, Дата_П.Шаг 2. Выявление полей, функционально зависящих от части состваного ключа.Поле Вид функционально зависит только от поля Блюдо, т.е.Блюдо->Вид.Аналогичным образом можно получить зависимости:Блюдо->Рецепт(Блюдо, Дата_Р)->ПорцийПродукт->Калорийность(Блюдо, Продукт)->ВесГород->Страна(Поставщик, Город, Дата_П)->ЦенаШаг 3. Формирование новых таблиц.Полученные функциональные зависимости опредляют состав таблиц, которые можно сформировать из данных универсального отношения:Блюда (Блюдо, Вид)Рецепты (Блюдо, Рецепт)Расход (Блюдо, Дата_Р, Порций)Продукты (Продукт, Калорийность)Состав (Блюдо, Продукт, Вес (г))Города (Город, Страна)Поставки (Поставщик, Город, Дата_П, Вес (кг), Цена).Шаг 4. Корректировка исходной таблицы.После выделения из состава универсального отношения указанных выше таблиц, там остались лишь сведения о поставщиках, для хранения которых целесообразно создать таблицу Поставщики (Поставщик, Город),т.е. использовать часть исходного первичного ключа, так как остальные его части уже ничего не определяют. Таким образом, процедура последовательной нормализации позволила получить проект, лучший, чем приведен на рис. 21. Процедура́ проектирова́ния и синта́ксис описа́ния та́блиц.Процесс проектирования информационных систем является достаточно сложной задачей. Он начинается с построения инфологической модели данных, т.е. идентификации сущностей. Затем необходимо выполнить следующие шаги процедуры проектирования даталогической модели.1. Представить каждый стержень (независимую сущность) таблицей базы данных (базовой таблицей) и специфицировать первичный ключ этой базовой таблицы.2. Представить каждую ассоциацию (связь вида "многие-ко-многим" или "многие-ко-многим-ко-многим" и т.д. между сущностями) как базовую таблицу. Использовать в этой таблице внешние ключи для идентификации участников ассоциации и специфицировать ограничения, связанные с каждым из этих внешних ключей.3. Представить каждую характеристику как базовую таблицу с внешним ключом, идентифицирующим сущность, описываемую этой характеристикой. Специфицировать ограничения на внешний ключ этой таблицы и ее первичный ключ – по всей вероятности, комбинации этого внешнего ключа и свойства, которое гарантирует "уникальность в рамках описываемой сущности".4. Представить каждое обозначение, которое не рассматривалось в предыдущем пункте, как базовую таблицу с внешним ключом, идентифицирующим обозначаемую сущность. Специфицировать связанные с каждым таким внешним ключом ограничения.

Page 12: Предмет Базы данных

5. Представить каждое свойство как поле в базовой таблице, представляющей сущность, которая непосредственно описывается этим свойством.6. Для того чтобы исключить в проекте непреднамеренные нарушения каких-либо принципов нормализации, выполнить описанную в п. 4.6 процедуру нормализации.7. Если в процессе нормализации было произведено разделение каких-либо таблиц, то следует модифицировать инфологическую модель базы данных и повторить перечисленные шаги.8. Указать ограничения целостности проектируемой базы данных и дать (если это необходимо) краткое описание

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

СОЗДАТЬ ТАБЛИЦУ Блюда *( Стержневая сущность ) ПЕРВИЧНЫЙ КЛЮЧ ( БЛ ) ПОЛЯ ( БЛ Целое, Блюдо Текст 60, Вид Текст 7 ) ОГРАНИЧЕНИЯ ( 1. Значения поля Блюдо должны быть уникальными; при нарушении вывод сообщения "Такое блюдо уже есть". 2. Значения поля Вид должны принадлежать набору: Закуска, Суп, Горячее, Десерт, Напиток; при нарушении вывод сообщения "Можно лишь Закуска, Суп, Горячее, Десерт, Напиток");

СОЗДАТЬ ТАБЛИЦУ Состав *( Связывает Блюда и Продукты ) ПЕРВИЧНЫЙ КЛЮЧ ( БЛ, ПР ) ВНЕШНИЙ КЛЮЧ ( БЛ ИЗ Блюда NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Блюда КАСКАДИРУЕТСЯ ОБНОВЛЕНИЕ Блюда.БЛ КАСКАДИРУЕТСЯ) ВНЕШНИЙ КЛЮЧ ( ПР ИЗ Продукты NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Продукты ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Продукты.ПР КАСКАДИРУЕТСЯ) ПОЛЯ ( БЛ Целое, ПР Целое, Вес Целое ) ОГРАНИЧЕНИЯ ( 1. Значения полей БЛ и ПР должны принадлежать набору значений из соответствующих полей таблиц Блюда и Продукты; при нарушении вывод сообщения "Такого блюда нет" или "Такого продукта нет". 2. Значение поля Вес должно лежать в пределах от 0.1 до 500 г. ); 22. Инфологическа́я модель БД построенна́я с помощью языка́ «та́блицы-связи».

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

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

Page 13: Предмет Базы данных

Access1. Режим ма́стера́ созда́ние та́блиц, свойства́ полей. В Access используются три способа создания таблиц: путем ввода данных (by entering data), с помощью Конструктора таблиц (in Design view) и с помощью Мастера создания таблиц (by using wizard). Для каждого из этих способов существует специальный ярлык новых объектов в списке таблиц (рис. 2.3). Если вы создали новый файл базы данных, то, кроме этих ярлыков, в списке таблиц больше ничего нет. Для cоздание таблиц с помощью Мастера таблиц необходимо:Дважды щелкнуть левой кнопкой мыши на ярлыке Создание таблицы с помощью мастера (Create table by using wizard).В диалоговом окне Создание таблиц (Table Wizard) (рис. 2.7) выбрать назначение таблицы: Деловые (Business) (для иных целей можно выбрать и Личные (Personal)).В поле Образцы таблиц (Sample Tables) выбрать подходящую таблицу — Список рассылки (MailingList).Переместить нужные поля из списка Образцы полей (Sample Fields) в список Поля новой таблицы (Fields in my new table). Для этого следует воспользоваться кнопками со стрелками: > — переместить одно поле, » — переместить все поля.Повторять описанные в пп. 3—4 действия до тех пор, пока не будет создан подходящий перечень полей для новой таблицы.При необходимости переименовать какое-либо поле, нужно выделить его в списке Поля новой таблицы (Fields in my new table) и нажать кнопку Переименовать поле (Rename Field), затем ввести в диалоговом окне Переименование поля (Rename Field) новое имя поля и нажать кнопку ОК (рис. 2.8). Нажать кнопку Далее (Next).В следующем диалоговом окне в поле Задайте имя для новой таблицы (What do you want to name your table?) ввести имя новой таблицы "Список рассылки оповещений" (рис. 2.9).Выбрать способ определения ключа Microsoft Access автоматически определяет ключ (Yes, set a primary key for me) (имеется альтернатива Пользователь определяет ключ самостоятельно (No, I'll set the primary key)). Тогда в таблицу будет добавлено поле автоматической нумерации. Нажать кнопку Далее (Next).В случае, если было выбрано самостоятельное определение ключа, в поле со списком Выберите поле с уникальными для каждой записи данными (What field will hold data that is unique for each record?) необходимо выбрать имя поля, которое станет ключевым. Затем нужно определить тип данных, которые будут содержаться в ключевом поле. Мастер предлагает выбрать один из трех вариантов:Последовательные числа, автоматически присваиваемые каждой новой записи (Consecutive Numbers Microsoft Access assigns automatically to new record);Числа, вводимые пользователем при добавлении новых записей (Numbers I enter when I add new records);Сочетание чисел и символов, вводимое пользователем при добавлении новой записи (Numbers and/or letters I enter when I add new records).Нажать кнопку Далее (Next).В следующем окне Мастер таблиц предлагает установить связи между существующими таблицами и создаваемой таблицей (рис. 2.10). Он пытается сам создать связи между таблицами и предоставляет информацию о создаваемых связях пользователю в виде списка. При необходимости исправить связи нужно выбрать соответствующую строку списка и нажать кнопку Связи (Relationship). Например, выберите в списке строку не связана с "Клиенты" и нажмите кнопку Связи (Relationships).В окне Связи (Relationships) нужно выбрать тип связи с данной таблицей (рис. 2.11). Выберите переключатель Одной записи в таблице "Клиенты" будет соответствовать много записей таблицы "Список рассылки оповещений". Нажать кнопку ОК.В диалоговом окне Мастера таблиц (см. рис.2.10) нажать кнопку Далее (Next).Открыв последнее диалоговое окно, можно решить, что вы будете делать с таблицей дальше. Выберите переключатель Изменить структуру таблицы, чтобы перейти в режим Конструктора таблиц, и нажмите на кнопку Готово (Finish). Откроется окно Конструктора таблиц. 2. Та́блицы: режим конструктора́, свойства́ полей.Теперь мы познакомимся с режимом Конструктора. В режиме Конструктора таблицы создаются путем задания имен полей, их типов и свойств. Чтобы создать таблицу в режиме Конструктора, необходимо:Дважды щелкнуть левой кнопкой мыши на ярлыке Создание таблицы с помощью конструктора (Create table in Design View) или нажать на кнопку Создать (New) в верхней части окна базы данных, выбрать из списка в окне Новая таблица (New Table) элемент Конструктор (Design View) и нажать кнопку ОК. В том и в другом случае откроется пустое окно Конструктора таблиц.В окне Конструктора таблиц в столбец Имя поля (Field Name) ввести имена полей создаваемой таблицы.В столбце Тип данных (Data Type) для каждого поля таблицы выбрать из раскрывающегося списка тип данных, которые будут содержаться в этом поле.В столбце Описание (Description) можно ввести описание данного поля (не обязательно).В нижней части окна Конструктора таблиц на вкладках Общие (General) и Подстановка (Lookup) ввести свойства каждого поля или оставить значения свойств, установленные по умолчанию.После описания всех полей будущей таблицы нажать кнопку Закрыть (в верхнем правом углу окна таблицы).

Page 14: Предмет Базы данных

На вопрос Сохранить изменения макета или структуры таблицы <имя таблицы>? (Do you want to save changes to the design of table <имя таблицы>?), нажать кнопку Да (Yes).В окне Сохранить как (Save As) в поле Имя таблицы (Table Name) ввести имя создаваемой таблицы и нажать кнопку ОК.В ответ на. сообщение Ключевые поля не заданы (There is no primary key defined) и вопрос Создать ключевое поле сейчас? (Do you want to create a primary key now?) нажмите кнопку Да (Yes) если ключевое поле необходимо, или кнопку Нет (No) если такого не требуется.После указанных действий в списке таблиц в окне базы данных появятся имя и значок новой таблицы. Ввести данные в созданную таблицу можно, открыв таблицу в режиме Таблицы.Существуют также и другие варианты, создания таблиц. Можно, например, создать таблицу с помощью запроса на создание таблицы (см. гл. 8).Можно создавать таблицы путем импорта из других баз данных или создавая связи с такими внешними таблицами.3. Ма́ска́ ввода́.Если свойство Формат (Format) управляет тем, как данные отображаются в поле таблицы, то свойство Маска ввода (Input Mask) позволяет контролировать ввод данных в таблицу. И не только контролировать, но и упрощать процесс ввода. Маску используют в том случае, когда вводимые данные должны содержать определенные символы в некоторых позициях вводимой строки. Самым простым и ярким примером таких данных являются номера телефонов. Маска ввода должна обеспечить возможность вводить только цифры номера, а остальные символы (скобки вокруг кода города, дефис между цифрами номера) будут добавляться автоматически. Маска задается с помощью символов, приведенных в табл. 2.12.Символ маски Описание0 В данную позицию должна быть введена цифра. Знаки плюс (+) и минус (-) не допускаются9 В данную позицию должна быть введена цифра или пробел. Знаки плюс (+) и минус (-) не допускаются# В данную позицию должна быть введена цифра, пробел, знаки плюс (+) или минус (-)L В данную позицию должна быть введена буква? В данную позицию может быть введена буква или пробелA В данную позицию должна быть введена буква или цифраa В данную позицию должна быть введена буква, цифра или пробел& В данную позицию должен быть введен произвольный символ или пробелC В данную позицию может быть введен произвольный символ или пробел. Если пользователь ничего не введет, Access не занесет в эту позицию никаких данных. (точка) Десятичный разделитель (зависит от региональных установок в окне Язык и стандарты Панели управления Windows), (запятая) Разделитель групп разрядов (зависит от региональных установок в окне Язык и стандарты Панели управления Windows)-, / Разделители в значениях даты и времени (зависят от региональных установок в окне Язык и стандарты Панели управления Windows)< Преобразует все символы справа к нижнему регистру> Преобразует все символы справа к верхнему регистру! Указывает, что маску нужно заполнять справа налево. Этот символ следует использовать в том случае, когда символы в левой части маски являются необязательными. Его можно помещать в любой позиции маски\ Указывает, что следующий символ необходимо рассматривать в качестве постоянного символа, даже если он является специальным символом маски. Например, \А будет выводить в маске букву А"литерал" Вместо того чтобы многократно использовать символ обратного слэша (\), можно просто заключить любой литерал в двойные кавычки.Для того чтобы сформировать маску ввода, можно использовать Мастера масок ввода (Input Mask Wizard). Откройте в режиме Конструктора таблицу "Заказы" (Orders). Выделите поле "Дата размещения". Чтобы ввести маску ввода для этого поля, щелкните мышью по ячейке свойства Маска ввода (Input Mask). Нажмите небольшую кнопку с тремя точками (рис. 2.21), которая появится справа (эта кнопка называется кнопкой Построителя и будет встречаться еще во многих местах), и дальше следуйте указаниям мастера:В первом диалоговом окне вы можете выбрать нужную маску из списка (рис. 2.22). Если вы попытаетесь вводить данные в поле Проба (Try It), то сможете увидеть, как будут форматироваться вводимые вами символы. Нажмите кнопку Далее (Next).Во втором диалоговом окне вы увидите название маски, соответствующую ей строку символов, поле со списком Заполнитель (Placeholder character), в котором можно выбрать символ-указатель заполняемых при вводе позиций, и поле проверки работы маски. Вы имеете возможность скорректировать символьную строку маски, чтобы добиться желаемого эффекта. Нажмите кнопку Далее (Next).В последнем диалоговом окне нажмите кнопку Готово.Сформированная символьная строка маски отображается в поле Маска ввода (Input Mask) для поля "ДатаРазмещения" (OrderDate) (рис. 2.22). Маска ввода состоит из трех частей:символьной строки маски;

Page 15: Предмет Базы данных

символа 0. Это означает, что введенные в поле данные будут сохраняться вместе со специальными символами. Можно заменить 0 на 1 — тогда специальные символы маски не будут запоминаться в поле;символа заполнителя.4. Формирова́ние списков: фиксирова́нный на́бор, на́ основа́нии та́блиц.Сделать более простым ввод значений в поле позволяет операция подстановки. Используя эту операцию, можно выбирать значения поля из списка. Список значений может быть как фиксированным, так и содержаться в таблице или запросе. Сформировать столбец подстановок для поля помогает Мастер подстановок (Lookup Wizard). Давайте создадим столбец подстановок для поля "КодКлиента" в таблице "Список рассылки оповещений". Это даст нам возможность при вводе данных в эту таблицу вводить не коды клиентов, которые мы не знаем, а выбирать из списка название организации, в которой работает данное лицо. Чтобы использовать Мастера подстановок (Lookup Wizard), необходимо:Открыть таблицу "Поставщики предприятия" в режиме Конструктора.Выделить поле "КодКлиента" и выбрать из списка в столбце Тип данных (Data Туре) значение Мастер подстановок (Lookup Wizard) В открывшемся диалоговом окне Мастер подстановок (Lookup Wizard) выбрать способ задания значений: Объект "столбец подстановки" будет использовать значения из таблицы или запроса (I want the lookup column to look up the values in a table or query), т. к. в этом случае мы должны использовать данные из таблицы "Клиенты" (Customers). Нажать кнопку Далее (Next).В следующем диалоговом окне можно выбрать из списка таблицу или запрос, из которого будет осуществляться подстановка. Выбрать таблицу "Клиенты" (Customers) и нажать кнопку Далее (Next) В списке Доступные поля (Available Fields) выводятся все поля таблицы "Клиенты" (Customers). Переместить из списка доступных полей в список подстановки (Selected Fields) поля "КодКлиента" и "Название" и нажать кнопку Далее (Next)Просмотреть столбец подстановки, с помощью перетаскивания границы выбрать ширину столбца, а также оставить установленный по умолчанию флажок Скрыть ключевое поле (Hide key column). Действительно, нам не нужно в раскрывающемся списке видеть коды клиентов. Нажать кнопку Далее (Next).Ввести название столбца подстановок и нажать на кнопку Готово (Finish). При необходимости Мастер подстановок попросит сохранить те изменения, которые вы внесли в таблицу, прежде чем окончательно установит подстановки — ответьте Да (Yes). На этом процедура создания столбца подстановок заканчивается.На нижней панели окна Конструктора таблиц находится вкладка Подстановка (Lookup), в которой определяются свойства поля, относящиеся к подстановке. Если столбец подстановки для поля не определен, значение свойства Тип элемента управления (Display Control) для текстовых и числовых полей равно Поле (Text Box), для логического типа — Флажок (Check Box). При этом остальные свойства на вкладке Подстановка (Lookup) отсутствуют.Если вы хотите добавить к полю столбец подстановок, то установите для свойства Тип элемента управления (Display Control) значение Поле со списком (Combo Box) или Список (ListBox).[ Для просмотра таблицы в режиме Таблица эти поля абсолютно равноценны, различаются они в формах. Поле Список отображается на экране сразу в виде скроллируемого списка значений, а Поле со списком отображается в виде выпадающего списка.Наименование свойства ОписаниеТип источника строк (Row Source Type) Свойство определяет тип источника строк для списка или поля со списком. Может принимать три значения: Таблица или запрос (Table/Query), Список значений (Value List) и Список полей (Field List).Источник строк (Row Source) Свойство определяет источник данных элемента управления. При выборе типа источника строк Список значений (Value List) оно представляет собой список элементов, разделяемых точкой с запятой (;), в противном случае — имя таблицы или запроса или инструкцию языка SQL.Присоединенный столбец (Bound Column) Свойство определяет номер столбца списка или поля со списком, содержащего значение элемента управления. Если это свойство имеет значение 0, то в поле передается номер строки списка, если 1 и больше, то в поле передаются данные из соответствующего столбца списка. Значение этого свойства не может превышать значение свойства Число столбцов (Column Count).Число столбцов (Column Count) Свойство определяет число столбцов, выводимых в списке или в поле со списком. Если в качестве источника строк используется Таблица или запрос (Table/Query), то в списке будут выводиться столбцы таблицы, начиная с первого и заканчивая тем, который указан в значении данного свойства. Если в качестве источника строк используется список значений, то в списке будет выводиться указанное число столбцов, а данные в них будут располагаться построчно в последовательности, указанной в свойстве Источник строк (Row Source).Заглавия столбцов (Column Heads) Свойство определяет, используются ли первые элементы списка или поля со списком как заголовки столбцов.Ширина столбцов (Column Widths) Свойство определяет ширину столбцов списка или поля со списком. При использовании нескольких столбцов значения разделяются точкой с запятой (;). Задав нулевое значение, можно скрыть столбец.Число строк списка (List Rows) Свойство определяет максимальное число строк для поля со списком. Если количество элементов списка превысит указанное число строк, в списке появится линейка прокрутки.

Page 16: Предмет Базы данных

Ширина списка (List Width) Свойство определяет ширину раскрывающегося списка для поля со списком.Ограничиться списком (Limit to List) Свойство определяет, могут ли вводиться в поле со списком значения, не являющиеся элементами списка.5. Первичные ключи и внешние ключи.Выше неоднократно упоминалось понятие ключевого поля. Ключевое поле — это одно или несколько полей, комбинация значений которых однозначно определяет каждую запись в таблице. Если для таблицы определены ключевые поля, то Microsoft Access предотвращает дублирование или ввод пустых значений в ключевое поле. Ключевые поля используются для быстрого поиска и связи данных из разных таблиц при помощи запросов, форм и отчетов.В Microsoft Access можно выделить три типа ключевых полей: счетчик, простой ключ и составной ключ. Рассмотрим каждый из этих типов.Для создания ключевого поля типа Счетчик необходимо в режиме Конструктора таблиц:Включить в таблицу поле счетчика.Задать для него автоматическое увеличение на 1.Указать это поле в качестве ключевого путем нажатия на кнопку Ключевое поле (Primary Key) на панели инструментов Конструктор таблиц (Table Design).Если до сохранения созданной таблицы ключевые поля не были определены, то при сохранении будет выдано сообщение о создании ключевого поля. При нажатии кнопки Да (Yes) будет создано ключевое поле счетчика с именем Код (ID) и типом данных Счетчик (AutoNumber).Для создания простого ключа достаточно иметь поле, которое содержит уникальные значения (например, коды или номера). Если выбранное поле содержит повторяющиеся или пустые значения, его нельзя определить как ключевое. Для определения записей, содержащих повторяющиеся данные, можно выполнить запрос на поиск повторяющихся записей. Если устранить повторы путем изменения значений невозможно, следует либо добавить в таблицу поле счетчика и сделать его ключевым, либо определить составной ключ.Составной ключ необходим в случае, если невозможно гарантировать уникальность записи с помощью одного поля. Он представляет собой комбинацию нескольких полей. Для определения составного ключа необходимо:Открыть таблицу в режиме Конструктора.Выделить поля, которые необходимо определить как ключевые.Нажать кнопку Ключевое поле (Primary Key) на панели инструментов Конструктор таблиц (Table Design).Рассмотрим в качестве примера применения составного ключа таблицу "Заказано" (OrderDetails) базы данных (Northwind) (рис. 2.23).В данном случае в качестве составного ключа используются поля "Код заказа" (OrderlD) и "КодТовара" (ProductID), т. к. ни одно из этих полей в отдельности не гарантирует уникальность записи. При этом в таблице выводится не код товара, а наименование товара, т. к. поле "КодТовара" (ProductID) данной таблицы содержит подстановку из таблицы "Товары" (Products), а значения полей "КодТовара" (ProductID) этих таблиц связаны отношением "один-ко-многим" (одной записи таблицы "Товары" (Products) может соответствовать несколько записей таблицы "Заказано" (OrderDetails)). Оба поля могут содержать повторяющиеся значения. Так, один заказ может включать в себя несколько товаров, а в разные заказы могут включаться одинаковые товары. В то же время сочетание полей "КодЗаказа" (OrderlD) и "КодТовара" (ProductID) однозначно определяет каждую запись таблицы "Заказы" (OrderDetails).Чтобы изменить ключ, необходимо:Открыть таблицу в режиме Конструктора.Выбрать имеющиеся ключевые поля.Нажать на кнопку Ключевое поле (Primary Key), при этом кнопка должна принять положение Выкл., а из области выделения должны исчезнуть значки ключевого поля.Выбрать поле, которое необходимо сделать ключевым.Нажать на кнопку Ключевое поле (Primary Key). При этом в области выделения должен появиться значок ключевого поля.Чтобы удалить ключ, необходимо:Открыть таблицу в режиме Конструктора.Выбрать имеющееся ключевое поле (ключевые поля).Нажать на кнопку Ключевое поле (Primary Key), при этом кнопка должна принять положение Выкл., а из области выделения должен исчезнуть значок (значки) ключевого поля.6. Созда́ние связей на́ основе та́блиц. Схема́ да́нных.Для того чтобы было удобно просматривать, создавать, удалять и модифицировать связи между таблицами, в Microsoft Access используется схема данных (Relationships)Чтобы открыть схему данных, необходимо выполнить команду Сервис, Схема данных (Tools, Relationships). По умолчанию схема будет содержать все таблицы со связями. Поэтому сюда будет включена, например, наша новая таблица "Список рассылки оповещений", которая была связана с таблицей "Клиенты" (Customers) при помощи Мастера подстановок (см. разд. "Использование Мастера подстановок" выше в данной главе).Чтобы убрать какую-либо таблицу из схемы данных, необходимо щелкнуть правой кнопкой мыши на любом месте этой таблицы и из контекстного меню выбрать команду Скрыть таблицу (Hide table). Чтобы вновь добавить

Page 17: Предмет Базы данных

в эту схему свернутую таблицу ("Список рассылки оповещений") или таблицу, у которой связи еще не установлены, необходимо:Щелкнуть правой кнопкой мыши на свободном пространстве схемы данных и из контекстного меню выбрать команду Добавить таблицу (Show table).В диалоговом окне Добавление таблицы (Show table) раскрыть вкладку Таблицы (Tables), выбрать из списка таблицу "Список рассылки оповещений", и нажать кнопку Добавить (Add) Нажать кнопку Закрыть (Close), чтобы закрыть диалоговое окно Добавление таблицы (Show table).В данном случае связь между таблицами Access строит автоматически. Это происходит тогда, когда две таблицы имеют одинаковые названия связанных полей и согласованные типы данных, причем хотя бы в одной из таблиц связанное поле является ключевым.Если нужная связь автоматически не создана, ее можно создать двумя путями. Первый путь — графический. Следует выбрать в главной таблице поле для связи, нажать левую кнопку мыши и перетащить поле во вторую таблицу. Отпустить левую кнопку мыши над тем полем подчиненной таблицы, с которым устанавливается связь. После этого появится диалоговое окно Изменение связей (Edit Relationships)Альтернативный вариант — выбрать команду Связи, Изменить связь (Relationships, Edit Relationships) из главного меню Access. Эта команда появляется в меню, когда открыто окно Схема данных (Relationships).В диалоговом окне Изменение связей (Edit Relationships) можно выбрать из списков названия связанных таблиц и полей для связывания. Если отношение между таблицами "один-ко-многим", то слева из списка Таблица/запрос (Table/ Query) выбирается главная таблица и поле в этой таблице, а справа из списка Связанная таблица/запрос — подчиненная и соответственно поле в ней. Если отношение "один-к-одному", то порядок таблиц значения не имеет. Если вы устанавливали связь графически, то все поля в списках уже выбраны, и нужно только определить правила ссылочной целостности.Для этого устанавливают флажок Обеспечение целостности данных (Enforce Referential Integrity) и один или оба флажка: каскадное обновление связанных полей (Cascade Update Related Fields) и каскадное удаление связанных записей (Cascade Delete Related Records) (см. следующий раздел).При необходимости можно изменить параметры объединения, для чего требуется нажать кнопку Объединение (Join Type) и выбрать один из переключателейОбъединение только тех записей, в которых связанные поля обеих таблиц совпадают;Объединение ВСЕХ записей из <имя первой таблицы> и только тех записей из <имя второй таблицы>, в которых связанные поля совпадают;Объединение ВСЕХ записей из <имя второй таблицы> и только тех записей из <имя первой таблицы >, в которых связанные поля совпадают.По умолчанию устанавливается первый переключатель. Нажать кнопку ОККогда создается новая связь, можно также воспользоваться кнопкой Новое (Create New) и в окне Создание (Create New) ввести имена связываемых таблиц и имена полей, используемых для связи. Нажать кнопку ОК.После установки всех параметров связи необходимо нажать кнопку ОК в окне Параметры объединения (Edit Relationship) и закрыть окно Схема данных (Relationship), нажав на кнопку Закрыть в правом7. Простые за́просыЗапрос (query) – это средство выбора необходимой информации из базы данных. Вопрос, сформированный по отношению к базе данных, и есть запрос. Применяются два типа запросов: по образцу (QBE – Query by example) и структурированный язык запросов (SQL – Structured Query Language).При создании query необходимо определить:Поля в базе данных, по которым будет идти поиск информацииПредмет поиска в базе данныхПеречень полей в результате выполнения запросаВ окне база данных выбрать вкладку Запросы и дважды щелкнуть на пиктограмме Создание query с помощью мастера, появится окно Создание простых запросов.В окне мастера выбрать необходимую таблицу (таблицу - источник) из опции Таблицы и запросы и выбрать поля данных. Если query формируется на основе нескольких таблиц, необходимо повторить действия для каждой таблицы – источника.Затем в окне Мастера надо выбрать подробный или итоговый отчет и щелкнуть на кнопке Далее. После этого необходимо задать имя запроса и выбрать один из вариантов дальнейшего действия: Открыть query для просмотра данных или Изменить макет запроса и нажать кнопку Готово. В результате чего получите готовый query.8. За́прос на́ выборку.Создание запроса на выборку с помощью КонструктораС помощью конструктора можно создать следующие виды запросов:ПростойПо условиюПараметрическиеИтоговыеС вычисляемыми полями

Page 18: Предмет Базы данных

Чтобы вызвать Конструктор запросов, необходимо перейти в окно базы данных. В окне база данных необходимо выбрать вкладку Запросы и дважды щелкнуть на пиктограмме Создание запроса в режиме конструктора. Появится активное окно Добавление таблицы на фоне неактивного окна «Запрос: запрос на выборку».В окне Добавление таблицы следует выбрать таблицу – источник или несколько таблиц из представленного списка таблиц, на основе которых будет проводиться выбор данных, и щелкнуть на кнопке Добавить. После этого закрыть окно Добавление таблицы, окно «Запрос: запрос на выборку» станет активным.Окно Конструктора состоит из двух частей – верхней и нижней. В верхней части окна размещается схема данных запроса, которая содержит список таблиц – источников и отражает связь между ними.В нижней части окна находится Бланк построения запроса QBE (Query by Example), в котором каждая строка выполняет определенную функцию:Поле – указывает имена полей, которые участвуют в запросеИмя таблицы – имя таблицы, с которой выбрано это полеСортировка – указывает тип сортировкиВывод на экран – устанавливает флажок просмотра поля на экранеУсловия отбора - задаются критерии поискаИли – задаются дополнительные критерии отбораВ окне «Запрос: запрос на выборку» с помощью инструментов формируем query:Выбрать таблицу – источник, из которой производится выборка записей.Переместить имена полей с источника в Бланк запроса. Например, из таблицы Группы студентов отбуксировать поле Название в первое поле Бланка запросов, из таблицы Студенты отбуксировать поле Фамилии во второе поле Бланка запросов, а из таблицы Успеваемость отбуксировать поле Оценка в третье поле и из таблицы Дисциплины отбуксировать поле Название в четвертое поле Бланка запросов.Задать принцип сортировки. Курсор мыши переместить в строку Сортировка для любого поля, появится кнопка открытия списка режимов сортировки: по возрастанию и по убыванию. Например, установить в поле Фамилия режим сортировки – по возрастанию.В строке вывод на экран автоматически устанавливается флажок просмотра найденной информации в поле.В строке "Условия" отбора и строке "Или" необходимо ввести условия ограниченного поиска – критерии поиска. Например, в поле Оценка ввести - "отл/A", т.е. отображать все фамилии студентов, которые получили оценки отл/A.После завершения формирования запроса закрыть окно Запрос на выборку. Откроется окно диалога Сохранить – ответить Да (ввести имя созданного запроса, например, Образец запроса в режиме Конструктор) и щелкнуть ОК и вернуться в окно базы данных.Чтобы открыть query из окна базы данных, необходимо выделить имя запроса и щелкнуть кнопку Открыть, на экране появится окно запрос на выборку с требуемым именем.Чтобы внести изменения в query его необходимо выбрать щелчком мыши в окне базы данных, выполнить щелчок по кнопке Конструктор, внести изменения. Сохранить запрос, повторить его выполнение.9. За́просы с па́ра́метром.Параметрические запросыЗапросы, представляющие собой варианты базового запроса и незначительно отличающиеся друг от друга, называются параметрическими. В параметрическом запросе указывается критерий, который может изменяться по заказу пользователя.Последовательность создания параметрического запроса:Создать query в режиме конструктора или открыть существующий запрос в режиме конструктора, например «Образец запроса в режиме Конструктор».В Бланк запроса в строке Условия отбора ввести условие отбора в виде приглашения в квадратных скобках, например [Введите фамилию]Закрыть окно Запрос на выборку, на вопрос о сохранении изменения ответить – Да. Вернуться в окно базы данных, где созданный query будет выделен.Выполнить query, щелкнув по кнопке: Открыть. В появившемся на экране окне диалога «Введите значение параметра» надо ввести, например фамилию студента, информацию об успеваемости которого необходимо получить, выполнить щелчок по кнопке ОК.10. За́просы с вычислениями.Существует ряд вычислений, которые можно выполнить в запросе, например, найти сумму или среднее по значениям одного поля, перемножить значения двух полей. Результаты вычислений, выводящиеся в поле, не запоминаются в базовой таблице. Вместо этого, вычисления снова производятся всякий раз, когда выполняется запрос, поэтому результаты всегда представляют текущее содержимое базы данных. Обновить вычисленные результаты вручную невозможно.В запросе над полями могут производиться вычисления. Результат вычисления образует вычисляемое поле в таблице, создаваемой по запросу. При каждом выполнении запроса производится вычисление с использованием текущих значений полей. При вычислениях могут использоваться арифметические выражения и встроенные функции Access. Выражение вводится в бланк запроса в пустую ячейку строки Поле. В этой ячейке после нажатия клавиши Enter или перевода курсора в другую ячейку формируется имя поля ВыражениеN, где N —

Page 19: Предмет Базы данных

целое число, увеличивающееся на единицу для каждого нового создаваемого вычисляемого поля в запросе. Имя вычисляемого поля выводится перед выражением и отделяется от него двоеточием. Например,Выражение1: [Цена]*[Количество],где Цена и Количество — имена полей.Имя вычисляемого поля — Выражение1 — становится заголовком столбца в таблице с результатами выполнения запроса. Это имя можно изменить.В Access имеются встроенные функции, которые можно использовать в вычисляемых полях, например, функция Date формирует текущую дату; функция DLookup возвращает значение конкретного поля из записи связанной таблицы, не участвующей в запросе; статистические функции над полями подмножества записей, вычисляющие среднее значение, сумму, минимальное, максимальное значение.Для вычисляемых полей допускается сортировка, задание условий отбора и расчет итоговых значений, как и для любых других полей.11. За́прос на́ изменение та́блиц.Запрос на создание таблицы используется для сохранения результата запроса. Этот запрос основан на запросе на выборку, но в отличие от него сохраняет таблицу с результатами запроса. Необходимость в запросе на создание таблицы возникает при построении запроса на обновление полей таблицы с использованием операций группировки данных. В этом случае кроме обновляемой таблицы требуется таблица — источник данных.Рассмотрим пример запроса на создание таблицы, содержащей данные о количестве студентов в группах.Создадим запрос на выборку в режиме конструктораНа панели инструментов нажмем кнопку Групповые операции — в бланк запроса будет добавлена соответствующая строка. Заменим слово Группировка в столбце НС на функцию Count. Сохраним запрос под именем Число студентов в группах. реобразуем запрос на выборку в запрос на создание таблицы. Для этого в режиме конструктора выберем меню Запрос/Создание таблицы. В окне Создание таблицы введем имя таблицы — Число студентов. При открытии запроса будут выданы предупреждения о создании таблицы и о количестве добавляемых записей. При последующих открытиях — выдается предупреждение об удалении старой таблицы Число студентов. Для обновления данных в полях базовых таблиц может быть использован Запрос на обновление. Изменения вносятся в группу записей, отбираемых с помощью указанных пользователем условий отбора. Значения для изменений в полях определяются в бланке запроса в строке Обновление.Первоначально Запрос на обновление создается как Запрос на выборку, а затем в окне конструктора запросов превращается в запрос на обновление с помощью кнопки Обновление на панели инструментов или команды меню Запрос/Обновление. После выполнения этой команды в бланке запроса появляется строка Обновление.Для отбора обновляемых записей надо включить в бланк запроса поля, требующие обновления, а также поля, по которым задаются условия отбора. Условия отбора записываются так же, как при создании запроса на выборку.Для обновляемого поля в строку Обновление надо ввести значение или выражение, определяющее новое значение поля. Выражение можно создать с помощью построителя выражений.После выполнения команды Запрос/Запуск или нажатия соответствующей кнопки открывается диалоговое окно с сообщением о числе обновляемых записей и вопросом о продолжении операции обновления.Заметим, если в схеме данных установлен параметр Обеспечение целостности данных и Каскадное обновление связанных полей, то при обновлении ключевых полей результат зависит от взаимосвязей обновляемой таблицы с другими таблицами.Пример запроса на обновление показан в разделе "Основы создания макросов". С помощью запроса на добавление производится добавление записей из таблицы запроса в другую таблицу. Поэтому надо позаботиться, чтобы в запросе были сформированы записи с полями, соответствующими полям в другой таблице. Структура записи таблицы запроса может не полностью совпадать со структурой записи таблицы, в которую добавляются записи. В записи запроса может быть меньше полей, если на поля в таблице, куда добавляются записи, не наложено требование по обязательности их заполнения. Допускается несоответствие типов полей, если возможно преобразование типа данных одного поля в тип данных другого поля.Первоначально запрос на добавление создается как запрос на выборку из одной или нескольких взаимосвязанных таблицах. Затем в окне конструктора запросов он превращается в запрос на добавление с помощью кнопки Добавление на панели инструментов или команды меню Запрос/Добавление. При этом открывается диалоговое окно Добавление. В этом окне в поле Имя таблицы вводится или выбирается имя таблицы, в которую надо добавить записи.После выполнения этой команды в бланке запроса появляется строка Добавление.Для формирования добавляемых записей надо включить в бланк запроса поля, соответствующие определенным полям таблицы, в которую будет производиться добавление. Кроме того, в бланк запроса могут быть включены поля, по которым задаются условия отбора. Условия отбора вносятся в ячейки строки Условие отбора. Если в таблице, куда добавляются записи, есть ключ, ключевые поля должны быть обязательно внесены в бланк запроса.Для указания в строке Добавление имен полей таблицы получателя, в которые будут добавляться значения из соответствующих полей таблицы запроса, надо в каждой ячейке открыть список и выбрать нужное имя.Для предварительного просмотра записей, которые планируется добавить в таблицу, надо нажать кнопку Представление запроса на панели инструментов. Возврат в режим

Page 20: Предмет Базы данных

конструктора запросов производится по этой же кнопке.Для добавления записей надо нажать кнопку Запуск (Run) на панели инструментов. Открывается диалоговое окно с сообщением о числе обновляемых записей и вопросом о продолжении операции обновления.Те записи, добавление которых приведет к появлению совпадающих или пустых значений в ключевом поле, не будут добавлены. Записи не добавляются и в случае, если невозможно преобразование типа данных в добавляемых полях или не выполняются условия на значения.12. Созда́ние формы с помощью ма́стера́.Access предоставляет возможность вводить данные как непосредственно в таблицу, так и с помощью форм. Форма в БД - это структурированное окно, которое можно представить так, чтобы оно повторяло форму бланка. Формы создаются из набора отдельных элементов управления.Внешний вид формы выбирается в зависимости от того, с какой целью она создается. Формы Access позволяют выполнять задания, которые нельзя выполнить в режиме таблицы. Формы позволяют вычислять значения и выводить на экран результат. Источником данных для формы являются записи таблицы или запроса.Форма предоставляет возможности для:ввода и просмотра информации базы данныхизменения данныхпечатисоздания сообщенийВызвать Мастер форм можно несколькими способами. Один из них – выбрать Мастер форм в окне диалога Новая форма и щелкнуть на кнопке ОК. Откроется окно диалога Создание форм, в котором необходимо отвечать на вопросы каждого текущего экрана Мастера и щелкать на кнопке Далее. В первом окне необходимо выбрать поля из источника данных (таблиц или запросов). Для этого надо открыть список Таблицы и запросы, щелкнув на кнопку, справа. Затем доступные поля требуется перевести в Выбранные поля, выделив их и щелкнув на кнопку >>. Например, выберем источник – таблицу Студенты и все ее поля, а затем необходимо щелкнуть на кнопке

Далее В этом окне надо выбрать внешний вид формы, например в один столбец и щелкнуть Далее. После выбора стиля формы (например, официальный), требуется перейти в последнее окно, щелкнув на кнопке Далее. В последнем окне Мастера требуется ввести имя формы и указать дальнейшие действия: Открыть форму для просмотра и ввода данных; Изменить макет формы.После ввода имени формы (например, Студенты), выбора режима: «Открыть форму для просмотра и ввода данных» и щелчка на кнопке Готово, получим следующую форму для ввода и просмотра записей в таблицу Студенты.13. Реда́ктирова́ние формы.Для создания формы Студенты необходимо выполнить следующие действия: 1. Запустить программу Microsoft Access и открыть БД2. В окне БД выбрать вкладку Формы. Выполнить щелчок по кнопке Создать. Появится диалоговое окно Новая форма. В этом окне необходимо выбрать из списка пункт Конструктор. Затем в списке "Выберите в качестве источника данных таблицу или запрос" выбрать имя таблицы (например, Студент). Выполнить щелчок по кнопке ОК. На экране появится окно Форма 1.3. Если на экране отсутствует список полей выбранной для построения формы таблицы, выбрать пункт меню Вид / Список полей. 4. Поля из списка переместить на форму (по одному или предварительно выделив с использованием клавиши Shift и мыши, для выделения всех полей выполнить двойной щелчок мышью на заголовке окна Список полей) 5. Разместить поля на форме в нужных местах по разработанному образцу 6. Перемещение полей и их имен по форме производиться следующим образом: Выделить объект (поле с именем) щелчком мыши. Вокруг него появятся маркеры перемещения и изменения размеров. Перемещать поле можно вместе с привязанным к нему именем или отдельно от него. Для перемещения поместить указатель мыши на квадратик, находящийся в левом верхнем углу элемента. Указатель мыши в виде ладони позволяет перемещать объект вместе с привязанным к нему именем, в виде ладони с вытянутым указательным пальцем - перемещает один объект.Нажать кнопку мыши и, удерживая ее, буксировать поле или его имя в нужное место в форме. Затем отпустить кнопку мыши.Для изменения надписи, связанной с полем необходимо выполнить на ней двойной щелчок мышью. В открывшемся диалоговом окне Надпись выбрать вкладку Макет и выполнить необходимые изменения. Затем закрыть окно.Для изменения размеров поместить курсор на размерные маркеры, при этом курсор примет вид двунаправленной стрелки. Нажать кнопку мыши, буксировать в нужном направлении, затем отпустить кнопку мыши.Для удаления поля выделить его, нажать клавишу Delete или выбрать команду Правка / Удалить.

Page 21: Предмет Базы данных

7. Сохранить форму, выбрав из меню Файл команду Сохранить как, и в открывшемся окне выбрать режим сохранения «в текущей базе данных», затем щелчок по кнопке ОК. 8. Просмотреть форму в режиме Конструктора, выполнив щелчок по кнопке Открыть. 9. Если вид формы не удовлетворяет, открыть форму в режиме Конструктор и внести необходимые изменения, затем сохранить форму Файл — Сохранить или выполнить щелчок по пиктограмме Сохранить.14. Построитель выра́жений.Ввод выражений возможен в. среде Access не только вручную, но и с помощью удобного инструмента, называемого Построитель выражений (Expression Builder). Построитель выражений (Expression Builder) вызывается всякий раз, когда в поле свойства объекта Access, например в ячейке бланка Конструктора запросов, вы щелкаете кнопку Построителя (кнопка с тремя точками) или нажимаете кнопку Построить (Build) на панели инструментов. Для демонстрации работы Построителя выражений воспользуемся демонстрационной базой "Борей" (Northwind). После создания и проверки запроса можно применить критерий отбора, чтобы ограничить количество записей в результирующем множестве запроса: Выберите запрос "Счета" (Invoices) и, нажав кнопку Конструктор панели инструментов в окне базы данных, перейдите в режим Конструктора запроса. Поместите курсор на строку Условие отбора (Criteria) поля, для которого вы хотите установить критерий выборки, скажем, поля "СтранаПолучателя" (Ship Country). Нажмите кнопку Построителя выражений Построить (Build) на панели инструментов Access для вывода окна Построитель выражений (Expression Builder). Другой способ — нажмите правую кнопку мыши в строке Условие отбора (Criteria) и выберите из меню команду Построить (Build). В поле выражений вверху окна Построителя выражений введите требуемое выражение. На рис. 4.46 показан пример выражения Like "Ф*", которое работает в строке Условие отбора (Criteria) поля "СтранаПолучателя" (Ship Country). Для ускорения ввода Like можно воспользоваться кнопкой Like под окном ввода выражений.Нажмите кнопку ОК для возврата в бланк запроса. В поле, где расположен курсор, Построитель выражений помещает построенное выражениеДля отображения результатов выполненного запроса нажмите кнопку Запуск (Open) на панели инструментов При желании изменить условие отбора возвратитесь к режиму Конструктора, выделите ненужное выражение и сотрите его нажатием клавиши <Delete>.Повторите шаги со 2 по 7 для заполнения всех условий отбора, которые хотите попробовать. Если вы совершите ошибку в синтаксисе выражений, Access известит о ней сообщением об ошибке. Смелее экспериментируйте! По завершении экспериментов сохраните ваш запрос с описательным именем. Как видите, создание выражений является не таким уж сложным делом, особенно с таким помощником, как Построитель выражений.15. Поля со списка́ми. Подста́новочные списки.Элемент управления Поле со списком (ComboBox) во многом аналогичен элементу управления Список (ListBox). Применяется он в формах для той же самой цели, т. е. когда требуется, чтобы значение поля в таблице не вводилось вручную, а выбиралось из известного списка значений. Как правило, этими списками являются различного рода справочники. Отличий между этими типами элементов управления три:Поле со списком позволяет не только выбирать значение из списка, но и вводить его прямо в поле ввода;Поле со списком не накладывает таких ограничений на длину списка, как Список, т.к. в нем отображается только текущее значение, а остальные значения выводятся, когда пользователь щелкает мышью по стрелке вниз с правой стороны поля. Соответственно, элемент Поле со списком занимает на форме меньше места, чем элемент Список;Поле со списком позволяет выбрать только один элемент из списка.Основные свойства для элемента управления Поле со списком (Combo Box) такие же, как и у элемента управления Список (List Box), однако есть дополнительные свойства, которые определяют формат вывода данных в текстовую часть поля: Формат поля (Format), Число десятичных знаков (Decimal Places), Маска ввода (Input Mask) (рис. 9.17).Еще два дополнительных свойства определяют особенности работы поля со списком:Ограничиться списком (Limit To List). Это свойство может иметь значение Да (Yes), и тогда значение, которое вводится в поле, должно обязательно совпадать с одним из элементов списка, или Нет (No), и тогда список может дополняться значениями, вводимыми в текстовую часть поля со списком. Если значение этого поля Да, а вводимое значение не совпадает ни с одним из элементов списка, Access выдает сообщение об ошибке. Все ситуации, возникающие при вводе нового значения в поле, могут быть обработаны с помощью макроса или процедуры VBA, например, чтобы расширить список значений (см. также разд. "Применение макросов" гл. 11).Автоподстановка (Auto Expand). Это свойство обычно имеет значение Да, что обеспечивает удобный выбор значения из списка. Так как списки в данном случае могут быть длинными, например список клиентов, прокручивать их в поисках нужного значения неудобно. Однако можно просто ввести необходимое значение в текстовую часть поля. При этом Access автоматически подставит в поле то значение из списка, у которого первые буквы совпадают с введенными. Обычно поле со списком используется для.тех полей базовой таблицы, которые

Page 22: Предмет Базы данных

служат внешними ключами, т. е. содержат значения, соответствующие первичным ключам записей в какой-либо другой таблице. В таблице такие поля обычно определяют как поля подстановки, т. е. при отображении этих полей отображается не то значение, которое содержится в данном поле, а соответствующее значение из связанной таблицы (ведь ключом часто является ничем не примечательный код) (см. также разд. "Создание таблиц"гл. 2). В этом случае Мастер форм при создании формы автоматически создаст для таких полей поля со списком и задаст их свойства.16. Гла́вные и подчиненные формы.Для создания элементов кнопочной формы "Формы ввода данных" необходимо запустить базу данных (например, «Успеваемость студентов» с главной кнопочной формой) и выполнить команду Сервис / Служебные программы / Диспетчер кнопочных форм. Откроется окно "Диспетчер кнопочных форм". Затем нужно выделить «Формы ввода данных» в окне «Диспетчер кнопочных форм»и щелкнуть на кнопке Изменить, откроется окно диалога «Изменение страницы кнопочной формы».В этом окне щелкаем на кнопке «Создать», откроется новое окно «Изменение страницы кнопочной формы»,в котором выполняем:вводим текст: Студенты;выбираем из раскрывающегося списка команду: Открыть форму для изменения;выбираем из списка кнопочную форму: Студенты, щелкаем на кнопке «ОК».В окне «Изменение страницы кнопочной формы» отобразится элемент «Студенты». После создания по такой же технологии элемента «Группы студентов», он тоже будет отображаться в окне.Далее требуется создать кнопку возврата в главную кнопочную форму, для этого щелкаем на кнопке «Создать» и в появившемся окне выбираем команду «Перейти к кнопочной форме», выбираем «Главная кнопочная форма» и вводим «Перейти к главной кнопочной форме». Нажимаем на кнопке «ОК»и закрываем окно «Изменение страницы кнопочной формы».Запустим главную кнопочную форму в окне БД, в которой щелкнем на кнопке "Формы ввода данных", откроется "Формы ввода данных".Создание элементов для кнопочной формы "Отчеты" осуществляется по той же технологии, в результате получим. Технология создания подчиненной кнопочной формы "Запросы" будет рассмотрено в следующем разделе. Главная кнопочная форма создается с целью навигации по базе данных, т.е. она может использоваться в качестве главного меню БД. Элементами главной кнопочной формы являются объекты форм и отчётов. Запросы и таблицы не являются элементами главной кнопочной формы. Поэтому для создания кнопок Запросы или Таблицы на кнопочной форме можно использовать макросы. Сначала в окне базы данных создают макросы «Открыть Запрос» или «Открыть Таблицу» с уникальными именами, а затем в кнопочной форме создают кнопки для вызова этих макросов. Для одной базы данных можно создать несколько кнопочных форм. Кнопки следует группировать на страницах кнопочной формы таким образом, чтобы пользователю было понятно, в каких кнопочных формах можно выполнять определенные команды (запросы, отчеты, ввода и редактирования данных). Необходимо отметить, что на подчиненных кнопочных формах должны быть помещены кнопки возврата в главную кнопочную форму. Технология создания кнопочных форм следующая:1) создать страницу главной кнопочной формы (ГКФ);2) создать необходимое количество страниц подчиненных кнопочных форм (например, формы для ввода данных, для отчетов, для запросов и т.д.);3) создать элементы главной кнопочной формы;4) создать элементы для кнопочных форм отчетов и форм ввода или изменения данных;5) создать макросы для запросов или для таблиц с уникальными именами;6) создать элементы для кнопочных форм запросов или таблиц.Структура кнопочных форм может быть представлена в следующем виде

Для создания главной кнопочной формы и ее элементов необходимо открыть базу данных, (например, «Успеваемость_ студентов») и выполнить команду Сервис / Служебные программы / Диспетчер кнопочных форм. Если кнопочная форма ранее не создавалась, то откроется окно диалога «Диспетчер кнопочных форм», в котором надо нажать кнопку «Да», тем самым подтвердить создание кнопочной формы. В результате будет создана страница Главной кнопочной формы. Далее можно создать еще три страницы кнопочной формы: Формы ввода данных, Отчеты и Запросы. Для этого следует щелкнуть на кнопке «Создать» и в появившемся окне ввести имя новой страницы «Формы ввода данных» и щелкнуть на кнопке «ОК». Будет создана страница кнопочной формы «Формы ввода данных». Аналогичным образом надо создать еще две страницы, в итоге получим четыре

Page 23: Предмет Базы данных

страницы кнопочных форм, которые отображаются в окне «Диспетчер кнопочных форм». После этого создаем элементы ГКФ, для этого в «Окне диспетчер кнопочных форм» выделяем страницу «Главная кнопочная форма» и щелкаем «Изменить», откроется новое окно «Изменение страниц кнопочной формы». В этом окне щелкаем на

кнопке «Создать», откроется новое окно «Изменение элемента кнопочной формы», в котором выполняем следующее:вводим текст: Формы для ввода данных;выбираем из раскрывающегося списка команду: Перейти к кнопочной форме;выбираем из списка кнопочную форму: Ввод данных в формы, щелкаем на кнопке «ОК».В окне «Изменение страницы кнопочной формы» отобразится элемент кнопочной формы «Формы для ввода данных».Аналогичным методом надо создать элементы: «Запросы» и «Отчеты», а затем элемент (кнопку) "Выход из БД". В результате в окне «Изменение страницы кнопочной формы» будут отображаться все элементы главной кнопочной формы. Кнопочная форма появится в списке в области окна базы данных на вкладке Формы на панели Объекты, а на вкладе Таблицы в списках появится таблица Switchboard Items. Дважды щелкнув на надписи "Кнопочная форма", откроется Главная кнопочная форма. Для того чтобы эта форма отображалась при запуске базы данных, необходимо выполнить команду Сервис/Программы запуска, и в открывшемся окне выбрать "Кнопочная форма" из раскрывающегося списка, кроме того, надо снять флажки Окно базы данных и Строка состояния. Можно также ввести заголовок и значок приложения. Но на этом создание кнопочных форм еще не законченно, так как на подчиненных кнопочных формах (Формы ввода данных, Отчеты, Запросы) нет элементов. Каким образом поместить элементы на подчиненные формы рассмотрим в следующем разделе.19. Созда́ние отчета́.2.4.6. Создание отчета как объекта базы данныхОтчет – это форматированное представление данных, которое выводится на экран, в печать или файл. Они позволяют извлечь из базы нужные сведения и представить их в виде, удобном для восприятия, а также предоставляют широкие возможности для обобщения и анализа данных.При печати таблиц и запросов информация выдается практически в том виде, в котором хранится. Часто возникает необходимость представить данные в виде отчетов, которые имеют традиционный вид и легко читаются. Подробный отчет включает всю информацию из таблицы или запроса, но содержит заголовки и разбит на страницы с указанием верхних и нижних колонтитулов.Microsoft Access отображает в отчете данные из запроса или таблицы, добавляя к ним текстовые элементы, которые упрощают его восприятие.К числу таких элементов относятся:Заголовок. Этот раздел печатается только в верхней части первой страницы отчета. Используется для вывода данных, таких как текст заголовка отчета, дата или констатирующая часть текста документа, которые следует напечатать один раз в начале отчета. Для добавления или удаления области заголовка отчета необходимо выбрать в меню Вид команду Заголовок/примечание отчета.Верхний колонтитул. Используется для вывода данных, таких как заголовки столбцов, даты или номера страниц, печатающихся сверху на каждой странице отчета. Для добавления или удаления верхнего колонтитула необходимо выбрать в меню Вид команду Колонтитулы. Microsoft Access добавляет верхний и нижний колонтитулы одновременно. Чтобы скрыть один из колонтитулов, нужно задать для его свойства Высота значение 0. Область данных, расположенная между верхним и нижним колонтитулами страницы. Содержит основной текст отчета. В этом разделе появляются данные, распечатываемые для каждой из тех записей в таблице или запросе, на которых основан отчет. Для размещения в области данных элементов управления используют список полей и панель элементов. Чтобы скрыть область данных, нужно задать для свойства раздела Высота значение 0. Нижний колонтитул. Этот раздел появляется в нижней части каждой страницы. Используется для вывода данных, таких как итоговые значения, даты или номера страницы, печатающихся снизу на каждой странице отчета. Примечание. Используется для вывода данных, таких как текст заключения, общие итоговые значения или подпись, которые следует напечатать один раз в конце отчета. Несмотря на то, что в режиме Конструктора раздел "Примечание" отчета находится внизу отчета, он печатается над нижним колонтитулом страницы на последней странице отчета. Для добавления или удаления области примечаний отчета необходимо выбрать в меню Вид команду Заголовок/примечание отчета. Microsoft Access одновременно добавляет и удаляет области заголовка и примечаний отчета В Microsoft Access можно создавать отчеты различными способами:КонструкторМастер отчетов

Page 24: Предмет Базы данных

Автоотчет: в столбецАвтоотчет: ленточныйМастер диаграммПочтовые наклейкиМастер позволяет создавать отчеты с группировкой записей и представляет собой простейший способ создания отчетов. Он помещает выбранные поля в отчет и предлагает шесть стилей его оформления. После завершения работы Мастера полученный отчет можно доработать в режиме Конструктора. Воспользовавшись функцией Автоотчет, можно быстро создавать отчеты, а затем вносить в них некоторые изменения.Для создания Автоотчета необходимо выполнить следующие действия:В окне базы данных щелкнуть на вкладке Отчеты и затем щелкнуть на кнопке Создать. Появится диалоговое окно Новый отчет. Выделить в списке пункт Автоотчет: в столбец или Автоотчет: ленточный. В поле источника данных щелкнуть на стрелке и выбрать в качестве источника данных таблицу или запрос.Щелкнуть на кнопке ОК. Мастер автоотчета создает автоотчет в столбец или ленточный (по выбору пользователя), и открывает его в режиме Предварительного просмотра, который позволяет увидеть, как будет выглядеть отчет в распечатанном виде. В меню Файл щелкнуть на команде Сохранить. В окне Сохранение в поле Имя отчета указать название отчета и щелкнуть на кнопке ОК. Изменение масштаба отображения отчетаДля изменения масштаба отображения пользуются указателем — лупой. Чтобы увидеть всю страницу целиком, необходимо щелкнуть в любом месте отчета. На экране отобразится страница отчета в уменьшенном масштабе.Снова щелкнуть на отчете, чтобы вернуться к увеличенному масштабу отображения. В увеличенном режиме представления отчета, точка, на которой вы щелкнули, окажется в центре экрана. Для пролистывания страниц отчета пользуются кнопками перехода внизу окна. Печать отчета Для печати отчета необходимо выполнить следующее:В меню Файл щелкнуть на команде Печать. В области Печатать щелкнуть на варианте Страницы.Чтобы напечатать только первую страницу отчета, введите 1 в поле "с" и 1 в поле "по".Щелкнуть на кнопке ОК. Прежде чем печатать отчет, целесообразно просмотреть его в режиме Предварительного просмотра, для перехода к которому в меню Вид нужно выбрать Предварительный просмотр. Если при печати в конце отчета появляется пустая страница, убедитесь, что параметр Высота для примечаний отчета имеет значение 0. Если при печати пусты промежуточные страницы отчета, убедитесь, что сумма значений ширины формы или отчета и ширины левого и правого полей не превышает ширину листа бумаги, указанную в диалоговом окне Параметры страницы (меню Файл).При разработке макетов отчета руководствуйтесь следующей формулой: ширина отчета + левое поле + правое поле <= ширина бумаги. Для того чтобы подогнать размер отчета, необходимо использовать следующие приемы:изменить значение ширины отчета; уменьшить ширину полей или изменить ориентацию страницы.1. Запустите программу Microsoft Access. Откройте БД (например, учебную базу данных «Деканат»).2. Создайте Автоотчет: ленточный, используя в качестве источника данных таблицу (например, Студенты). Отчет открывается в режиме Предварительного просмотра, который позволяет увидеть, как будет выглядеть отчет в распечатанном виде3. Перейдите в режим Конструктора и выполните редактирование и форматирование отчета. Для перехода из режима предварительного просмотра в режим конструктора необходимо щелкнуть команду Закрыть на панели инструментов окна приложения Access. На экране появится отчет в режиме Конструктора.Редактирование: 1) удалите поля код студента в верхнем колонтитуле и области данных; 2) переместите влево все поля в верхнем колонтитуле и области данных. 3) Измените надпись в заголовке страницы В разделе Заголовок отчета выделить надпись Студенты.

Page 25: Предмет Базы данных

Поместите указатель мыши справа от слова Студенты, так чтобы указатель принял форму вертикальной черты (курсора ввода), и щелкните в этой позиции. Введите НТУ «ХПИ» и нажмите Enter. 4) Переместите Надпись. В Нижнем колонтитуле выделить поле =Now() и перетащить его в Заголовок отчета под название Студенты. Дата будет отображаться под заголовком.5) На панели инструментов Конструктор отчетов щелкнуть на кнопке Предварительный просмотр, чтобы просмотреть отчетФорматирование: 1) Выделите заголовок Студенты НТУ «ХПИ»2) Измените гарнитуру, начертание и цвет шрифта, а также цвет заливки фона.3) На панели инструментов Конструктор отчетов щелкнуть на кнопке Предварительный просмотр, чтобы просмотреть отчет.Изменение стиля: Для изменения стиля выполните следующее:На панели инструментов Конструктора отчетов щелкнуть на кнопке Автоформат, откроется диалоговое окно Автоформат. В списке Стили объекта "отчет - автоформат" щелкнуть на пункте Строгий и затем щелкнуть на кнопке ОК. Отчет будет отформатирован в стиле Строгий. Переключится в режим Предварительный просмотр. Отчет отобразится в выбранном вами стиле. Впредь все отчеты созданные с помощью функции Автоотчет будут иметь стиль Строгий, пока вы не зададите другой стиль в окне Автоформат. Сохранить и закрыть отчет.18. Созда́ние ма́кросов.Открыть окно Конструктор макросов (Macro Design) для создания нового макроса можно двумя способами:Раскройте список макросов в окне База данных (Database), щелкнув левой кнопкой мыши по ярлыку Макросы (Macros), и нажмите кнопку Создать (New) в верхней части окна (рис. 11.1).Щёлкните по стрелке вниз на кнопке Новый объект (New Object) на панели инструментов База данных (Database) и выберите элемент Макрос (Macro).Окно Конструктора макросов построено аналогично окну Конструктора таблиц, т. е. разделено по горизонтали на две части: панель описаний и панель аргументов.Верхняя часть окна Конструктора — панель описаний — состоит из нескольких столбцов. По умолчанию на этой панели выводится два столбца: "Макрокоманда" (Action) и "Примечание" (Comments). Панель описаний позволяет определить последовательность макрокоманд, из которых состоит макрос.Строка в столбце "Макрокоманда" (Action) представляет собой поле со списком, в котором можно выбрать нужную макрокоманду.Строка в столбце "Примечание" (Comments) — это обычное текстовое поле, в которое можно ввести комментарий, описывающий выполняемое действие.Когда поле "Макрокоманда" (Action) заполнено, в нижней части окна Конструктора макросов появляется панель аргументов, предназначенная для ввода значений аргументов соответствующей макрокоманды. Список полей на этой панели зависит от выбранной макрокоманды и может отсутствовать, если макрокоманда не имеет аргументов. Таким образом, при создании макросов не нужно запоминать список аргументов для каждой макрокоманды.На рис. 11.1 проиллюстрирован выбор макрокоманды Применить Фильтр (ApplyFilter). На панели аргументов имеются два поля, которые позволяют задать имя фильтра и условие отбора записей. Для того чтобы задать условие отбора записей, можно воспользоваться Построителем выражений (см. разд. "Создание выражений с помощью Построителя выражений"гл. 4).Такой макрос можно использовать в форме или отчете для того, чтобы ограничить число отображаемых записей.ЗамечаниеДля быстрого переключения между панелями описаний и аргументов, так же как при работе с таблицами и запросами в режиме Конструктора, можно использовать клавишу <F6>.Существует еще один очень простой способ ввода макрокоманды. Допустим, нужно создать макрос, который должен открывать форму "Клиенты" (Customers) в приложении "Борей" (Northwind). Для этого в окне База данных (Database) необходимо щелкнуть по ярлыку Формы (Forms), затем, используя панель инструментов (способ 2), открыть окно Конструктор макросов (Macro Design) и перетащить с помощью мыши форму "Клиенты" (Customers) в поле "Макрокоманда" (Action) окна Конструктора макросов.

Page 26: Предмет Базы данных

СоветДля удобства перетаскивания объектов из окна База данных (Database) в форму выберите команду Окно, Слева направо (Window, Tile Vertically), чтобы расположить окна на экране рядом.Тогда в поле "Макрокоманда" (Action) автоматически появится макрокоманда ОткрытьФорму (OpenForm) (рис. 11.2), а на панели аргументов автоматически заполнятся поля: в поле "Имя формы" (Form Name) появится имя формы "Клиенты" (Customers), в поле "Режим" (View) — значение по умолчанию Форма (Form), в поле "Режим окна" (Window Mode) — значение Обычное (Normal). Остальные поля останутся пустыми. Мы можем в этой же макрокоманде задать фильтр для отбора записей. Для этого введем в поле "Имя фильтра" (Filter Name) имя какого-нибудь фильтра, например "Менеджеры по продажам", который мы строили при изучении запросов (см. разд. "Создание запроса из фильтра"гл. 4).Кроме того, можно сделать записи в этой форме недоступными для изменений, для чего в поле Режим данных (Data Mode) необходимо ввести значение Только чтение (Read Only).Аналогично можно создавать макрокоманды, перетаскивая из окна База данных (Database) таблицы, запросы, отчеты и другие макросы. При этом в окне Конструктора макросов будут появляться соответствующие макрокоманды: ОткрытьТаблицу (ОрепТаblе), ОткрытьЗапрос (OpenQuery) , ОткрытьОтчет (OpenReport), ЗапускМакроса(RunMacro).Для ввода аргументов макрокоманды чаще всего требуется выбирать значения из списков или вводить выражения. Для ввода выражений можно воспользоваться Построителем выражений, кнопка которого находится справа от поля аргумента. Еще одна кнопка Построителя выражений находится на панели инструментов. Как и в других случаях, перед выражением нужно ставить знак равенства (=). Исключения составляют аргумент Выражение (Expression) макрокоманды ЗадатьЗначение (Setvalue) и аргумент Число повторений (Repeat Count) макрокоманды-ЗапускМакроса (RunMacro). Если ввести знак равенства перед выражением, задающим значение этих аргументов, то оно будет вычисляться дважды, что может привести к нежелательным результатам.Если в качестве аргумента макрокоманды необходимо задать имя объекта базы данных, то его можно либо ввести с помощью клавиатуры, либо выбрать из раскрывающегося списка, либо указать название объекта, перетащив его из окна базы данных.Итак, созданная нами макрокоманда будет открывать форму "Клиенты" (Customers) в режиме Только чтение (Read Only) и показывать в ней только менеджеров по продажам. Как уже было сказано ранее, макрос может содержать последовательность из нескольких макрокоманд. Поэтому в этом же макросе в следующей строке мы выберем макрокоманду Сообщение (MsgBox), которая после открытия формы будет отображать диалоговое окно с сообщением о том, какие клиенты представлены в форме. Для этого введем в поле Сообщение (Message) на панели аргументов текст сообщения, например Установлен фильтр Менеджеры по продажам, остальные поля можем оставить без изменения. Аргумент Сигнал (Веер) определяет, будет ли вывод сообщения сопровождаться звуковым сигналом. Аргумент Тип (Туре) определяет вид диалогового окна сообщения. Аргумент Заголовок (Title) позволяет задать текст, который будет выведен в заголовке окна сообщения.Если база данных большая, отбор записей в форме может занять некоторое время, поэтому рекомендуется вывести на экран курсор в форме песочных часов, который будет показывать, что идет обработка данных. Для того чтобы сделать это, воспользуемся макрокомандой ПесочныеЧасы (Hourglass). Макрокоманды в макросе выполняются в той последовательности, в которой они записаны в столбце "Макрокоманда" (Action), т. е. сверху вниз. Макрокоманду ПесочныеЧасы (Hourglass) следует поставить первой, т. к. курсор должен измениться перед выводом формы. Таким образом, нам нужно вставить новую строку на панели описаний. Для этого установим курсор в первую строку панели и нажмем кнопку Добавить строки (Insert Rows) на панели инструментов или просто клавишу <Insert>. Появится пустая строка. В этой строке в поле "Макрокоманда" (Action) выберем макрокоманду ПесочныеЧасы (Hourglass). В поле "Включить" (Hourglass On) панели аргументов появится значение Да (Yes), установленное по умолчанию, что нам и нужно. Чтобы вернуть первоначальный вид указателю мыши, в конце созданного макроса нужно ввести такую же макрокоманду ПесочныеЧасы (Hourglass), но со значением Нет (No) аргумента Включить (Hourglass On).Строго говоря, эту макрокоманду лучше поставить перед макрокомандой вывода сообщения на экран. Сделать это элементарно, поскольку макрокоманды легко меняются местами с помощью мыши. Чтобы поменять две последние макрокоманды местами, выделите последнюю строку, щелкнув левой кнопкой мыши по области выделения строк (слева в окне Конструктора) и перетащите строку вверх. Горизонтальная линия показывает место нового положения строки. Отпустите кнопку мыши, когда эта линия окажется над предпоследней строкой.Теперь остается только сохранить созданный макрос. Для этого можно выбрать в меню Файл (File) команду Сохранить как (Save As) или нажать клавишу <F12>. Появится окно сохранения макроса. Введите в поле ввода имя макроса, соблюдая правила именования объектов

Page 27: Предмет Базы данных

SQL1. Для извлечения данных из базы данных используется язык SQL (Structured Query Language — язык структурированных запросов). SQL — это язык программирования, который очень напоминает английский, но предназначен для программ управления базами данных. Каждый выполняемый запрос на самом деле основан на SQL. QL — это язык программирования, предназначенный для работы с наборами фактов и отношениями между ними. В программах управления реляционными базами данных, таких как Microsoft Office Access, язык SQL используется для работы с данными. В отличие от многих языков программирования SQL удобочитаем и понятен даже новичкам. Как и многие языки программирования, SQL является международным стандартом, признанным такими комитетами по стандартизации, как ISO(на английском языке) и ANSI(на английском языке) .“SQL удобочитаем и понятен даже новичкам.”На языке SQL описываются наборы данных, помогающие получить ответы на вопросы. При использовании SQL необходимо применять правильный синтаксис. Синтаксис — это набор правил, позволяющих правильно сочетать элементы языка. Синтаксис SQL основан на синтаксисе английского языка и включает много таких же элементов, как и синтаксис языка Visual Basic для приложений (VBA).Например, простая инструкция SQL, извлекающая список фамилий контактов с именем Мэри, может выглядеть следующим образом:SELECT ФамилияFROM КонтактыWHERE Имя = 'Мария'; ПРИМЕЧАНИЕ. Язык SQL используется не только для выполнения операций над данными, но ещё и для создания и изменения структуры объектов базы данных, например таблиц. Та часть SQL, которая используется для создания и изменения объектов базы данных, называется языком описания данных DDL. Язык DDL не рассматривается в этом разделе. Дополнительные сведения см. в статье Создание и изменение таблиц и индексов с использованием запросов определения данных.2. ИНСТРУКЦИИ SELECTИнструкция SELECT служит для описания набора данных на языке SQL. Она содержит полное описание набора данных, которые необходимо получить из базы данных, включая следующее:таблицы, в которых содержатся данные;связи между данными из разных источников;поля или вычисления, на основе которых отбираются данные;условия отбора, которым должны соответствовать данные, включаемые в результат запроса;необходимость и способ сортировки.ПРЕДЛОЖЕНИЕ SELECTSELECT [Адрес электронной почты], ОрганизацияЭто предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора ([Адрес электронной почты] и Организация).Если идентификатор содержит пробелы или специальные знаки (например, Адрес электронной почты), он должен быть заключен в прямоугольные скобки.В предложении SELECT не нужно указывать таблицы, в которых содержатся поля, и нельзя задать условия отбора, которым должны соответствовать данные, включаемые в результаты.В инструкции SELECT предложение SELECT всегда стоит перед предложением FROM.3. ПРЕДЛОЖЕНИЕ WHEREWHERE Город="Ростов"Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город="Ростов"). ПРИМЕЧАНИЕ. В отличие от предложений SELECT и FROM предложение WHERE является необязательным элементом инструкции SELECT.С помощью предложений SELECT, FROM и WHERE можно выполнять множество действий. Дополнительные сведения об использовании этих предложений см. в статьях, указанных ниже.Сортировка результатов: предложение ORDER BYКак и в Microsoft Office Excel, в Access можно сортировать результаты запроса в таблице. Используя предложение ORDER BY, в запросе также можно указать способ сортировки результатов при выполнении запроса. Если используется предложение ORDER BY, оно должно находиться в конце инструкции SQL.Предложение ORDER BY содержит список полей, для которых нужно выполнить сортировку, в том же порядке, в котором будут применена сортировка.

Page 28: Предмет Базы данных

Предположим, например, что результаты сначала нужно отсортировать по убыванию значения поля Организация, а затем, если присутствуют записи с одинаковым значением поля Организация, отсортировать их по возрастанию значения поля Адрес электронной почты. Предложение ORDER BY будет выглядеть следующим образом:ORDER BY Организация DESC, [Адрес электронной почты] ПРИМЕЧАНИЕ. По умолчанию в Access выполняется сортировка по возрастанию (A-Z, А-Я, от наименьшего к наибольшему). Чтобы вместо нее выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.5. Работа со сводными данными: предложения GROUP BY и HAVINGИногда возникает необходимость работы со сводными данными, такими как итоговые продажи за месяц или самые дорогие товары на складе. Для этого в предложении SELECT к полю следует применить статистическую функцию. Например, если в результате выполнения запроса нужно получить количество адресов электронной почты каждой компании, предложение SELECT может выглядеть следующим образом:SELECT COUNT([Адрес электронной почты]), ОрганизацияВозможность употребления той или иной статистической функции зависит от типа данных в поле или используемого выражения При использовании статистических функций обычно необходимо создать предложение GROUP BY. В предложении GROUP BY указываются все поля, к которым не применяется статистическая функция. Если статистические функции применяются ко всем полям в запросе, предложение GROUP BY создавать не нужно.Предложение GROUP BY должно следовать сразу же за предложением WHERE или FROM, если предложение WHERE отсутствует. В предложении GROUP BY поля указываются в том же порядке, что и в предложении SELECT.Продолжим предыдущий пример. Пусть в предложении SELECT статистическая функция применяется только к полю [Адрес электронной почты], тогда предложение GROUP BY будет выглядеть следующим образом:GROUP BY Организация


Recommended