Лекции по дисциплине “Инструментальные программные средства” Лекция 1. Введение в БД и СУБД. Модели данных .......................................................2 Лекция 2. Инфологическая модель «Сущность-связь»................................................14 Лекция 3. Нормализация .................................................................................................24 Лекция 4. Целостность реляционных данных ..............................................................40 Лекция 5. Основы SQL: запросы к базе данных ...........................................................49 Лекция 6. Табличный процессор Microsoft Excel. Назначение и интерфейс .............54 Лекция 7. Построение графиков и основы статистического анализа в Excel ...........64 Лекция 8. Основы работы в системе MathCAD. ...........................................................92 Лекция 9. Программирование в Mathcad, Интерполяция и регрессия, функции сглаживания данных и предсказания. ..........................................................................105 1 Лекция 1. Введение в БД и СУБД. Модели данных Основные термины и определения Если говорить об использовании вычислительной техники, то глобально можно выделить два основных направления ее проименения. Первое направление – численные расчеты. Исторически оно появилось раньше и способствовало развитию методов численного решения сложных математических задач, развитию языков программирования, ориентированных на решение вычислительных задач. Второе направление – это хранение и обработка данных. Целью любой информационной системы является хранение и обработка данных о каких-либо объектах реального мира. Давайте рассмотрим такие важные для нас понятия как «данные» и «информация». Несмотря на огромное количество определений для этих понятий остановимся на следующих определениях. Информация представляет собой сведения об окружающих человека предметах, явлениях и процессах и является объектом таких операций как восприятие, передача, преобразование, хранение и использование. Когда используется термин «данные», то речь идет об информации, представленной в формализованном виде, пригодной для автоматической обработки при возможном участии человека. В широком смысле слова термин «база данных» (БД) – это совокупность сведений о конкретных объектах. При создании БД в основном преследуется цель упорядочить данные по различным признакам, чтобы иметь возможность извлекать из данных нужную информацию. Создание БД, ее поддержка, управление, а также доступ пользователей к самим данным осуществляется посредством специальных программных продуктов, называемых системами управления базами данных (СУБД). Основная особенность СУБД – это наличие процедур для ввода и хранения не только самих данных, но и описаний их структуры. Файлы, снабженные описанием хранимых в них данных и находящиеся под управлением СУБД, стали называть БД. Домашнее задание - перечислить функции СУБД Функции СУБД Управление буферами оперативной памяти 2 Управление транзакциями Защита от отказов и восстановление (журнализация) Обеспечение различных уровней доступа к данным 3 Модели данных Выделяют следующие модели данных: - инфологические, - даталогические, - физические. 1.1. Инфологическая модель данных [1] Процесс проектирования БД начинается с создания инфологической модели. Инфологическая модель данных - обобщенное неформальное описание создаваемой базы данных, выполненное с использованием естественного языка, математических формул, таблиц, графиков и других средств, понятных всем людям, работающих над проектированием базы данных.. или по-другому Инфологическая модель данных - обобщенное, непривязанное к каким-либо СУБД описание предметной области. Инфологическая модель отображает реальный мир в некоторые понятные человеку концепции, полностью независимые от параметров среды хранения данных. Поэтому инфологическая модель не должна изменяться до тех пор, пока какие-то изменения в реальном мире не потребуют изменения в ней некоторого определения, чтобы эта модель продолжала отражать предметную область. Существует множество подходов к построению таких моделей: графовые модели, семантические сети, модель «сущность-связь» и др. 1.1.1. Семантические сети [2] Семантическая сеть (СС) – это граф, дуги которого есть отношения между вершинами (значениями). Семантические сети появились при решении задач разбора и понимания смысла естественного языка. Пример семантической сети для предложения типа "Поставщик осуществил поставку изделий по заказу клиента до 1 июня 2004 года в количестве 1000 штук" приведен на рис. 1. Рис. 1. Пример семантической сети На этом примере видно, что между объектами Поставщик и Поставка определено отношение "агент", между объектами Изделие и Поставка определено отношение "объект" и т.д. 4 Число отношений, используемых в конкретных семантических сетях, может быть самое разное. Неполный список возможных отношений, используемых в семантических сетях для разбора предложений, выглядит следующим образом. Агент - это то, что (тот, кто) вызывает действие. Агент часто является подлежащим в предложении, например, "Робби ударил мяч". Объект - это то, на что (на кого) направлено действие. В предложении объект часто выполняет роль прямого дополнения, например, "Робби взял желтую пирамиду ". Инструмент - то средство, которое используется агентом для выполнения действия, например, "Робби открыл дверь с помощью ключа". Соагент служит как подчиненный партнер главному агенту, например, "Робби собрал кубики с помощью Суззи". Пункт отправления и пункт назначения - это отправная и конечная позиции при перемещении агента или объекта: "Робби перешел из комнаты в библиотеку". Траектория - перемещение от пункта отправления к пункту назначения: "Они прошли через дверь по ступенькам на лестницу". Средство доставки - то в чем или на чем происходит перемещение: "Он всегда едет домой на метро". Местоположение - то место, где произошло (происходит, будет происходить) действие, например, "Он работал за столом". Потребитель - то лицо, для которого выполняется действие: "Робби собрал кубики для Суззи". Сырье - это, как правило, материал, из которого что-то сделано или состоит. Обычно сырье вводится предлогом из, например, "Робби собрал Суззи из интегральных схем". Время - указывает на момент совершения действия: "Он закончил свою работу поздно вечером". Наиболее типичный способ вывода в семантических сетях (СС) - это способ сопоставления частей сетевой структуры. Это видно на следующем простом примере, представленном на рис. 2. Рис. 2. Процедура сопоставления в СС Куб Cube принадлежит миру BlockWorld. Куб Cube_001 есть разновидность куба Cube. 5 Легко сделать вывод: Куб Cube_001 есть часть мира BlockWorld. Еще один пример поиска в СС. Представим вопрос "какой объект находится на желтом блоке?" в виде подсети, изображенной на рис. 3. Произведем сопоставление вопроса с сетью, представленной на рис. 4. В результате сопоставления получается ответ - "Пирамида". Рис. 4. Процедура сопоставления в СС Рис. 3. Вопрос в виде CC 6 1.2. Даталогическая модель Инфологическая модель должна быть отображена в даталогическую модель, «понятную» СУБД. Даталогическая модель – описание на языке конкретной СУБД. 1.2.1. Иерархическая модель Сначала стали использовать иерархические даталогические модели. Эта модель представляет собой совокупность связанных элементов, образующих иерархическую структуру. К основным понятиям иерархии относятся уровень, узел и связь. Узлом называется совокупность атрибутов данных, описывающих некоторый объект. Каждый узел связан с одним узлом более высокого уровня и с любым количеством узлов нижнего уровня. Исключением является узел самого высокого уровня, который не связан ни с одним узлом более высокого уровня. Количество деревьев в БД определяется количеством корней деревьев. К каждой записи БД существует единственный путь от корневой записи. Примером иерархической модели данных может служить адрес. На первом уровне (корне дерева) лежит наша планета – Земля. На втором – страна. На третьем – регион (республика, край, район), затем – населенный пункт, улица, дом, квартира. Еще один пример – это система доменных имен в Интернете. Типичным представителем СУБД (наиболее известным и распространенным), основанной на иерархической модели, является Information Management System (IMS) фирмы IBM. Первая версия появилась в 1968 г. Рис. 5 Пример иерархической модели Здесь Отдел является предком для Начальник и Сотрудники, а Начальник и Сотрудники - потомки Отдел. Между типами записи поддерживаются связи. База данных с такой схемой могла бы выглядеть следующим образом (мы показываем один экземпляр дерева): Рис. 6 Пример иерархической модели 7 Все экземпляры данного типа потомка с общим экземпляром типа предка называются близнецами. Для БД определен полный порядок обхода - сверху-вниз, слева-направо. 8 1.2.2. Сетевая модель [3, 4] В основе сетевой модели данных лежат те же понятия, что и в основе иерархической модели – узел, уровень и связь. Однако существенным различием является то, что в иерархических структурах запись-потомок должна иметь в точности одного предка; в сетевой структуре данных потомок может иметь любое число предков. Сетевой подход к организации данных является расширением иерархического. В сетевой модели данных любой объект может быть одновременно и главным, и подчиненным, и может участвовать в образовании любого числа взаимосвязей с другими объектами. Сетевая БД состоит из набора записей и набора связей между этими записями, а если говорить более точно - из набора экземпляров каждого типа из заданного в схеме БД набора типов записи и набора экземпляров каждого типа из заданного набора типов связи (см. рис. 7). Рис. 7. Схема сетевой модели Задание – нарисовать схему сетевой модели БД, в которой хранится информация о членстве ученых в научных организациях. Каждый ученый может состоять во множестве организаций. В свою очередь в одной организации может состоять множество ученых. Сетевые модели также создавались для мало ресурсных ЭВМ. Это достаточно сложные структуры, состоящие из "наборов" – поименованных двухуровневых деревьев. "Наборы" соединяются с помощью "записей-связок", образуя цепочки и т.д. При разработке сетевых моделей было выдумано множество "маленьких хитростей", позволяющих увеличить производительность СУБД, но существенно усложнивших последние. Прикладной программист должен знать массу терминов, изучить несколько внутренних языков СУБД, детально представлять логическую структуру базы данных для осуществления навигации среди различных экземпляров, наборов, записей и т.п. Типичным представителем является Integrated Database Management System (IDMS) компании Cullinet Software, Inc., предназначенная для использования на машинах основного класса фирмы IBM под управлением большинства операционных систем. Архитектура системы основана на предложениях Data Base Task Group (DBTG), Комитета по языкам программирования Conference on Data Systems Languages (CODASYL), организации, ответственной за определение языка программирования Кобол. Отчет DBTG был опубликован в 1971 г., а в 70-х годах появилось несколько систем, среди которых IDMS. 9 СУБД на основе инвертированных файлов [5] Сложность практического использования иерархических и сетевых СУБД заставляла искать иные способы представления данных. В конце 60-х годов появились СУБД на основе инвертированных файлов, отличающиеся простотой организации и наличием весьма удобных языков манипулирования данными. К числу наиболее известных и типичных представителей таких систем относятся Datacom/DB компании Applied Data Research, Inc. (ADR), ориентированная на использование на машинах основного класса фирмы IBM, и Adabas компании Software AG. Организация доступа к данным на основе инвертированных списков используется практически во всех современных реляционных СУБД, но в этих системах пользователи не имеют непосредственного доступа к инвертированным спискам (индексам). База данных, организованная с помощью инвертированных списков, похожа на реляционную БД, но с тем отличием, что хранимые таблицы и пути доступа к ним видны пользователям. При этом: 1. Строки таблиц упорядочены системой в некоторой физической последовательности. 2. Физическая упорядоченность строк всех таблиц может определяться и для всей БД (так делается, например, в Datacom/DB). 3. Для каждой таблицы можно определить произвольное число ключей поиска, для которых строятся индексы. Эти индексы автоматически поддерживаются системой, но явно видны пользователям. Поддерживаются два класса операторов: Операторы, устанавливающие адрес записи, среди которых: 1.1. прямые поисковые операторы (например, найти первую запись таблицы по некоторому пути доступа); 1.2. операторы, находящие запись в терминах относительной позиции от предыдущей записи по некоторому пути доступа. 2. Операторы над адресуемыми записями Типичный набор операторов: 1. - LOCATE FIRST - найти первую запись таблицы T в физическом порядке; возвращает адрес записи; - LOCATE FIRST WITH SEARCH KEY EQUAL - найти первую запись таблицы T с заданным значением ключа поиска K; возвращает адрес записи; - LOCATE NEXT - найти первую запись, следующую за записью с заданным адресом в заданном пути доступа; возвращает адрес записи; - LOCATE NEXT WITH SEARCH KEY EQUAL - найти cледующую запись таблицы T в порядке пути поиска с заданным значением K; должно быть соответствие между используемым способом сканирования и ключом K; возвращает адрес записи; - LOCATE FIRST WITH SEARCH KEY GREATER - найти первую запись таблицы T в порядке ключа поиска K cо значением ключевого поля, большим заданного значения K; возвращает адрес записи; - RETRIVE - выбрать запись с указанным адресом; - UPDATE - обновить запись с указанным адресом; - DELETE - удалить запись с указанным адресом; - STORE - включить запись в указанную таблицу; операция генерирует адрес записи. Общие правила определения целостности БД отсутствуют. В некоторых системах поддерживаются ограничения уникальности значений некоторых полей, но в основном все возлагается на прикладную программу. 10 Однако такие СУБД обладают рядом ограничений на количество файлов для хранения данных, количество связей между ними, длину записи и количество ее полей. Пример 1.2.3. Реляционная модель Сегодня наиболее распространена реляционная модель. В ее основе лежит идея о том, что любой набор данных можно представить в виде двумерной таблицы. Простейшая реляционная БД может состоять из единственной таблицы, в которой будут храниться все необходимые данные. На практике реляционная БД состоит из нескольких таблиц, связанных между собой по определенным критериям. Эта модель данных будет подобно рассмотрена позже. Задание. Подготовить доклады на тему «Объектно-ориентированная модель данных» и «документно-ориентированная модель данных». В основе документно-ориентированной модели данных лежит понятие документа. Задание. Назовите примеры СУБД, построенных на основе иерархических, сетевых, реляционных, документно-ориентированных, объектно-ориентированных моделей данных. 2. Физическая модель [3] На основе даталогической модели строится физическая модель. Физическая организация данных оказывает основное влияние на эксплуатационные характеристики БД. Разработчики СУБД пытаются создать наиболее производительные физические модели данных, предлагая пользователям тот или иной инструментарий для поднастройки модели под конкретную БД. Пример. В частности для реляционной БД она уже учитывает: 1. физические аспекты хранения таблиц в определенных файлах, 2. создания индексов, оптимизирующих скорость выполнения операций над данными с помощью приложения, 3. выполнения различных действий над данными при определенных событиях, определяемых пользователем с помощью триггеров, хранимых процедур. Архитектура БД По принципам обработки данных БД классифицируются на централизованные и распределенные. Централизованная БД подразумевает, что работа с БД возможна только локально. Если компьютер работает в сети, то доступ к информации может осуществляться удаленно с других компьютеров сети. Централизованные БД наиболее распространены в настоящее время. При этом возможны несколько вариантов обработки данных. Файл-серверная архитектура предполагает наличие в сети сервера, на котором хранятся файлы централизованной БД. В соответствии с запросами пользователей файлы с файл-сервера передаются на рабочие станции пользователей, где и осуществляется основная часть обработки данных. Центральный сервер выполняет в основном только роль хранилища файлов, не участвуя в обработке самих данных. После завершения работы пользователи копируют файлы с 11 обработанными данными обратно на сервер, откуда их могут взять и обработать другие пользователи. Недостатки такой организации данных очевидны. При одновременном обращении множества пользователей к одним и тем же данным производительность работы резко падает, т.к. необходимо дождаться пока пользователь, работающий с данными завершит работу. В противном случае возможно затирание исправлений сделанных одним пользователем, изменениями других пользователей. В основе концепции клиент-сервер лежит идея о том, что помимо хранения файлов БД, центральный сервер должен выполнять основную часть обработки данных. Пользователи обращаются к серверу с помощью специального языка структурированных запросов (SQL, Structed Query Language), на которм описывается список задач, выполняемых сервером. Запросы принимаются сервером и порождают процессы обработки данных. В ответ пользователь получает уже отработанный набор данных. Технология клиент-сервер позволяет избежать передачи по сети огромных объемов информации, переложив всю обработку на центральный сервер. Такой подход также позволяет избежать конфликтов при редактировании одних и тех же данных множеством пользователей. Трехуровневая архитектура («Тонкий клиент» - сервер приложений - сервер базы данных)функционирует в Интранет- и Интернет-сетях.. Клиентская часть ("тонкий клиент"), взаимодействующая с пользователем, представляет собой HTML-страницу в Web-браузере либо Windows-приложение, взаимодействующее с Webсервисами. Вся программная логика вынесена на сервер приложений, который обеспечивает формирование запросов к базе данных, передаваемых на выполнение серверу баз данных. Сервер приложений может быть Web-сервером или специализированной программой (см. рис. 8). Рис. 8. Схема работы с БД в трехуровневой архитектуре Распределенная БД располагается на нескольких компьютерах. Информация на этих компьютерах может пересекаться и даже дублироваться. Для управления такими БД предназначена система управления распределенными БД. Система скрывает от пользователей обращения к данным, расположенным на других компьютерах. Для пользователя все выглядит так, как будто вся информация находится на одном сервере. Список литературы 12 1. В.В. Кириллов Основы проектирования реляционных баз данных Учебное пособие СанктПетербургский Государственный институт точной механики и оптики 2. http://www.intuit.ru/department/human/isrob/2/4.html 3. Е. Мамаев MS SQL Server 2000 4. http://www.intuit.ru/department/database/basedbw/2/2.html 5. Основы современных баз данных С.Д. Кузнецов, информационно-аналитические материалы Центра Информационных Технологий 13 Лекция 2. Инфологическая модель «Сущность-связь» Цель моделирования данных состоит в обеспечении разработчика ИС концептуальной схемой базы данных в форме одной модели или нескольких локальных моделей, которые относительно легко могут быть отображены в любую систему баз данных. Наиболее распространенным средством моделирования данных являются диаграммы "сущность-связь" (ERD). С их помощью определяются важные для предметной области объекты (сущности), их свойства (атрибуты) и отношения друг с другом (связи). ERD непосредственно используются для проектирования реляционных баз данных. Нотация ERD была впервые введена П. Ченом (Chen) и получила дальнейшее развитие в работах Баркера. Метод Баркера будет излагаться на примере моделирования деятельности компании по торговле автомобилями. Ниже приведены выдержки из интервью, проведенного с персоналом компании. Главный менеджер: одна из основных обязанностей - содержание автомобильного имущества. Он должен знать, сколько заплачено за машины и каковы накладные расходы. Обладая этой информацией, он может установить нижнюю цену, за которую мог бы продать данный экземпляр. Кроме того, он несет ответственность за продавцов и ему нужно знать, кто что продает и сколько машин продал каждый из них. Продавец: ему нужно знать, какую цену запрашивать и какова нижняя цена, за которую можно совершить сделку. Кроме того, ему нужна основная информация о машинах: год выпуска, марка, модель и т.п. Администратор: его задача сводится к составлению контрактов, для чего нужна информация о покупателе, автомашине и продавце, поскольку именно контракты приносят продавцам вознаграждения за продажи. Первый шаг моделирования - извлечение информации из интервью и выделение сущностей. Сущность (Entity) - реальный либо воображаемый объект, имеющий существенное значение для рассматриваемой предметной области, информация о котором подлежит хранению (рис. 1). Рис. 1. Графическое изображение сущности 14 Каждая сущность должна обладать уникальным идентификатором. Каждый экземпляр сущности должен однозначно идентифицироваться и отличаться от всех других экземпляров данного типа сущности. Каждая сущность должна обладать некоторыми свойствами: каждая сущность должна иметь уникальное имя, и к одному и тому же имени должна всегда применяться одна и та же интерпретация. Одна и та же интерпретация не может применяться к различным именам, если только они не являются псевдонимами; сущность обладает одним или несколькими атрибутами, которые либо принадлежат сущности, либо наследуются через связь; сущность обладает одним или несколькими атрибутами, которые однозначно идентифицируют каждый экземпляр сущности; каждая сущность может обладать любым количеством связей с другими сущностями модели. Обращаясь к приведенным выше выдержкам из интервью, видно, что сущности, которые могут быть идентифицированы с главным менеджером - это автомашины и продавцы. Продавцу важны автомашины и связанные с их продажей данные. Для администратора важны покупатели, автомашины, продавцы и контракты. Исходя из этого, выделяются 4 сущности (автомашина, продавец, покупатель, контракт), которые изображаются на диаграмме следующим образом (рис. 2). Рис. 2. Сущности. Следующим шагом моделирования является идентификация связей. Связь (Relationship) - поименованная ассоциация между двумя сущностями, значимая для рассматриваемой предметной области. Связь - это ассоциация между сущностями, при которой, как правило, каждый экземпляр одной сущности, называемой родительской сущностью, ассоциирован с произвольным (в том числе нулевым) количеством экземпляров второй сущности, называемой сущностью-потомком, а каждый экземпляр сущности-потомка ассоциирован в точности с одним экземпляром сущности-родителя. Таким образом, экземпляр сущности-потомка может существовать только при существовании сущности родителя. Связи может даваться имя, выражаемое грамматическим оборотом глагола и помещаемое возле линии связи. Имя каждой связи между двумя данными сущностями должно быть уникальным, но имена связей в модели не обязаны быть уникальными. Имя связи всегда формируется с точки зрения родителя, так что предложение может быть образовано соединением имени сущности-родителя, имени связи, выражения степени и имени сущности-потомка. 15 Например, связь продавца с контрактом может быть выражена следующим образом: продавец может получить вознаграждение за 1 или более контрактов; контракт должен быть инициирован ровно одним продавцом. Степень связи и обязательность графически изображаются следующим образом (рис. 3). Рис. 3. Типы связей Таким образом, 2 предложения, описывающие связь продавца с контрактом, графически будут выражены следующим образом (рис. 4). Рис. 4 Описав также связи остальных сущностей, получим следующую схему (рис. 5). Рис. 5 Последним шагом моделирования является идентификация атрибутов. Атрибут - любая характеристика сущности, значимая для рассматриваемой предметной области и предназначенная для квалификации, идентификации, классификации, количественной характеристики или выражения состояния сущности. Атрибут представляет тип характеристик или свойств, ассоциированных со множеством реальных или абстрактных объектов (людей, мест, событий, состояний, идей, пар предметов и т.д.). Экземпляр атрибута - это определенная характеристика отдельного элемента множества. Экземпляр атрибута определяется типом характеристики и ее значением, называемым значением атрибута. В ER-модели атрибуты ассоциируются с конкретными сущностями. Таким образом, экземпляр сущности должен обладать единственным определенным значением для ассоциированного атрибута. 16 Атрибут может быть либо обязательным, либо необязательным. Обязательность означает, что атрибут не может принимать неопределенных значений (null values). Атрибут может быть либо описательным (т.е. обычным дескриптором сущности), либо входить в состав уникального идентификатора (первичного ключа). Уникальный идентификатор - это атрибут или совокупность атрибутов и/или связей, предназначенная для уникальной идентификации каждого экземпляра данного типа сущности. В случае полной идентификации каждый экземпляр данного типа сущности полностью идентифицируется своими собственными ключевыми атрибутами, в противном случае в его идентификации участвуют также атрибуты другой сущностиродителя (рис. 6). Рис. 6 Обязательные и необязательные атрибуты Рис. 7 Идентификация сущностей Каждый атрибут идентифицируется уникальным именем, выражаемым грамматическим оборотом существительного, описывающим представляемую атрибутом характеристику. Атрибуты изображаются в виде списка имен внутри блока ассоциированной сущности, причем каждый атрибут занимает отдельную строку. Атрибуты, определяющие первичный ключ, размещаются наверху списка и выделяются знаком "#". Каждая сущность должна обладать хотя бы одним возможным ключом. Возможный ключ сущности - это один или несколько атрибутов, чьи значения однозначно определяют каждый экземпляр сущности. При существовании нескольких возможных ключей один из них обозначается в качестве первичного ключа, а остальные - как альтернативные ключи. С учетом имеющейся информации дополним построенную ранее диаграмму (рис. 8). Помимо перечисленных основных конструкций модель данных может содержать ряд дополнительных. Подтипы и супертипы: одна сущность является обобщающим понятием для группы подобных сущностей (рис. 9). 17 Взаимно исключающие связи: каждый экземпляр сущности участвует только в одной связи из группы взаимно исключающих связей (рис. 10). Рис. 8 Рис. 9. Подтипы и супертипы Рис. 10. Взаимно исключающие связи Рекурсивная связь: сущность может быть связана сама с собой (рис. 11). 18 Рис. 11. Рекурсивная связь 19 Методология IDEF1 Метод IDEF1, разработанный Т.Рэмей (T.Ramey), также основан на подходе П.Чена и позволяет построить модель данных, эквивалентную реляционной модели в третьей нормальной форме. В настоящее время на основе совершенствования методологии IDEF1 создана ее новая версия - методология IDEF1X. IDEF1X разработана с учетом таких требований, как простота изучения и возможность автоматизации. IDEF1X-диаграммы используются рядом распространенных CASE-средств (в частности, ERwin, Design/IDEF). Сущность в методологии IDEF1X является независимой от идентификаторов или просто независимой, если каждый экземпляр сущности может быть однозначно идентифицирован без определения его отношений с другими сущностями. Сущность называется зависимой от идентификаторов или просто зависимой, если однозначная идентификация экземпляра сущности зависит от его отношения к другой сущности (рис. 12). Рис. 12. Сущности Каждой сущности присваивается уникальное имя и номер, разделяемые косой чертой "/" и помещаемые над блоком. Связь может дополнительно определяться с помощью указания степени или мощности (количества экземпляров сущности-потомка, которое может существовать для каждого экземпляра сущности-родителя). В IDEF1X могут быть выражены следующие мощности связей: каждый экземпляр сущности-родителя может иметь ноль, один или более связанных с ним экземпляров сущности-потомка; каждый экземпляр сущности-родителя должен иметь не менее одного связанного с ним экземпляра сущности-потомка; каждый экземпляр сущности-родителя должен иметь не более одного связанного с ним экземпляра сущности-потомка; каждый экземпляр сущности-родителя связан с некоторым фиксированным числом экземпляров сущности-потомка. 20 Если экземпляр сущности-потомка однозначно определяется своей связью с сущностьюродителем, то связь называется идентифицирующей, в противном случае неидентифицирующей. Связь изображается линией, проводимой между сущностью-родителем и сущностьюпотомком с точкой на конце линии у сущности-потомка. Мощность связи обозначается как показано на рис. 13 (мощность по умолчанию - N). Рис. 13. Мощность связи Идентифицирующая связь между сущностью-родителем и сущностью-потомком изображается сплошной линией (рис. 14). Сущность-потомок в идентифицирующей связи является зависимой от идентификатора сущностью. Сущность-родитель в идентифицирующей связи может быть как независимой, так и зависимой от идентификатора сущностью (это определяется ее связями с другими сущностями). Рис. 14. Идентифицирующая связь Пунктирная линия изображает неидентифицирующую связь (рис. 15). Сущность-потомок в неидентифицирующей связи будет независимой от идентификатора, если она не является также сущностью-потомком в какой-либо идентифицирующей связи. 21 Рис. 15. Неидентифицирующая связь Атрибуты изображаются в виде списка имен внутри блока сущности. Атрибуты, определяющие первичный ключ, размещаются наверху списка и отделяются от других атрибутов горизонтальной чертой (рис. 16). Рис. 16. Атрибуты и первичные ключи Сущности могут иметь также внешние ключи (Foreign Key), которые могут использоваться в качестве части или целого первичного ключа или неключевого атрибута. Внешний ключ изображается с помощью помещения внутрь блока сущности имен атрибутов, после которых следуют буквы FK в скобках (рис. 17). Рис. 17. Примеры внешних ключей 22 ER-диаграмма должна подчиняться следующим правилам: каждая сущность, каждый атрибут и каждая связь должны иметь имя (связь супертипа или ассоциативная связь может не иметь имени); имя сущности должно быть уникально в рамках модели данных; имя атрибута должно быть уникально в рамках сущности; имя связи должно быть уникально, если для нее генерируется таблица БД; каждый атрибут должен иметь определение типа данных; сущность в необязательной связи должна иметь ключевой атрибут. То же самое относится к сильной сущности в слабой связи, супертипу в связи "супертип-подтип" и необязательной сущности в обязательной (полной) связи; подтип в связи "супертип-подтип" не может иметь ключевой атрибут; в ассоциативной или слабой связи может быть только одна ассоциативная (слабая) сущность; связь не может быть одновременно обязательной, "супертип-подтип" или ассоциативной. 23 Лекция 3. Нормализация Введение Нормализация – это разбиение таблицы на две или более, обладающих лучшими свойствами при добавлении, изменении и удалении данных. Окончательная цель нормализации сводится к получению такого проекта базы данных, в котором каждый факт появляется лишь в одном месте, т.е. исключена избыточность информации. Это делается не столько с целью экономии памяти, сколько для исключения возможной противоречивости хранимых данных. Пример Рассмотрим в качестве предметной области некоторую организацию, выполняющую некоторые проекты. Модель предметной области опишем следующим неформальным текстом: 1. Сотрудники организации выполняют проекты. 2. Проекты состоят из нескольких заданий. 3. Каждый сотрудник может участвовать в одном или нескольких проектах, или временно не участвовать ни в каких проектах. 4. Над каждым проектом может работать несколько сотрудников, или временно проект может быть приостановлен, тогда над ним не работает ни один сотрудник. 5. Над каждым заданием в проекте работает ровно один сотрудник. 6. Каждый сотрудник числится в одном отделе. 7. Каждый сотрудник имеет телефон, находящийся в отделе сотрудника. В ходе дополнительного уточнения того, какие данные необходимо учитывать, выяснилось следующее: 1. О каждом сотруднике необходимо хранить табельный номер и фамилию. Табельный номер является уникальным для каждого сотрудника. 2. Каждый отдел имеет уникальный номер. 3. Каждый проект имеет номер и наименование. Номер проекта является уникальным. 4. Каждая работа из проекта имеет номер, уникальный в пределах проекта. Работы в разных проектах могут иметь одинаковые номера. 1НФ (Первая Нормальная Форма) Первая нормальная форма (1НФ) - это обычное отношение. Свойства отношений (это и будут свойства 1НФ): - В отношении нет одинаковых кортежей. Кортежи не упорядочены. Атрибуты не упорядочены и различаются по наименованию. Все значения атрибутов атомарны. В ходе логического моделирования на первом шаге предложено хранить данные в одном отношении, имеющем следующие атрибуты: 24 СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ (Н_СОТР, ФАМ, Н_ОТД, ТЕЛ, Н_ПРО, ПРОЕКТ, Н_ЗАДАН) где Н_СОТР - табельный номер сотрудника, ФАМ - фамилия сотрудника, Н_ОТД - номер отдела, в котором числится сотрудник, ТЕЛ - телефон сотрудника, Н_ПРО - номер проекта, над которым работает сотрудник, ПРОЕКТ - наименование проекта, над которым работает сотрудник, Н_ЗАДАН - номер задания, над которым работает сотрудник. Т.к. каждый сотрудник в каждом проекте выполняет ровно одно задание, то в качестве потенциального ключа отношения необходимо взять пару атрибутов (Н_СОТР, Н_ПРО). В текущий момент состояние предметной области отражается следующими фактами: - Сотрудник Иванов, работающий в 1 отделе, выполняет в первом проекте "Космос" задание 1 и во втором проекте "Климат" задание 1. Сотрудник Петров, работающий в 1 отделе, выполняет в первом проекте "Космос" задание 2. Сотрудник Сидоров, работающий во 2 отделе, выполняет в первом проекте "Космос" задание 3 и во втором проекте "Климат" задание 2. Это состояние отражается в таблице 1 (курсивом выделены ключевые атрибуты): Таблица 1. Отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ Н_СОТР ФАМ Н_ОТД ТЕЛ Н_ПРО ПРОЕКТ Н_ЗАДАН 1 Иванов 1 11-22-33 1 Космос 1 1 Иванов 1 11-22-33 2 Климат 1 2 Петров 1 11-22-33 1 Космос 2 3 Сидоров 2 33-22-11 1 Космос 3 3 Сидоров 2 33-22-11 2 Климат 2 25 1.1 Аномалии обновления Из таблицы 1 видно, что данные отношения СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ хранятся в ней с большой избыточностью. Во многих строках повторяются фамилии сотрудников, номера телефонов, наименования проектов. Кроме того, в данном отношении хранятся вместе независимые друг от друга данные - и данные о сотрудниках, и об отделах, и о проектах, и о работах по проектам. Пока никаких действий с отношением не производится, это не страшно. Но как только состояние предметной области изменяется, то, при попытках соответствующим образом изменить состояние базы данных, возникает большое количество проблем. Исторически эти проблемы получили название аномалии обновления. Под аномалией обновления в данном случае подразумевается противоречие между моделью предметной области и физической моделью данных, поддерживаемых средствами конкретной СУБД. Под аномалией обновления будем понимать неадекватность модели данных предметной области либо некоторые дополнительные трудности в реализации ограничений предметной области средствами СУБД. Неадекватность модели данных предметной области по сути означает, что логическая модель данных попросту неверна или для реализации всех ограничений определенных в предметной области необходим дополнительный программный код в виде триггеров или хранимых процедур. Т.к. аномалии проявляют себя при выполнении операций, изменяющих состояние базы данных, то различают следующие виды аномалий: - аномалии вставки (INSERT), аномалии обновления (UPDATE), аномалии удаления (DELETE). В отношении СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ можно привести примеры следующих аномалий: 1.1.1. Аномалии вставки (INSERT) В отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ нельзя вставить данные о сотруднике, который пока не участвует ни в одном проекте. Действительно, если, например, во втором отделе появляется новый сотрудник, скажем, Пушников, и он пока не участвует ни в одном проекте, то мы должны вставить в отношение кортеж (4, Пушников, 2, 33-22-11, null, null, null). Это сделать невозможно, т.к. атрибут Н_ПРО (номер проекта) входит в состав потенциального ключа, и, следовательно, не может содержать null-значений. Точно также нельзя вставить данные о проекте, над которым пока не работает ни один сотрудник. Причина аномалии - хранение в одном отношении разнородной информации (и о сотрудниках, и о проектах, и о работах по проекту). 26 Вывод - логическая модель данных неадекватна модели предметной области. База данных, основанная на такой модели, будет работать неправильно. 1.1.2. Аномалии обновления (UPDATE) Фамилии сотрудников, наименования проектов, номера телефонов повторяются во многих кортежах отношения. Поэтому если сотрудник меняет фамилию, или проект меняет наименование, или меняется номер телефона, то такие изменения необходимо одновременно выполнить во всех местах, где эта фамилия, наименование или номер телефона встречаются, иначе отношение станет некорректным (например, один и тот же проект в разных кортежах будет называться по-разному). Таким образом, обновление базы данных одним действием реализовать невозможно. Для поддержания отношения в целостном состоянии необходимо написать триггер, который при обновлении одной записи корректно исправлял бы данные и в других местах. Причина аномалии - избыточность данных, также порожденная тем, что в одном отношении хранится разнородная информация. Вывод - увеличивается сложность разработки базы данных. База данных, основанная на такой модели, будет работать правильно только при наличии дополнительного программного кода в виде триггеров. 1.1.3. Аномалии удаления (DELETE) При удалении некоторых данных может произойти потеря другой информации. Например, если закрыть проект "Космос" и удалить все строки, в которых он встречается, то будут потеряны все данные о сотруднике Петрове. Если удалить сотрудника Сидорова, то будет потеряна информация о том, что в отделе номер 2 находится телефон 33-22-11. Если по проекту временно прекращены работы, то при удалении данных о работах по этому проекту будут удалены и данные о самом проекте (наименование проекта). При этом если был сотрудник, который работал только над этим проектом, то будут потеряны и данные об этом сотруднике. Причина аномалии - хранение в одном отношении разнородной информации (и о сотрудниках, и о проектах, и о работах по проекту). Вывод - логическая модель данных неадекватна модели предметной области. База данных, основанная на такой модели, будет работать неправильно. Функциональные зависимости Отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ находится в 1НФ, при этом, как было показано выше, логическая модель данных не адекватна модели предметной области. Таким образом, первой нормальной формы недостаточно для правильного моделирования данных. 27 1.2 Определение функциональной зависимости Для устранения указанных аномалий (а на самом деле для правильного проектирования модели данных!) применяется метод нормализации отношений. Нормализация основана на понятии функциональной зависимости атрибутов отношения. Пусть атрибутов - отношение. Множество атрибутов ( функционально определяет состояния отношения функционально зависимо от множества ) тогда и только тогда, когда для любого для любых кортежей из того, что (т.е. во всех кортежах, имеющих одинаковые значения атрибутов атрибутов также совпадают в любом состоянии отношения зависимость записывается следует что , значения ). Символически функциональная . Множество атрибутов множество атрибутов называется детерминантом функциональной зависимости, а называется зависимой частью. Замечание. Если атрибуты атрибут отношения составляют потенциальный ключ отношения функционально зависит от , то любой . Пример 1. В отношении СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ можно привести следующие примеры функциональных зависимостей: Зависимость атрибутов, характеризующих сотрудника от табельного номера сотрудника: Н_СОТР ФАМ Н_СОТР Н_ОТД Н_СОТР ТЕЛ Зависимость наименования проекта от номера проекта: Н_ПРО ПРОЕКТ Зависимость номера телефона от номера отдела: Н_ОТД ТЕЛ Зависимость атрибутов от ключа отношения: {Н_СОТР, Н_ПРО} ФАМ {Н_СОТР, Н_ПРО} Н_ОТД {Н_СОТР, Н_ПРО} ТЕЛ {Н_СОТР, Н_ПРО} ПРОЕКТ 28 {Н_СОТР, Н_ПРО} Н_ЗАДАН Замечание. Приведенные функциональные зависимости не выведены из внешнего вида отношения, приведенного в таблице 1. Эти зависимости отражают взаимосвязи, обнаруженные между объектами предметной области и являются дополнительными ограничениями, определяемыми предметной областью. Таким образом, функциональная зависимость семантическое понятие. Она возникает, когда по значениям одних данных в предметной области можно определить значения других данных. Например, зная табельный номер сотрудника, можно определить его фамилию, по номеру отдела можно определить телефона. Функциональная зависимость задает дополнительные ограничения на данные, которые могут храниться в отношениях. Для корректности базы данных (адекватности предметной области) необходимо при выполнении операций модификации базы данных проверять все ограничения, определенные функциональными зависимостями. 1.3 Функциональные зависимости отношений и математическое понятие функциональной зависимости Функциональная зависимость атрибутов отношения напоминает понятие функциональной зависимости в математике. Но это не одно и то же. Для сравнения напомним математическое понятие функциональной зависимости. Функциональная зависимость (функция) - это тройка объектов , где - множество (область определения), - множество (множество значений), - правило, согласно которому каждому элементу один элемент ставится в соответствие один и только (правило функциональной зависимости). Функциональная зависимость обычно обозначается как или . Замечание. Правило может быть задано любым способом - в виде формулы (чаще всего), при помощи таблицы значений, при помощи графика, текстовым описанием и т.д. Функциональная зависимость атрибутов отношения тоже напоминает это определение. Действительно: - В качестве области определения выступает домен, на котором определен атрибут (или декартово произведение доменов, если является множеством атрибутов) В качестве множества значений выступает домен, на котором определен атрибут (или декартово произведение доменов) Правило реализуется следующим алгоритмом - 1) по данному значению атрибута найти любой кортеж отношения, содержащий это значение, 2) значение атрибута в этом кортеже и будет значением функциональной зависимости, соответствующим данному . Определение функциональной зависимости в отношении гарантирует, что найденное значение не зависит от выбора кортежа, поэтому правило 29 определено корректно. Отличие от математического понятия отношения состоит в том, что, если рассматривать математическое понятие функции, то для фиксированного значения значение функции соответствующее всегда одно и то же. Например, если задана функция , то для значения соответствующее значение всегда будет равно 4. В противоположность этому в отношениях значение зависимого атрибута может принимать различные значения в различных состояниях базы данных. Например, атрибут ФАМ функционально зависит от атрибута Н_СОТР. Предположим, что сейчас сотрудник с табельным номером 1 имеет фамилию Иванов, т.е. при значении детерминанта равного 1, значение зависимого аргумента равно "Иванов". Но сотрудник может сменить фамилию, например на "Сидоров". Теперь при том же значении детерминанта, равного 1, значение зависимого аргумента равно "Сидоров". Таким образом, понятие функциональной зависимости атрибутов нельзя считать полностью эквивалентным математическому понятию функциональной зависимости, т.к. значение этой зависимости различны при разных состояниях отношения, и, самое главное, эти значения могут меняться непредсказуемо. Функциональная зависимость атрибутов утверждает лишь то, что для каждого конкретного состояния базы данных по значению одного атрибута (детерминанта) можно однозначно определить значение другого атрибута (зависимой части). Но конкретные значение зависимой части могут быть различны в различных состояниях базы данных. 30 2НФ (Вторая Нормальная Форма) 1.4 Определение Отношение находится во второй нормальной форме (2НФ) тогда и только тогда, когда отношение находится в 1НФ и нет неключевых атрибутов, зависящих от части сложного ключа. (Неключевой атрибут - это атрибут, не входящий в состав никакого потенциального ключа). Замечание. Если потенциальный ключ отношения является простым, то отношение автоматически находится в 2НФ. Отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ не находится в 2НФ, т.к. есть атрибуты, зависящие от части сложного ключа: Зависимость атрибутов, характеризующих сотрудника от табельного номера сотрудника является зависимостью от части сложного ключа: Н_СОТР ФАМ Н_СОТР Н_ОТД Н_СОТР ТЕЛ Зависимость наименования проекта от номера проекта является зависимостью от части сложного ключа: Н_ПРО ПРОЕКТ Для того, чтобы устранить зависимость атрибутов от части сложного ключа, нужно произвести декомпозицию отношения на несколько отношений. При этом те атрибуты, которые зависят от части сложного ключа, выносятся в отдельное отношение. Отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ декомпозируем на три отношения СОТРУДНИКИ_ОТДЕЛЫ, ПРОЕКТЫ, ЗАДАНИЯ. Отношение СОТРУДНИКИ_ОТДЕЛЫ (Н_СОТР, ФАМ, Н_ОТД, ТЕЛ): Функциональные зависимости: Зависимость атрибутов, характеризующих сотрудника от табельного номера сотрудника: Н_СОТР ФАМ Н_СОТР Н_ОТД Н_СОТР ТЕЛ Зависимость номера телефона от номера отдела: Н_ОТД ТЕЛ 31 Таблица 2. Отношение СОТРУДНИКИ_ОТДЕЛЫ Н_СОТР ФАМ Н_ОТД ТЕЛ 1 Иванов 1 11-22-33 2 Петров 1 11-22-33 3 Сидоров 2 33-22-11 Отношение ПРОЕКТЫ (Н_ПРО, ПРОЕКТ): Функциональные зависимости: Н_ПРО ПРОЕКТ Таблица 3. Отношение ПРОЕКТЫ Н_ПРО ПРОЕКТ 1 Космос 2 Климат Отношение ЗАДАНИЯ (Н_СОТР, Н_ПРО, Н_ЗАДАН): Функциональные зависимости: (Н_СОТР, Н_ПРО) Н_ЗАДАН Таблица 4. Отношения ЗАДАНИЯ Н_СОТР Н_ПРО Н_ЗАДАН 1 1 1 1 2 1 2 1 2 3 1 3 32 3 2 2 1.5 Анализ декомпозированных отношений Отношения, полученные в результате декомпозиции, находятся в 2НФ. Действительно, отношения СОТРУДНИКИ_ОТДЕЛЫ и ПРОЕКТЫ имеют простые ключи, следовательно, автоматически находятся в 2НФ, отношение ЗАДАНИЯ имеет сложный ключ, но единственный неключевой атрибут Н_ЗАДАН функционально зависит от всего ключа {Н_СОТР, Н_ПРО}. Часть аномалий обновления устранена. Так, данные о сотрудниках и проектах теперь хранятся в различных отношениях, поэтому при появлении сотрудников, не участвующих ни в одном проекте просто добавляются кортежи в отношение СОТРУДНИКИ_ОТДЕЛЫ. Точно также, при появлении проекта, над которым не работает ни один сотрудник, просто вставляется кортеж в отношение ПРОЕКТЫ. Фамилии сотрудников и наименования проектов теперь хранятся без избыточности. Если сотрудник сменит фамилию или проект сменит наименование, то такое обновление будет произведено в одном месте. Если по проекту временно прекращены работы, но требуется, чтобы сам проект сохранился, то для этого проекта удаляются соответствующие кортежи в отношении ЗАДАНИЯ, а данные о самом проекте и данные о сотрудниках, участвовавших в проекте, остаются в отношениях ПРОЕКТЫ и СОТРУДНИКИ_ОТДЕЛЫ. Тем не менее, часть аномалий разрешить не удалось. 1.5.1. Оставшиеся аномалии вставки (INSERT) В отношение СОТРУДНИКИ_ОТДЕЛЫ нельзя вставить кортеж (4, Пушников, 1, 33-22-11), т.к. при этом получится, что два сотрудника из 1-го отдела (Иванов и Пушников) имеют разные номера телефонов, а это противоречит модели предметной области. В этой ситуации можно предложить два решения, в зависимости от того, что реально произошло в предметной области. Другой номер телефона может быть введен по двум причинам - по ошибке человека, вводящего данные о новом сотруднике, или потому что номер в отделе действительно изменился. Тогда можно написать триггер, который при вставке записи о сотруднике проверяет, совпадает ли телефон с уже имеющимся телефоном у другого сотрудника этого же отдела. Если номера отличаются, то система должна задать вопрос, оставить ли старый номер в отделе или заменить его новым. Если нужно оставить старый номер (новый номер введен ошибочно), то кортеж с данными о новом сотруднике будет вставлен, но номер телефона будет у него будет тот, который уже есть в отделе (в данном случае, 11-22-33). Если же номер в отделе действительно изменился, то кортеж будет вставлен с новым номером, и одновременно будут изменены номера телефонов у всех сотрудников этого же отдела. И в том и в другом случае не обойтись без разработки громоздкого триггера. 33 Причина аномалии - избыточность данных, порожденная тем, что в одном отношении хранится разнородная информация (о сотрудниках и об отделах). Вывод - увеличивается сложность разработки базы данных. База данных, основанная на такой модели, будет работать правильно только при наличии дополнительного программного кода в виде триггеров. 1.5.2. Оставшиеся аномалии обновления (UPDATE) Одни и те же номера телефонов повторяются во многих кортежах отношения. Поэтому если в отделе меняется номер телефона, то такие изменения необходимо одновременно выполнить во всех местах, где этот номер телефона встречаются, иначе отношение станет некорректным. Таким образом, обновление базы данных одним действием реализовать невозможно. Необходимо написать триггер, который при обновлении одной записи корректно исправляет номера телефонов в других местах. Причина аномалии - избыточность данных, также порожденная тем, что в одном отношении хранится разнородная информация. Вывод - увеличивается сложность разработки базы данных. База данных, основанная на такой модели, будет работать правильно только при наличии дополнительного программного кода в виде триггеров. 1.5.3. Оставшиеся аномалии удаления (DELETE) При удалении некоторых данных по-прежнему может произойти потеря другой информации. Например, если удалить сотрудника Сидорова, то будет потеряна информация о том, что в отделе номер 2 находится телефон 33-22-11. Причина аномалии - хранение в одном отношении разнородной информации (и о сотрудниках, и об отделах). Вывод - логическая модель данных неадекватна модели предметной области. База данных, основанная на такой модели, будет работать неправильно. Заметим, что при переходе ко второй нормальной форме отношения стали почти адекватными предметной области. Остались также трудности в разработке базы данных, связанные с необходимостью написания триггеров, поддерживающих целостность базы данных. Эти трудности теперь связаны только с одним отношением СОТРУДНИКИ_ОТДЕЛЫ. 3НФ (Третья Нормальная Форма) Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого. 34 Отношение находится в третьей нормальной форме (3НФ) тогда и только тогда, когда отношение находится в 2НФ и все неключевые атрибуты взаимно независимы. Отношение СОТРУДНИКИ_ОТДЕЛЫ не находится в 3НФ, т.к. имеется функциональная зависимость неключевых атрибутов (зависимость номера телефона от номера отдела): Н_ОТД ТЕЛ Для того, чтобы устранить зависимость неключевых атрибутов, нужно произвести декомпозицию отношения на несколько отношений. При этом те неключевые атрибуты, которые являются зависимыми, выносятся в отдельное отношение. Отношение СОТРУДНИКИ_ОТДЕЛЫ декомпозируем на два отношения - СОТРУДНИКИ, ОТДЕЛЫ. Отношение СОТРУДНИКИ (Н_СОТР, ФАМ, Н_ОТД): Функциональные зависимости: Зависимость атрибутов, характеризующих сотрудника от табельного номера сотрудника: Н_СОТР ФАМ Н_СОТР Н_ОТД Н_СОТР ТЕЛ Таблица 5. Отношение СОТРУДНИКИ Н_СОТР ФАМ Н_ОТД 1 Иванов 1 2 Петров 1 3 Сидоров 2 Отношение ОТДЕЛЫ (Н_ОТД, ТЕЛ): Функциональные зависимости: Зависимость номера телефона от номера отдела: Н_ОТД ТЕЛ Таблица 6. Отношение ОТДЕЛЫ Н_ОТД ТЕЛ 35 1 11-22-33 2 33-22-11 Обратим внимание на то, что атрибут Н_ОТД, не являвшийся ключевым в отношении СОТРУДНИКИ_ОТДЕЛЫ, становится потенциальным ключом в отношении ОТДЕЛЫ. Именно за счет этого устраняется избыточность, связанная с многократным хранением одних и тех же номеров телефонов. Вывод. Таким образом, все обнаруженные аномалии обновления устранены. Реляционная модель, состоящая из четырех отношений СОТРУДНИКИ, ОТДЕЛЫ, ПРОЕКТЫ, ЗАДАНИЯ, находящихся в третьей нормальной форме, является адекватной описанной модели предметной области, и требует наличия только тех триггеров, которые поддерживают ссылочную целостность. Такие триггеры являются стандартными и не требуют больших усилий в разработке. 1.6 Алгоритм нормализации (приведение к 3НФ) Итак, алгоритм нормализации (т.е. алгоритм приведения отношений к 3НФ) описывается следующим образом. Шаг 1 (Приведение к 1НФ). На первом шаге задается одно или несколько отношений, отображающих понятия предметной области. По модели предметной области (не по внешнему виду полученных отношений!) выписываются обнаруженные функциональные зависимости. Все отношения автоматически находятся в 1НФ. Шаг 2 (Приведение к 2НФ). Если в некоторых отношениях обнаружена зависимость атрибутов от части сложного ключа, то проводим декомпозицию этих отношений на несколько отношений следующим образом: те атрибуты, которые зависят от части сложного ключа выносятся в отдельное отношение вместе с этой частью ключа. В исходном отношении остаются все ключевые атрибуты: Исходное отношение: Ключ: . - сложный. Функциональные зависимости: - зависимость всех атрибутов от ключа отношения. - зависимость некоторых атрибутов от части сложного ключа. Декомпозированные отношения: - остаток от исходного отношения. Ключ 36 . - атрибуты, вынесенные из исходного отношения вместе с частью сложного ключа. Ключ . Шаг 3 (Приведение к 3НФ). Если в некоторых отношениях обнаружена зависимость некоторых неключевых атрибутов других неключевых атрибутов, то проводим декомпозицию этих отношений следующим образом: те неключевые атрибуты, которые зависят других неключевых атрибутов выносятся в отдельное отношение. В новом отношении ключом становится детерминант функциональной зависимости: Исходное отношение: Ключ: . . Функциональные зависимости: - зависимость всех атрибутов от ключа отношения. - зависимость некоторых неключевых атрибутов других неключевых атрибутов. Декомпозированные отношения: - остаток от исходного отношения. Ключ . - атрибуты, вынесенные из исходного отношения вместе с детерминантом функциональной зависимости. Ключ . Замечание. На практике, при создании логической модели данных, как правило, не следуют прямо приведенному алгоритму нормализации. Опытные разработчики обычно сразу строят отношения в 3НФ. Кроме того, основным средством разработки логических моделей данных являются различные варианты ER-диаграмм. Особенность этих диаграмм в том, что они сразу позволяют создавать отношения в 3НФ. Тем не менее, приведенный алгоритм важен по двум причинам. Во-первых, этот алгоритм показывает, какие проблемы возникают при разработке слабо нормализованных отношений. Во-вторых, как правило, модель предметной области никогда не бывает правильно разработана с первого шага. Эксперты предметной области могут забыть о чем-либо упомянуть, разработчик может неправильно понять эксперта, во время разработки могут измениться правила, принятые в предметной области, и т.д. Все это может привести к появлению новых зависимостей, которые отсутствовали в первоначальной модели предметной области. Тут как раз и необходимо использовать алгоритм нормализации хотя бы для того, чтобы убедиться, что отношения остались в 3НФ и логическая модель не ухудшилась. 37 Сравнение нормализованных и ненормализованных моделей Соберем воедино результаты анализа критериев, по которым мы хотели оценить влияние логического моделирования данных на качество физических моделей данных и производительность базы данных: Критерий Адекватность базы данных предметной области Легкость разработки и сопровождения базы данных Скорость выполнения вставки, обновления, удаления Скорость выполнения выборки данных Отношения слабо нормализованы (1НФ, 2НФ) Отношения сильно нормализованы (3НФ) ХУЖЕ (-) ЛУЧШЕ (+) СЛОЖНЕЕ (-) ЛЕГЧЕ (+) МЕДЛЕННЕЕ (-) БЫСТРЕЕ (+) БЫСТРЕЕ (+) МЕДЛЕННЕЕ (-) Как видно из таблицы, более сильно нормализованные отношения оказываются лучше спроектированы (три плюса, один минус). Они больше соответствуют предметной области, легче в разработке, для них быстрее выполняются операции модификации базы данных. Правда, это достигается ценой некоторого замедления выполнения операций выборки данных. У слабо нормализованных отношений единственное преимущество - если к базе данных обращаться только с запросами на выборку данных, то для слабо нормализованных отношений такие запросы выполняются быстрее. Это связано с тем, что в таких отношениях уже как бы произведено соединение отношений и на это не тратится время при выборке данных. Таким образом, выбор степени нормализации отношений зависит от характера запросов, с которыми чаще всего обращаются к базе данных. Список литературы 1. Пушников А.Ю. Введение в системы управления базами данных. Часть 1. Реляционная модель данных: Учебное пособие/Изд-е Башкирского ун-та. - Уфа, 1999. - 108 с. - ISBN 5-7477-0350-1. 2. Пушников А.Ю. Введение в системы управления базами данных. Часть 2. Нормальные формы отношений и транзакции: Учебное пособие/Изд-е Башкирского ун-та. - Уфа, 1999. - 138 с. - ISBN 5-7477-0351-X. (http://www.citforum.ru/database/dblearn/dblearn00.shtml) 38 39 Лекция 4. Целостность реляционных данных Для реляционной модели данных определяются два ограничения, которые должны выполняться в любой реляционной базе данных: - целостность сущностей, - целостность внешних ключей. Прежде, чем говорить о целостности сущностей, опишем использование null-значений в реляционных базах данных. Null-значения Основное назначение баз данных состоит в том, чтобы хранить и предоставлять информацию о реальном мире. Для представления этой информации в базе данных используются привычные для программистов типы данных - строковые, численные, логические и т.п. Однако в реальном мире часто встречается ситуация, когда данные неизвестны или не полны. Например, место жительства или дата рождения человека могут быть неизвестны (база данных разыскиваемых преступников). Если вместо неизвестного адреса уместно было бы вводить пустую строку, то что вводить вместо неизвестной даты? Ответ - пустую дату - не вполне удовлетворителен, т.к. простейший запрос "выдать список людей в порядке возрастания дат рождения" даст заведомо неправильных ответ. Для того чтобы обойти проблему неполных или неизвестных данных, в базах данных могут использоваться типы данных, пополненные так называемым null-значением. Null-значение - это, собственно, не значение, а некий маркер, показывающий, что значение неизвестно. Таким образом, в ситуации, когда возможно появление неизвестных или неполных данных, разработчик имеет на выбор два варианта. Первый вариант состоит в том, чтобы ограничиться использованием обычных типов данных и не использовать null-значения, а вместо неизвестных данных вводить либо нулевые значения, либо значения специального вида - например, договориться, что строка "АДРЕС НЕИЗВЕСТЕН" и есть те данные, которые нужно вводить вместо неизвестного адреса. В любом случае на пользователя (или на разработчика) ложится ответственность на правильную трактовку таких данных. В частности, может потребоваться написание специального программного кода, который в нужных случаях "вылавливал" бы такие данные. Проблемы, возникающие при этом очевидны - не все данные становятся равноправны, требуется дополнительный программный код, "отслеживающий" эту неравноправность, в результате чего усложняется разработка и сопровождение приложений. Второй вариант состоит в использовании null-значений вместо неизвестных данных. За кажущейся естественностью такого подхода скрываются менее очевидные и более глубокие проблемы. В этом случае при неаккуратном формулировании запросов, даже самые естественные запросы могут давать неправильные ответы. Есть более фундаментальные проблемы, связанные с 40 теоретическим обоснованием корректности введения null-значений, например, непонятно вообще, входят ли null-значения в домены или нет. Практически все реализации современных реляционных СУБД позволяют использовать null-значения, несмотря на их недостаточную теоретическую обоснованность. Потенциальные ключи По определению, тело отношения есть множество кортежей, поэтому отношения не могут содержать одинаковые кортежи. Это значит, что каждый кортеж должен обладать свойством уникальности. На самом деле, свойством уникальности в пределах отношения могут обладать отдельные атрибуты кортежей или группы атрибутов. Такие уникальные атрибуты удобно использовать для идентификации кортежей. Пусть дано отношение . Подмножество атрибутов называть потенциальным ключом, если отношения будем обладает следующими свойствами: 1. Свойством уникальности - в отношении не может быть двух различных кортежей, с одинаковым значением . 2. Свойством неизбыточности - никакое подмножество в не обладает свойством уникальности. Любое отношение имеет по крайней мере один потенциальный ключ. Действительно, если никакой атрибут или группа атрибутов не являются потенциальным ключом, то, в силу уникальности кортежей, все атрибуты вместе образуют потенциальный ключ. Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным. Отношение может иметь несколько потенциальных ключей. Традиционно, один из потенциальных ключей объявляется первичным, а остальные - альтернативными. Различия между первичным и альтернативными ключами могут быть важны в конкретной реализации реляционной СУБД, но с точки зрения реляционной модели данных, нет оснований выделять таким образом один из потенциальных ключей. Замечание 1. Потенциальные ключи служат средством идентификации объектов предметной области, данные о которых хранятся в отношении. Объекты предметной области должны быть различимы. Замечание 2. Потенциальные ключи служат единственным средством адресации на уровне кортежей в отношении. Точно указать какой-нибудь кортеж можно, только зная значение его потенциального ключа. Целостность сущностей Т.к. потенциальные ключи фактически служат идентификаторами объектов предметной области (т.е. предназначены для различения объектов), то значения этих идентификаторов не 41 могут содержать неизвестные значения. Действительно, если бы идентификаторы могли содержать null-значения, то мы не могли бы дать ответ "да" или "нет" на вопрос, совпадают или нет два идентификатора. Это определяет следующее правило целостности сущностей - атрибуты, входящие в состав некоторого потенциального ключа не могут принимать null-значений. Внешние ключи Различные объекты предметной области, информация о которых хранится в базе данных, всегда взаимосвязаны друг с другом. Например, накладная на поставку товара содержит список товаров с количествами и ценами, сотрудник предприятия имеет детей, числится в подразделении и т.д. Термины "содержит", "имеет", "числится" отражают взаимосвязи между понятиями "накладная" и "список товаров", "сотрудник" и "дети", "сотрудник" и "подразделение". Такие взаимосвязи отражаются в реляционных базах данных при помощи внешних ключей, связывающих несколько отношений. Рассмотрим пример с поставщиками и поставками деталей. Предположим, что нам требуется хранить информацию о наименовании поставщиков, наименовании и количестве поставляемых ими деталей, причем каждый поставщик может поставлять несколько деталей и каждая деталь может поставляться несколькими поставщиками. Можно предложить хранить данные в следующем отношении. Таблица 5. Отношение "Поставщики и поставляемые детали" Номер поставщика Наименование поставщика Номер детали Наименование детали Поставляемое количество 1 Иванов 1 Болт 100 1 Иванов 2 Гайка 200 1 Иванов 3 Винт 300 2 Петров 1 Болт 150 2 Петров 2 Гайка 250 3 Сидоров 3 Винт 1000 Потенциальным ключом этого отношения может выступать пара атрибутов {"Номер поставщика", "Номер детали"} - в таблице они выделены курсивом. 42 Приведенный способ хранения данных обладает рядом недостатков. Что произойдет, если изменилось наименование поставщика? Т.к. наименование поставщика повторяется во многих кортежах отношения, то это наименование нужно одновременно изменить во всех кортежах, где оно встречается, иначе данные станут противоречивыми. То же самое с наименованиями деталей. Значит, данные хранятся в нашем отношении с большой избыточностью. Далее, как отразить факт, что некоторый поставщик, например Петров, временно прекратил поставки деталей? Если мы удалим все кортежи, в которых хранится информация о поставках этого поставщика, то мы потеряем данные о самом Петрове как потенциальном поставщике. Выйти из этого положения, оставив в отношении кортеж типа (2, Петров, NULL, NULL, NULL) мы не можем, т.к. атрибут "Номер детали" входит в состав потенциального ключа и не может содержать null-значений. То же самое произойдет, если некоторая деталь временно не поставляется никаким поставщиком. Получается, что мы не можем хранить информацию о том, что есть некий поставщик, если он не поставляет хотя бы одну деталь, и не можем хранить информацию о том, что есть некоторая деталь, если она никем не поставляется. Подобные проблемы возникают потому, что мы смешали в одном отношении различные объекты предметной области - и данные о поставщиках, и данные о деталях, и данные о поставках деталей. Говорят, что это отношение плохо нормализовано. Разобъем данные по трем отношениям - "Поставщики", "Детали", "Поставки". Для нас важно выяснить, каким образом данные, хранящиеся в этих отношениях взаимосвязаны друг с другом. Эта связь определяется семантикой предметной области и описывается фразами: "Поставщики выполняют Поставки", "Детали поставляются через Поставки". Эти две взаимосвязи косвенно определяют новую взаимосвязь между "Поставщиками" и "Деталями": "Детали поставляются Поставщиками". Эти фразы отражают различные типы взаимосвязей. Чтобы более точно отразить предметную область, можно иначе переформулировать фразы: "Один Поставщик может выполнять несколько Поставок", "Одна Деталь может поставляться несколькими Поставками". Это пример взаимосвязи типа "один-ко-многим". Взаимосвязь между "Поставщиками" и "Деталями" можно переформулировать так: "Несколько Деталей может поставляться несколькими Поставщиками". Это пример взаимосвязи типа "много-ко-многим". В реляционных базах данных основными являются взаимосвязи типа "один-ко-многим". Взаимосвязи типа "много-ко-многим" реализуются использованием нескольких взаимосвязей типа "один-ко-многим". Отношение, входящее в связь со стороны "один" (например, "Поставщики"), называют родительским отношением. Отношение, входящее в связь со стороны "много" (например, "Поставки"), называется дочернем отношением. Механизм реализации взаимосвязи "один-ко-многим" состоит в том, что в дочернее отношение добавляются атрибуты, являющиеся ссылками на ключевые атрибуты родительского отношения. Эти атрибуты и являются внешними ключами, определяющими, с какими кортежами 43 родительского отношения связаны кортежи дочернего отношения. Такие атрибуты еще называют мигрирующими из родительского отношения. Таким образом, наш пример с поставщиками и поставляемыми деталями должен выглядеть следующим образом: Таблица 6. Отношение "Поставщики" Номер поставщика Таблица 7. Отношение "Детали" Наименование поставщика 1 Номер детали Наименование детали 1 Болт 2 Гайка 3 Винт Иванов 2 Петров 3 Сидоров Таблица 8. Отношение "Поставки" Номер поставщика Номер детали Поставляемое количество 1 1 100 1 2 200 1 3 300 2 1 150 2 2 250 3 3 1000 В отношении "Поставки" атрибуты "Номер поставщика" и "Номер детали" являются ссылками на ключевые атрибуты отношений "Поставщики" и "Детали", и, следовательно, являются внешними ключами. Заметим, что данные отношения свободны от недостатков, описанных выше, когда все данные предлагалось хранить в одном отношении. Действительно, при изменении наименования поставщика или детали, это изменение происходит только в одном месте. Если поставщик прекратил поставки всех деталей, то удаляются соответствующие кортежи в отношении "Поставки", данные же о самом поставщике остаются без изменений. Дадим точное определение. 44 Пусть дано отношение . Подмножество атрибутов называть внешним ключом, если: отношения будем 1. Существует отношение ( и не обязательно различны) с потенциальным ключом . 2. Каждое значение в отношении всегда совпадает со значением для некоторого кортежа из , либо является null-значением. Отношение называется родительским отношением, отношение дочерним отношением. называется Замечание 1. Внешний ключ, также как и потенциальный, может быть простым и составным. Замечание 2. Внешний ключ должен быть определен на тех же доменах, что и соответствующий первичный ключ родительского отношения. Замечание 3. Внешний ключ, как правило, не обладает свойством уникальности. Так и должно быть, т.к. в дочернем отношении может быть несколько кортежей, ссылающихся на один и тот же кортеж родительского отношения. Это, собственно, и дает тип отношения "один-комногим". Замечание 4. Если внешний ключ все-таки обладает свойством уникальности, то связь между отношениями имеет тип "один-к-одному". Чаще всего такие отношения объединяются в одно отношение, хотя это и не обязательно. Замечание 5. Хотя каждое значение внешнего ключа обязано совпадать со значениями потенциального ключа в некотором кортеже родительского отношения, то обратное, вообще говоря, неверно. Например, могут существовать поставщики, не поставляющие никаких деталей. Замечание 6. Для внешнего ключа не требуется, чтобы он был компонентом некоторого потенциального ключа (как получилось в примере с поставщиками и деталями). Замечание 7. Null-значения для атрибутов внешнего ключа допустимы только в том случае, когда атрибуты внешнего ключа не входят в состав никакого потенциального ключа. Целостность внешних ключей Т.к. внешние ключи фактически служат ссылками на кортежи в другом (или в том же самом) отношении, то эти ссылки не должны указывать на несуществующие объекты. Это определяет правило целостности внешних ключей - внешние ключи не должны быть несогласованными, т.е. для каждого значения внешнего ключа должно существовать соответствующее значение первичного ключа в родительском отношении. Замечания к правилам целостности сущностей и внешних ключей На самом деле приведенные правила целостности сущностей и внешних ключей прямо следуют из определений понятий "потенциальный ключ" и "внешний ключ". 45 Действительно, в определении потенциального ключа требуется, чтобы потенциальный ключ обладал свойством уникальности. Это фактически означает, что мы должны уметь различать значения потенциальных ключей, т.е. при сравнении двух значений потенциального ключа мы всегда должны получать значения либо ИСТИНА, либо ЛОЖЬ. Но любое сравнение, в которое входит null-значение, принимает значение U - НЕИЗВЕСТНО, откуда следует, что атрибуты потенциального ключа не могут содержать null-значений. Для внешних ключей правило целостности фактически входит в определение (п. 2 определения). Таким образом, с точки зрения реляционной теории, явная формулировка правил целостности является излишней - они автоматически вытекают из определений понятий ключа и внешнего ключа. Тем не менее, явная формулировка правил целостности имеет определенный практический смысл. В большинстве серьезных СУБД за выполнением этих ограничений следит сама СУБД, если, конечно, пользователь явно объявил потенциальные и внешние ключи. Но, вопервых, для некоторых систем можно допустить, чтобы эти ограничения не выполнялись, а вовторых, некоторые системы просто не поддерживают понятия целостности, например, некоторые "настольные" СУБД типа FoxPro 2.5. В этих случаях за целостностью данных должен следить сам пользователь, или программист, разрабатывающий приложение для пользователя. Явная формулировка правил целостности помогает четко понять, какие опасности несет в себе пренебрежение этими правилами. Операции, которые могут нарушить ссылочную целостность Ссылочная целостность может нарушиться в результате операций, изменяющих состояние базы данных. Таких операций три - вставка, обновление и удаление кортежей в отношениях. Т.к. в определении ссылочной целостности участвуют два отношения - родительское и дочернее, а в каждом из них возможны три операции - вставка, обновление, удаление, то нужно рассмотреть шесть различных вариантов. 1.1 Для родительского отношения 1. Вставка кортежа в родительском отношении. При вставке кортежа в родительское отношение возникает новое значение потенциального ключа. Т.к. допустимо существование кортежей в родительском отношении, на которые нет ссылок из дочернего отношения, то вставка кортежей в родительское отношение не нарушает ссылочной целостности. 2. Обновление кортежа в родительском отношении. При обновлении кортежа в родительском отношении может измениться значение потенциального ключа. Если есть кортежи в дочернем отношении, ссылающиеся на обновляемый кортеж, то значения их внешних ключей станут некорректными. Обновление кортежа в родительском отношении может привести к нарушению ссылочной целостности, если это обновление затрагивает значение потенциального ключа. 46 3. Удаление кортежа в родительском отношении. При удалении кортежа в родительском отношении удаляется значение потенциального ключа. Если есть кортежи в дочернем отношении, ссылающиеся на удаляемый кортеж, то значения их внешних ключей станут некорректными. Удаление кортежей в родительском отношении может привести к нарушению ссылочной целостности. 1.2 Для дочернего отношения 1. Вставка кортежа в дочернее отношение. Нельзя вставить кортеж в дочернее отношение, если вставляемое значение внешнего ключа некорректно. Вставка кортежа в дочернее отношение привести к нарушению ссылочной целостности. 2. Обновление кортежа в дочернем отношении. При обновлении кортежа в дочернем отношении можно попытаться некорректно изменить значение внешнего ключа. Обновление кортежа в дочернем отношении может привести к нарушению ссылочной целостности. 3. Удаление кортежа в дочернем отношении. При удалении кортежа в дочернем отношении ссылочная целостность не нарушается. Таким образом, ссылочная целостность в принципе может быть нарушена при выполнении одной из четырех операций: Обновление кортежа в родительском отношении. Удаление кортежа в родительском отношении. Вставка кортежа в дочернее отношение. Обновление кортежа в дочернем отношении. Стратегии поддержания ссылочной целостности Существуют две основные стратегии поддержания ссылочной целостности. 1. RESTRICT (ОГРАНИЧИТЬ) – не разрешать выполнение операции, приводящей к нарушению ссылочной целостности. Это самая простая стратегия, требующая только проверки, имеются ли кортежи в дочернем отношении, связанные с некоторым кортежем в родительском отношении. 2. CASCADE (КАСКАДИРОВАТЬ) – разрешить выполнение требуемой операции, но внести при этом необходимые поправки в других отношениях так, чтобы не допустить нарушения ссылочной целостности и сохранить все имеющиеся связи. Изменение начинается в родительском отношении и каскадно выполняется в дочернем отношении. В реализации этой стратегии имеется одна тонкость, заключающаяся в том, что дочернее отношение само может быть родительским для некоторого третьего отношения. При этом может дополнительно потребоваться выполнение какой-либо стратегии и для этой связи и т.д. Если при этом какая-либо из каскадных операций (любого уровня) не может быть выполнена, то необходимо отказаться от первоначальной операции и вернуть базу данных в исходное состояние. Это самая сложная стратегия, но она хороша тем, что при этом не нарушается связь между кортежами родительского и дочернего отношений. Эти стратегии являются стандартными и присутствуют во всех СУБД, в которых имеется поддержка ссылочной целостности. 47 Выводы 1. Современные СУБД допускают использование null-значений, т.к. данные часто бывают неполными или неизвестными. Споры о допустимости использования null-значений ведутся до сих пор. 2. Средством, позволяющим однозначно идентифицировать кортежи отношения, являются потенциальные ключи отношения. 3. Потенциальный ключ отношения - это набор атрибутов отношения, обладающий свойствами уникальности и неизбыточности. Доступ к конкретному кортежу можно получить, лишь зная значение потенциального ключа для этого кортежа. 4. Традиционно один из потенциальных ключей объявляется первичным ключом, остальные альтернативными ключами. 5. Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным. 6. Отношения связываются друг с другом при помощи внешних ключей. Внешний ключ отношения - это набор атрибутов отношения, содержащий ссылки на потенциальный ключ другого (или того же самого) отношения. 7. Отношение, содержащее потенциальный ключ, на который ссылается некоторый внешний ключ, называется родительским отношением. Отношение, содержащее внешний ключ, называется дочерним отношением. 8. Внешний ключ не обязан обладать свойством уникальности. Поэтому, одному кортежу родительского отношения может соответствовать несколько кортежей дочернего отношения. Такой тип связи между отношениями называется "один-ко-многим". Связи типа "много-ко-многим" реализуются использованием нескольких отношений типа "одинко-многим". 9. В любой реляционной базе данных должны выполняться два ограничения: Целостность сущностей Целостность внешних ключей Правило целостности сущностей состоит в том, что атрибуты, входящие в состав некоторого потенциального ключа не могут принимать null-значений. Правило целостности внешних ключей состоит в том, что внешние ключи не должны ссылаться на отсутствующие в родительском отношении кортежи, т.е. внешние ключи должны быть корректны. 10. Ссылочную целостность могут нарушить операции, изменяющие состояние базы данных. Такими операциями являются операции вставки, обновления и удаления кортежей. Для поддержания ссылочной целостности обычно используются две основные стратегии: RESTRICT (ОГРАНИЧИТЬ) - не разрешать выполнение операции, приводящей к нарушению ссылочной целостности. CASCADE (КАСКАДИРОВАТЬ) - разрешить выполнение требуемой операции, но внести каскадные изменения в другие отношения так, чтобы не допустить нарушения ссылочной целостности. Список литературы 3. Пушников А.Ю. Введение в системы управления базами данных. Часть 1. Реляционная модель данных: Учебное пособие/Изд-е Башкирского ун-та. - Уфа, 1999. - 108 с. - ISBN 5-7477-0350-1. 48 4. Пушников А.Ю. Введение в системы управления базами данных. Часть 2. Нормальные формы отношений и транзакции: Учебное пособие/Изд-е Башкирского ун-та. - Уфа, 1999. - 138 с. - ISBN 5-7477-0351-X. (http://www.citforum.ru/database/dblearn/dblearn00.shtml) Лекция 5. Основы SQL: запросы к базе данных Вы новичок в программировании или же просто раньше избегали изучения SQL? Тогда вы попали по нужному адресу, так как любой разработчик в конце-концов сталкивается с необходимостью знать этот язык запросов. Пусть вы и не будете главным дизайнером баз данных, но работы с ними избежать практически невозможно. Я надеюсь этот краткий обзор синтаксиса основных SQL-запросов поможет заинтересованному разработчику и любому, кому это понадобится. Что такое база данных SQL? Структурированный язык запросов (Structured Query Language) – стандарт коммуникации с базой данных, который поддержан ANSI. Самая последняя версия – SQL-99, хотя новый стандарт SQL-200n уже находится в разработке. Большинство баз данных твердо придерживается стандарта ANSI-92. Было много обсуждений по поводу введения более современных стандартов, но изготовители коммерческих баз данных отклоняются от этого, развивая свои новые концепции манипуляции хранимыми данными. Почти каждая отдельная база данных использует некоторый уникальный набор синтаксиса, хоть и очень сильно подобного стандарту ANSI. В большинстве случаев, этот синтаксис является расширением базового стандарта, хотя бывают случаи, когда такой синтаксис приводит к различным результатам для разных баз данных. Всегда неплохой идеей будет просмотр документации к базе данных, особенно, если получаются неожиданные результаты. Если вы впервые встречаетесь с SQL, то необходимо ознакомиться с основными концепциями, которые нужно понять. В общих терминах, «SQL база данных» является общим названием для реляционной системы управления базами данных (РСУБД). Для некоторых систем, «база данных» также относится к группе таблиц, данных, конфигурационной информации, которые являются неотъемлемо отдельной частью от других, подобных конструкций. В этом случае, каждая инсталляция SQL базы данных может состоять из нескольких баз данных. В других системах, они упомянуты как таблицы. Таблица – конструкция базы данных, которая состоит из столбцов, содержащих строки данных. Обычно таблицы созданы для того, чтобы содержать связанную информацию. В пределах той же самой базы данных могут быть созданы несколько таблиц. Каждый столбец представляет собой атрибут или совокупность атрибутов объектов, например идентификационные номера служащих, рост, цвет машин и т.п. Часто в отношении столбца используется термин поле с указанием имени, например «в поле Name». Поле строки является минимальным элементом таблицы. Каждый столбец в таблице имеет определенное имя, тип данных и размер. Имена столбцов должны быть 49 уникальны в пределах таблицы. Каждая строка (или запись) представляет собой совокупность атрибутов конкретного объекта, например, в строке может содержаться идентификационный номер служащего, размер его зарплаты, год его рождения и т.д. Строки таблиц не имеют названий. Чтобы обратиться к конкретной строке, пользователю необходимо указать какой-то атрибут (или набор атрибутов), уникально ее идентифицирующий. Одной из важнейших операций, которые выполняются при работе с данными, является выборка хранящейся в базе данных информации. Для этого пользователь должен выполнить запрос (query). Теперь давайте рассмотрим основные типы запросов к базе данных, которые сосредоточены на манипуляции данными в пределах базы. Для наших целей, все примеры приведены в стандартном SQL, дабы соответствовать любой среде. Типы запросов данных Есть четыре основных типа запросов данных в SQL, которые относятся к так называемому языку манипулирования данными (Data Manipulation Language или DML): SELECT – выбрать строки из таблиц; INSERT – добавить строки в таблицу; UPDATE – изменить строки в таблице; DELETE – удалить строки в таблице; Каждый из этих запросов имеет различные операторы и функции, которые используются для того, чтобы произвести какие-то действия с данными. Запрос SELECT имеет самое большое количество опций. Существуют также дополнительные типы запросов, используемых вместе с SELECT, типа JOIN и UNION. Но пока, мы сосредоточимся только на основных запросах. Использование запроса SELECT для выборки нужных данных Чтобы получить информацию, хранящуюся в базе данных используется запрос SELECT. Базовое действие этого запроса ограничено одной таблицей, хотя существуют конструкции, обеспечивающие выборку с нескольких таблиц одновременно. Для того, чтобы получить все строки данных для специфических столбцов, используется запрос такого вида: SELECT column1, column2 FROM table_name; Также, можно получить все столбцы из таблицы, используя подстановочный знак «*»: SELECT * FROM table_name; Это может быть полезно в том случае, когда вы собираетесь выбрать данные с определенным условием WHERE. Следующий запрос возвратит все столбцы со всех 50 строк, где «column1» содержит значение «3»: SELECT * FROM table_name WHERE column1=3; Кроме «=» (равно), существуют следующие условные операторы: Условные операторы = Равно <> Не равно > Больше < Меньше >= Больше или равно <= Меньше или равно Дополнительно можно использовать условия BITWEEN и LIKE для сравнения с условием WHERE, а так же комбинации операторов AND и OR. SELECT * FROM table_name WHERE ((Age >= 18) AND (LastName BETWEEN ‘Иванов’ AND ‘Сидоров’)) OR Company LIKE ‘%Motorola%’; Что в переводе на русский язык означает: выбрать все столбцы из таблицы table_name, где значение столбца age больше или равно 18, а также значение столбца LastName находится в алфавитном промежутке от Иванов до Сидоров включительно, или же значением столбца Company является Motorola. Использование запроса INSERT для вставки новых данных Запрос INSERT используется для создания новой строки данных. Для обновления уже существующих данных или пустых полей строки нужно использовать запрос UPDATE. Примерный синтаксис запроса INSERT: INSERT INTO table_name (column1, column2, column3) VALUES (‘data1’, ‘data2’, ‘data3’); Если вы собираетесь вставлять все значения в порядке, в котором находятся столбцы таблицы, то можно и не указывать имена столбцов, хотя для удобочитаемости это предпочтительнее. Кроме того, если вы перечисляете столбцы, необязательно указывать 51 их по порядку нахождения в базе данных, пока значения, которые вы вводите, соответсвуют этому порядку. Вы не должны перечислять столбцы, в которые не вводится информация. Изменяется уже существующая информация в базе данных очень похожим образом. Запрос UPDATE и условие WHERE UPDATE используется для того, чтобы изменить существующие значения или освободить поле в строке, поэтому новые значения должны соответствовать существующему типу данных и обеспечивать приемлемые значения. Если вы не хотите изменить значения во всех строках, то нужно использовать условие WHERE. UPDATE table_name SET column1 = ‘data1’, column2 = ‘data2’ WHERE column3 = ‘data3’; Вы можете использовать WHERE для любого столбца, включая тот, который хотите изменить. Это используется когда необходимо заменить одно определенное значение на другое. UPDATE table_name SET FirstName = ‘Василий’ WHERE FirstName = ‘Василий’ AND LastName = ‘Пупкин’; Будьте осторожны! Запрос DELETE удаляет целые строки Запрос DELETE полность удаляет строку из базы данных. Если вы хотите удалить одно единственное поле, то нужно использовать запрос UPDATE и установить для этого поля значение, которое будет являться аналогом NULL в вашей программе. Будьте внимательны, и ограничивайте ваш запрос DELETE условием WHERE, иначе вы можете потерять все содержимое таблицы. DELETE FROM table_name WHERE column1 = ‘data1’; Как только строка была удалена из вашей базы данных, она не подлежит восстановлению, поэтому желательно иметь столбец по имени «IsActive», или что-то типа того, который вы можете изменить на ноль, что будет указывать на блокировку представления данных из этой строки. Теперь вы знаете основы SQL запросов SQL – язык баз данных, и мы рассмотрели наиболее важные и базовые команды, используемые в запросах данных. Множество основных концепций не были затронуты (SUM и COUNT например), но те немногие команды, которые удалось перечислить выше, должны побудить вас к активным действиям и более глубокому изучению замечательного языка запросов под именем SQL. 52 Список литературы Бен Форта. Освой самостоятельно язык запросов SQL / Пер. с англ. — 3-е изд. — М.: Диалектика, 2005. — 288 с. Пол Уилтон, Джон Колби. Язык запросов SQL для начинающих / Пер. с англ. — М.: Диалектика, 2005. — 496 с. К. Дж. Дейт. Введение в системы баз данных / Пер. с англ. — 8-е изд. — М.: Вильямс, 2005. — 1328 с. Кевин Клайн. SQL. Справочник. — М.: Кудиц-Образ, 2006. — 832 с. 53 Лекция 6. Табличный процессор Microsoft Excel. Назначение и интерфейс Современные технологии обработки информации часто приводят к тому, что возникает необходимость представления данных в виде таблиц. В языках программирования для такого представления служат двухмерные массивы. Для табличных расчетов характерны относительно простые формулы, по которым производятся вычисления, и большие объемы исходных данных. Такого рода расчеты принято относить к разряду рутинных работ, для их выполнения следует использовать компьютер. Для этих целей созданы электронные таблицы (табличные процессоры) — прикладное программное обеспечение общего назначения, предназначенное для обработки различных данных, представимых в табличной форме. Электронная таблица (ЭТ) позволяет хранить в табличной форме большое количество исходных данных, результатов, а также связей (алгебраических или логических соотношений) между ними. При изменении исходных данных все результаты автоматически пересчитываются и заносятся в таблицу. Электронные таблицы не только автоматизируют расчеты, но и являются эффективным средством моделирования различных вариантов и ситуаций. Меняя значения исходных данных, можно следить за изменением получаемых результатов и из множества вариантов решения задачи выбрать наиболее приемлемый. При работе с табличными процессорами создаются документы, которые также называют электронными таблицами. Такие таблицы можно просматривать, изменять, записывать на носители внешней памяти для хранения, распечатывать на принтере. Таблица – форма организации данных по строкам и столбцам. Электронная таблица – компьютерный эквивалент обычной таблицы. Табличный процессор – комплекс программ, предназначенных для создания и обработки электронных таблиц. Электронная таблица – самая распространенная и мощная технология для профессиональной работы с данными. В ячейках таблицы могут быть записаны данные различных типов: текст, даты, числа, формулы и др. Главное достоинство электронной таблицы – возможность мгновенного автоматического пересчета всех данных, связанных формульными зависимостями, при изменении значения любого компонента таблицы. Табличный процессор MS Excel позволяет: 1. Решать математические задачи: выполнять разнообразные табличные вычисления, вычислять значения функций, строить графики и диаграммы и т.п.; 2. Осуществлять численное исследование (Что будет, если? Как сделать, чтобы?); 3. Проводить статистический анализ; 4. Реализовать функции базы данных – ввод, поиск, сортировку, фильтрацию (отбор) и анализ данных; 5. Устанавливать защиту на отдельные фрагменты таблицы, делать их невидимыми; 6. Наглядно представлять данные в виде диаграмм и графиков; 54 7. Вводить и редактировать тексты; 8. Осуществлять обмен данными с другими программами, например, вставлять текст, рисунки, таблицы, подготовленные в других приложениях; 9. Осуществлять многотабличные связи. Основные объекты табличного процессора MS Excel: Ячейка – минимальный объект табличного процессора; Строка – горизонтальный набор ячеек, заголовки столбцов – A, B, C,…,IV; Столбец – вертикальны набор ячеек, заголовки строк – 1, 2, 3,…65536; Адрес ячейки – определяется пересечением столбца и строки (A1, F123, AC72); Указатель ячейки – рамка; Активная ячейка – выделенная рамкой, с ней можно производить какие-либо операции; Смежные ячейки – ячейки расположенные последовательно; Диапазон (блок) ячеек – выделенные смежные ячейки, образующие прямоугольный участок таблицы; 55 Адрес диапазона (блока) ячеек - определяется адресом верхней левой и нижней правой ячейки, разделенных двоеточием (:), B2:C7 → B2, B3, B4, B5, B6, B7, C2, C3, C4, C5, C6, C7. Книга – документ электронной таблицы, состоящий из листов, объединенных одним именем и являющихся файлом; Лист – рабочее поле, состоящее из ячеек. При работе с табличными процессорами создаются документы, которые можно просматривать, изменять, записывать на носители внешней памяти для хранения, распечатывать на принтере. Режим формирования электронных таблиц предполагает заполнение и редактирование документа. При этом используются команды, изменяющие содержимое клеток (очистить, редактировать, копировать), и команды, изменяющие структуру таблицы (удалить, вставить, переместить). Режим управления вычислениями. Все вычисления начинаются с ячейки, расположенной на пересечении первой строки и первого столбца электронной таблицы. Вычисления проводятся в естественном порядке, т.е. если в очередной ячейке находится формула, включающая адрес еще не вычисленной ячейки, то вычисления по этой формуле откладываются до тех пор, пока значение в ячейке, от которого зависит формула, не будет определено. При каждом вводе нового значения в ячейку документ пересчитывается заново, — выполняется автоматический пересчет. В большинстве табличных процессоров существует возможность установки ручного пересчета, т.е. таблица пересчитывается заново только при подаче специальной команды. Режим отображения формул задает индикацию содержимого клеток на экране. Обычно этот режим выключен, и на экране отображаются значения, вычисленные на основании содержимого клеток. Графический режим дает возможность отображать числовую информацию в графическом виде: диаграммы и графики. Это позволяет считать электронные таблицы полезным инструментом автоматизации инженерной, административной и научной деятельности. В современных табличных процессорах, например, в Microsoft Excel, в качестве базы данных можно использовать список (набор строк таблицы, содержащий связанные данные). При выполнении обычных операций с данными, например, при поиске, сортировке или обработке данных, списки автоматически распознаются как базы данных. Перечисленные ниже элементы списков учитываются при организации данных: • столбцы списков становятся полями базы данных; • заголовки столбцов становятся именами полей базы данных; • каждая строка списка преобразуется в запись данных. "ТИПЫ ДАННЫХ В ЯЧЕЙКАХ ЭЛЕКТРОННОЙ ТАБЛИЦЫ. ПРАВИЛА ЗАПИСИ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ" Ячейки рабочего листа электронной таблицы могут содержать: 56 исходные или первичные данные – константы; производные данные, которые рассчитываются с помощью формул или функций. Данные в ячейках таблицы могут относиться к одному из следующих типов: текст, числа, даты, формулы и функции. Текст – последовательность букв, иногда цифр или некоторых специальных символов. Числа могут включать цифры и различные символы: знак процента, знак мантиссы, круглые скобки, денежные обозначения, разделители и др. Например: 5; 3,14. Дата и время вводятся в ячейки электронной таблицы как числа и выравниваются по правому краю. Формулой в электронной таблице называют алгебраические и логические выражения. Формулы всегда начинаются со знака равенства (=) и вводятся в латинском регистре. Например: =А5*2/В1 Функция представляет собой программу с уникальным именем, для которой пользователь должен задать конкретные значения аргументов. Функции могут вводиться в таблицу в составе формул либо отдельно. Например, функция суммирования имеет вид =СУММ(А1:А2) Аргументами функции могут быть: числа; ссылки на ячейки и диапазоны ячеек; имена; текст; другие функции; логические значения и др. MS Excel содержит более 400 встроенных функций. Имена функций можно набирать в любом регистре – верхнем или нижнем. Для облегчения работы с встроенными функциями используется Мастер функций. В формулах используются следующие знаки арифметических операций: сложение + вычитание – умножение * деление / возведение в степень ^ Для изменения порядка арифметических действий используются круглые скобки. 57 "ФОРМАТИРОВАНИЕ ЭЛЕМЕНТОВ ТАБЛИЦЫ. ФОРМАТ ЧИСЛА" Форматированием называется изменение внешнего оформления таблиц и данных в них. Важно! Excel различает форматирование всей ячейки и форматирование содержимого ячейки. К форматированию ячеек относится: изменение шрифта содержимого ячеек, выравнивание данных в ячейках, представление чисел в разных форматах, оформление границ ячеек, и т.д. Для того чтобы изменить формат ячейки необходимо щелкнуть на ней и выполнить команду Формат—Ячейки. Появившееся диалоговое окно Формат Ячеек, позволит изменить формат всей ячейки. Для выравнивания данных следует: щелкнуть на форматируемой ячейке или выделить диапазон ячеек, содержащих выравниваемый текст; выполнить команду Формат—Ячейки. На закладке Выравнивание установить опцию Переносить по словам, которая позволяет располагать текст одной ячейки в несколько строк. Для оформления предварительно выделенных ячеек с помощью рамок следует выполнить команду Формат—Ячейки. На закладке Граница следует выбрать тип линии для рамки, а затем щелкнуть на кнопке с нужным видом рамки. (Возможно поочередное назначение нескольких видов рамок). 58 Для назначения цветного фона предварительно выделенным ячейкам необходимо выполнить команду Формат—Ячейки. На закладке Вид выбрать цвет фона ячеек и нажать кнопку ОК. Для изменения шрифта предварительно выделенного текста или числа, находящихся в нескольких ячейках, необходимо выполнить команду Формат—Ячейки. На закладке Шрифт следует указать тип шрифта (Arial, Times New Roman и т. д.), начертание (жирный, курсив, подчеркнутый), размер шрифта, цвет и т.д. Для изменения формата чисел, находящихся в выделенном диапазоне ячеек необходимо выполнить команду Формат—Ячейки. С помощью закладки Число можно установить один из следующих форматов чисел: денежный, процентный, дата, текстовый и т.д. Представление числа 100 в разных форматах Общий Числовой с двумя знаками после запятой Денежный (в рублях) Денежный (в долларах) Дата 100 100,00 Пояснения Без использования специальных средств. Текст выравнивается по левому краю, число по правому. Числовой формат позволяет отображать любое количество знаков после запятой с соблюдением правил округления 100,00 р. Знак денежной единицы («р.» и «) отображается только в ячейке, в строке редактирования (формул) он $100,00 отсутствует. 09.04.1900 MS Excel хранит даты в виде 59 последовательных чисел. По умолчанию дате 1 января 1900 года соответствует порядковый номер 1, а 1 января 2008 года – 39448. Процентный 10000,0% В процентном формате число умножается на 100% Экспоненциальный 1,00Е+02 E+02 означает 10 во 2-ой степени Текстовый 100 Текстовый формат используется для ввода чисел начинающихся с 0. "ОШИБКИ В ФОРМУЛАХ В MICROSOFT EXCEL" При проведении расчетов в электронной таблице Microsoft Excel иногда в ячейках вместо ожидаемых значений выводятся различные “непонятные” результаты. Сегодня мы попытаемся сделать их для нас понятными. Ячейки заполнены знаками # # # # # # # # # # Ячейка может заполняться набором символов “решетки” (#) по одной из следующих причин: 1. ширина столбца недостаточна для размещения численного значения, для которого установлен формат Числовой, Денежный или Финансовый. Такая ситуация встречается, например, в ячейке, в которую скопирована формула из другой ячейки, для которой был установлен один из перечисленных форматов. Для исправления ошибки необходимо либо расширить ячейку, либо изменить формат представления данных в ней; 2. ячейка содержит формулу, возвращающую некорректную дату или время. Excel, например, не поддерживает даты до 1900 года или отрицательные значения времени. Увеличение ширины ячейки данную ошибку не исправляет. Ошибка #ДЕЛ/0! О том, что делить на ноль нельзя, знают даже учащиеся начальных классов. Но тем не менее такая ситуация в Excel встречается довольно часто. Например, на листе, подготовленном для решения линейного уравнения вида ax + b = 0: — формула в ячейке B4, имеющая вид =–B3/B2, вернет значение ошибки #ДЕЛ/0! в 60 ситуации, когда значение коэффициента а в ячейке B2 еще не задано. Для исключения вывода ошибки можно воспользоваться функцией ЕСЛИ, которая проверяет наличие “неправильного” значения в ячейке B2: =ЕСЛИ(B2=0; ““; –B3/B2) Данная формула выводит “пустое” значение (““), если ячейка пустая или содержит 0; в противном случае выводится вычисленное значение корня уравнения. Другое решение заключается в использовании функции ЕСЛИ для проверки существования любой ошибки. Следующая формула также отображает “пустое” значение в случае получения ошибки любого типа: =ЕСЛИ(ЕОШИБКА(–B3/B2); ““; –B3/B2) С особенностями функции ЕОШИБКА ознакомьтесь самостоятельно. Ошибка Имя? Как известно, в Excel можно использовать в формулах не только адреса отдельных ячеек или диапазонов, но и их имена. Это облегчает понимание формул. Например, вы согласитесь, что формула нахождения корня линейного уравнения, оформленная в виде: =ЕСЛИ(a=0; ““; –b/a) — где a и b — имена ячеек, в которых задаются значения коэффициентов уравнения a и b соответственно, выглядит гораздо понятнее приведенного ранее варианта. Ошибка Имя? возникает в следующих случаях: 1. формула содержит неопределенное имя ячейки или диапазона. Здесь же следует отметить одну особенность Excel. Если удалить имя какой-то ячейки или какого-то диапазона, используемое в формуле, то в самой формуле оно останется (казалось бы, Excel мог бы преобразовать имена в ссылки на соответствующие ячейки, однако этого почему-то не происходит); 2. формула содержит текст, который Excel интерпретирует как неопределенное имя. Например, ошибка в написании имени функции приводит к отображению ошибки Имя?. Ошибка #Знач! Ошибка весьма распространена и встречается, как правило, в следующих ситуациях. 1. Формула пытается провести операцию, используя некорректные данные (например, пытается сложить число и текстовое значение). Если на листе в ячейке B7 (см. фрагмент листа ниже) была записана формула =B3+B4+B5+B6, которая затем была распространена (скопирована) на ячейки C7 и D7, то для приведенных исходных данных в ячейке будет выведен результат #Знач! (ясно, что складывать числа и текст нельзя). 61 Использование функции СУММ позволит найти сумму числовых значений в диапазоне, в котором имеются и текстовые значения: =СУММ(D3:D6). Это означает, что в ячейке B7 можно записать формулу =СУММ(B3:B6) и распространить (скопировать) ее на ячейки C7 и D7. 2. В качестве аргументов функции использованы данные несоответствующего типа (например, в функции ЕСЛИ вместо условия использовано число или текст). 3. В качестве аргумента функции используется диапазон, тогда как аргументом должна быть отдельная ячейка. Пример ошибочного оформления: =КОРЕНЬ (A3:A6). Ошибка #Число! Ошибка #Число! возникает в одном из двух случаев: 1) для функции, использующей числовой аргумент, задан аргумент другого типа. Пример ошибочного оформления: =КОРЕНЬ(И3); 2) формула содержит слишком большое или слишком маленькое значение. Excel поддерживает величины в пределах от 1Е-307 до 1Е307 (от 10-307 до 10307). Ошибка #Ссылка! Ошибка #Ссылка! возникает в случае использования формулой ошибочной ссылки на ячейку. Данная ошибка может встречаться в следующих ситуациях. 1. 1. Ячейка, на которую ссылалась формула, была удалена. Например, следующая формула отображает ошибку #Число!, если удалена строка 20, столбец A или столбец B: =A20/B20 2. Формула скопирована в новое место, где относительные ссылки на ячейки становятся недействительными. Например, если формулу =A1–1 в ячейке A2 скопировать в ячейку A1, формула вернет ошибку #Число!, так как в ней будет присутствовать ссылка на несуществующую ячейку. 3. Содержимое ячейки с формулой было вырезано (командой Правка — Вырезать) и затем вставлено в ячейку, на которую ссылается формула. В заключение заметим, что в случаях, когда результатом формулы является ошибка любого из рассмотренных типов, а ширина столбца недостаточна для размещения соответствующего сообщения, ячейка заполняется знаками “#”. 62 Список литературы 1. Макарова Н.В. Программа по информатике (системно-информационная концепция). К комплекту учебников по информатике 5-11 класс. Санкт-Петербург: Питер.2000г. 2. Информатика. 5-11 класс. /Под ред. Н.В. Макаровой. – СПб.: Питер, 2001 3. Коляда М.Г. Окно в удивительный мир информатики. ИКФ «Сталкер»,1997 4. Шафрин Ю.А. Основы компьютерной технологии. Учебное пособие для 7 – 11 классов по курсу «Информатика и вычислительная техника» - Москва: ABF,1996 5. Ефимова О.В., Моисеева М.В., Ю.А. Шафрин Практикум по компьютерной технологии. Примеры и упражнения. Пособие по курсу «Информатика и вычислительная техника» - Москва: ABF,1997 6. Горячев А., Шафрин Ю. Практикум по информационным технологиям. М.: Лаборатория базовых знаний, 2001 7. Семакин И.Г., Шеина Т.Ю. Преподавание курса информатики в средней школе. М.: Лаборатория базовых знаний, 2002 8. Симонович С.В., Евсеев Г.А. Практическая информатика. Учебное пособие для средней школы. Универсальный курс. – Москва: АСТ-ПРЕСС: Информ-Пресс, 1998 9. Симонович С.В. Компьютер в вашей школе. М.: АСТ-ПРЕСС: Информком-Пресс, 2001 10. Симонович С.В., Евсеев Г.А. Занимательный компьютер. Книга для детей, учителей и родителей. Москва: АСТ-ПРЕСС: Информком-Пресс, 2002 63 Лекция 7. Построение графиков и основы статистического анализа в Excel Excel: Диаграммы Распечатанные на бумаге данные рабочего листа позволяют лишь в общем ключе анализировать динамику их изменения за определенный период времени. Чтобы наглядно показать эту динамику, в Microsoft Excel реализована возможность построения диаграмм на основе данных рабочего листа. Помимо этого, графическое представление данных позволяет эффективнее продемонстрировать значимость отдельных показателей. В Excel предусмотрено 10 типов диаграмм, каждый из которых имеет модификации (рис. 20). Их используют в зависимости от специфики данных. Например, для демонстрации увеличения или уменьшения прибыли, полученной за определенный период времени, используют линейчатые диаграммы. Данные маркетинговых исследований отображают с помощью круговых диаграмм, чтобы наглядго показать, какое количество денежных средств необходимо выделить на выполнение той или иной программы. Для анализа прибыли от капиталовложений хорошо подходят графики. Диаграммы практически каждого типа могут быть представлены в трехмерном виде. Например, вместо прямоугольников гистограммы можно использовать параллелепипеды. Диаграммы, созданные в Excel, можно копировать, а затем вставлять в документы программы Word или в слайды презентаций программы PowerPoint. 64 Excel предусмотрено несколько типов диаграмм Создание диаграмм Чтобы создать диаграмму, выполните действия, описанные ниже. 1. Активизируйте нужный рабочий лист и выделите ячейки с данными, на основе которых необходимо построить диаграмму. Чтобы в диаграмме отображались заголовки строк и (или) столбцов электронной таблицы (например, Поставщик 1, Поставщик 2, Поставщик 3 и т.д.), их также необходимо включить в выделенную область. 2. Перейдите во вкладку Вставка ленты инструментов. В разделе Диаграммы находятся кнопки для вставки диаграмм разных типов. 3. Выберите тип и вид диаграммы. o Если вы точно знаете, диаграмма какого типа вам нужна, щелкните на кнопке справа от названия нужного типа диаграмм (Гистограмма, Круговая и т.д.) и выберите желаемый вид диаграммы из открывшегося меню (рис.21). 65 Для быстрой вставки на рабочий лист диаграммы определенного типа используйте такие палитры o Чтобы отобразить диалоговое окно, в котором собраны все доступные типы диаграмм с подвидами, щелкните на кнопке со стрелкой, расположенной в правом нижнем углу раздела Диаграммы вкладки Вставка. В диалоговом окне Вставка диаграммы (рис. 22) найдите нужный эскиз диаграммы, щелкните на нем, а затем на кнопке ОК. 66 Чтобы подобрать тип диаграммы, используйте это диалоговое окно 4. Excel построит диаграмму на основе выделенных данных и поместит ее на активный рабочий лист в виде объекта. Редактирование диаграмм Изменить значения параметров уже готовой диаграмму чрезвычайно просто. Активизируйте диаграмму, щелкнув на ней мышью, и на ленте инструментов автоматически отобразится вкладка Работа с диаграммами. Ниже приведены общие инструкции по форматированию различных элементов диаграммы. Случается, что диаграмма выбранного типа не лучшим образом визуализирует данные. Чтобы на основе тех же данных построить диаграмму нового типа, щелкните на кнопке Изменить тип диаграммы. В открывшемся диалоговом окне Изменение типа диаграммы выберите новый тип и вид и щелкните на кнопке ОК. Excel изменит тип диаграммы. Диаграмма может располагаться как на рабочем листе книги, содержащем данные, так и на отдельном листе. Чтобы изменить расположение диаграммы, щелкните на кнопке Переместить диаграмму и в диалоговом окне Перемещение диаграммы (рис. 23) установите нужный переключатель: На отдельном листе, чтобы создать для диаграммы отдельный лист книги, либо На имеющемся листе, чтобы поместить ее на активный лист книги. Щелкните на кнопке ОК. 67 При необходимости диаграмму можно переместить на отдельный лист с помощью этого диалогового окна Иногда необходимо отредактировать источник данных для диаграммы, включив или исключив отдельные строки или столбцы диапазона. Для корректировки источника данных щелкните на кнопке Выбрать данные. В диалоговом окне Выбор источника данных (рис. 24) введите новую ссылку в поле Диапазон данных для диаграммы и щелкните на кнопке ОК. Часто вводить диапазон данных вручную неудобно. Щелкните на этой кнопке и выделите новый диапазон непосредственно на листе. Затем щелкните на этой кнопке, чтобы вернуться в диалоговое окно. Ряды данных определяют порядок группировки данных в диаграмме. По умолчанию программа формирует ряды данных по строкам диаграммы и помещает вдоль оси категорий (как правило, это ось X) заголовки строк, а в легенду — заголовки столбцов. Однако изменить 68 группировку данных отнюдь не сложно. Для этого активизируйте диаграмму и щелкните на кнопке Строка/Столбец вкладки Работа с диаграммами ленты инструментов. Для каждого вида диаграмм разработано множество макетов, отличающихся взаимным расположением элементов диаграммы, линиями сетки, подписями и пр. Чтобы применить такой макет к диаграмме, щелкните на кнопке Экспресс-макет вкладки Работа с диаграммами и выберите нужный эскиз из открывшейся палитры. Для каждого типа диаграмм разработано множество стилевых решений, оптимально сочетающих цвета, объем, тени и прочие визуальные эффекты. Чтобы применить такие стили к созданной диаграмме, щелкните на кнопке Экспресс-стили вкладки Работа с диаграммами и выберите нужный эскиз из открывшейся палитры. Форматирование диаграммы Диаграмма любого типа принадлежит к семейству графических объектов. Тем не менее в каждой диаграмме используются текстовые фрагменты: легенда, заголовок, названия осей и пр. Помните о том, что после форматирования текстового элемента диаграммы изменится формат всех его компонентов. Например, если для легенды выбран шрифт Times New Roman, то все ее надписи будут отображены этим шрифтом. Общая схема форматирования всех элементов диаграммы одинакова. Щелкните на элементе диаграммы правой кнопкой мыши и выберите из контекстного меню команду Формат элемент диаграммы. Появится диалоговое окно Формат элемента диаграммы с многочисленными параметрами. Для каждого элемента диаграм¬мы набор параметров отличается. Измените параметры форматирования выбранного элемента диаграммы и щелкните на кнопке Закрыть. Легенда В качестве примера рассмотрим процедуру форматирования легенды (не забывайте о том, что у каждого текстового элемента диаграммы есть уникальные параметры, присущие только ему). Чтобы изменить используемый в легенде шрифт, выполните ряд действий. 1. Щелкните на легенде диаграммы правой кнопкой мыши и выберите из контекстного меню элемент Шрифт. На экране появится диалоговое окно Шрифт. 2. Во вкладке Шрифт выберите тип шрифта, задайте нужный размер и добавьте видоизменение. 3. Во вкладке Межзнаковый интервал выберите нужный (обычный, уплотненный или разреженный). 4. Щелкните на кнопке ОК. Для дальнейшей настройки легенды выполните перечисление ниже действия. 1. Щелкните на легенде диаграммы правой кнопкой мыши и выберите из контекстного меню элемент Формат легенды. 2. На экране появится диалоговое окно Формат легенды с параметрами, которые необходимы для изменения способа отображения этого элемента диаграммы (рис. 25). 69 Здесь можно изменить способ отображения выбранного текстового элемента диаграммы 3. 4. 5. 6. 7. В левой области диалогового окна выберите элемент Параметры легенды. Затем, установив нужный переключатель в правой части окна, выберите местоположение легенды по отношению к диаграмме. Чтобы изменить цвет заливки, щелкните на элементе Заливка в левой части диалогового окна. Далее, используя переключатели и другие параметры, задайте нужный тип заливки — сплошная, градиентная, текстура и пр. Щелкните на элементе Цвет границы в левой части диалогового окна и, установив переключатели в правой части окна, настройте цвет границы. При необходимости аналогичным образом измените стиль границы и добавьте тень. В заключение щелкните на кнопке Закрыть диалогового окна Формат легенды. Оси диаграммы У диаграмм такого типа, как гистограмма, линейчатая диаграмма, график, диаграмма с областями и биржевая диаграмма, есть две оси — X и Y; в трехмерных (объемных) версиях этих диаграмм появляется третья ось — Z. Помимо форматирования текстовых надписей каждой оси, вы можете 70 изменить тип и цвет ее линии, отобразить основные и промежуточные деления оси, изменить шкалу (приращение значений) и выбрать формат отображения меток делений. Деления— это небольшие перпендикулярные отметины, которые расположены вдоль каждой оси. Отображение основных и промежуточных делений любой оси можно отключить, можно разместить деления снаружи или внутри оси либо сделать так, чтобы они пересекали ось. Помимо этого, вы можете изменить способ расположения текстовых подписей оси относительно ее делений. Для того чтобы изменить формат оси диаграммы, выполните ряд действий. 1. o Откройте диалоговое окно Формат оси (рис. 26), щелкнув на оси, которую необходимо отформатировать, правой кнопкой мыши и в появившемся контекстном меню выбрав команду Формат оси. Щелкните на элементе Тип линии в левой части диалогового окна и в правой части окна задайте толщину линии, тип штриха, тип стрелки и прочие параметры линии оси. Параметры этого диалогового окна предназначены для форматирования выделенной в данный момент оси диаграммы o Щелкните на элементе Цвет линии в левой части диалогового окна и в правой части задайте цвет линии оси — сплошной или с градиентом. 71 o o Щелкните на элементе <>bТень и задайте вид тени в правой части окна. Чтобы сделать оси объемными, щелкните на элементе Формат объемной фигуры в левой части диалогового окна и, выбрав соответствующие параметры в правой его части, откорректируйте объемный вид. 2. Щелкните на элементе Параметры оси в левой части диалогового окна Формат оси и задайте параметры размещения значений (для оси Y) или категорий (для оси X), выбрав минимальное и максимальное значения, а также цену промежуточных и основных делений. 3. щелкните на элементе Число в левой части диалогового окна Формат оси и выбирите нужный формат (Денежный, Процентный и т.п.) для числовых значений, отложенных вдоль оси. 4. При необходимости измените значения любых других параметров диалогового окна Формат оси. В заключение щелкните мышью на кнопке Закрыть. Перемещение диаграммы и изменение ее размеров Диаграмма, построенная на основе двух или трех наборов данных, в подавляющем большинстве случаев отображается правильно. Если же наборов данных значительно больше, то возможно появление различных проблем, например легенда отображается лишь частично, перекрываются метки данных и т.п. Большую часть таких проблем можно легко решить, изменив размеры диаграммы. Перемещать диаграмму и менять ее размеры можно только тогда, когда она расположена не на отдельном, а на текущем рабочем листе (вместе с данными, на основе которых она построена). Для начала выделите диаграмму, щелкнув мышью в ее области; по умолчанию область диаграммы залита белым цветом. (Помните о том, что сразу после построения диаграмма остается выделенной до тех пор, пока вы не щелкнете мышью за ее пределами.) Щелкнуть необходимо именно в области диаграммы, а не на других ее элементах. Как только вы щелкнете на указанной выше области, по периметру диаграммы появится рамка голубого цвета, в углах и посередине которой располагаются группы из трех точек, которые называются маркерами (рис. 27). Щелчок на любом элементе, например на какой-либо оси или в области построения диаграммы, приведет к выделению только этого элемента и появлению вокруг него рамки и маркеров (но уже в виде квадратиков). Для изменения размеров диаграммы достаточно перетащить любой из ее маркеров в нужном направлении. Для того чтобы переместить диаграмму, щелкните на ней (в области диаграммы, а не на маркере) и, не отпуская кнопку мыши, перетащите указатель в другую часть рабочего листа. Для удаления выделенной в данный момент диаграммы нажмите клавишу <Delete>. Если диаграмма расположена на отдельном рабочем листе, щелкните на его ярлыке правой кнопкой мыши и в Проявившемся контекстном меню выберите команду Удалить. 72 По периметру выделенной диаграммы расположены маркеры Для того чтобы изменить размеры диаграммы относительно ее центральной точки, перетащите один из маркеров, удерживая нажатой клавишу . Чтобы при этом сохранить пропорции диаграммы, перетаскивая маркер, удерживайте нажатой клавишу . Печать диаграммы Как и любые другие данные рабочего листа, созданную диаграмму можно распечатать. Для того чтобы увидеть, как диаграмма будет выглядеть на бумаге, воспользуйтесь средствами предварительного просмотра программы Excel. Щелкните на диаграмме, чтобы выделить ее, а затем на кнопке Office. В меню программы выберите команду Печать, а затем на правой панели — команду Предварительный просмотр. Диаграмма появится в окне предварительного просмотра. Если вы удовлетворены внешним видом диаграммы, щелкните на кнопке Печать, которая расположена в верхней части данного окна. 73 Основы статистического анализа в Excel Статистический анализ охватывает методы описания и представления статистических данных (описательная статистика) и методы обработки этих данных (аналитическая статистика) с целью изучения, формулирования выводов, принятия решений и прогнозирования. Статистический анализ строится на большом объеме данных, сплошном и полном охвате всех событий, называемой генеральной совокупностью. Часто генеральная совокупность слишком многочисленна или малодоступна, поэтому для исследования из нее делают выборки (выборочная совокупность), по которым судят обо всей генеральной совокупности. Для наилучшего представления информации о генеральной совокупности выборка должна быть представительной (репрезентативной). Иногда лучшим способом получения представительной выборки является многократный случайный отбор данных или повторение опыта. Если генеральная совокупность доступна, то для получения представительной выборки можно воспользоваться инструментом Выборка из Пакета анализа Excel. На основе полученной выборки приблизительно устанавливают выборочный закон (выборочную функцию) распределения и другие характеристики случайной величины. Статистическая вероятность или статистическая частота есть отношение число успешных исходов m к общему числу испытаний n (m/n). Статистическая частота события стремится к теоретической вероятности p при большом числе испытаний. Выборочная функция распределения также стремится к теоретической функции распределения F(x) при больших n. Для построения выборочных функций распределения в Excel используется функция ЧАСТОТА и инструмент Гистограмма из Пакета анализа. Случайные выборки значений из генеральной совокупности всех событий имеют числовые статистические характеристики. Среднее арифметическое случайных значений (СРЗНАЧ). Медиана есть число, которое является серединой множества чисел, т.е. половина чисел больше медианы, а половина меньше; вычисляется функцией МЕДИАНА. Мода есть наиболее часто встречающееся значение; вычисляется функцией МОДА. Среднее гармоническое есть величина обратная среднему арифметическому обратных величин (СРГАРМ). Среднее геометрическое используется для вычисления средних темпов роста и есть корень n-ой степени из произведения n положительных значений (СРГЕОМ). Дисперсия – функция ДИСП. Стандартное отклонение – функция СТАНДОТКЛОН. Эксцесс характеризует степень остроконечности (>0) или сглаженности (<0) «хвостов» распределения, т.е. частоты появления удаленных от среднего значений (ЭКСЦЕСС). Асимметрия характеризует степень несимметричности распределения относительно среднего вправо (>0) и влево (<0), вычисляется функцией СКОС. Подробнее см. справку по F1, введя для поиска имя функции. При обработке случайных выборок в первую очередь вычисляют их числовые статистические характеристики и группируют по каждому параметру: по среднему значению, по разбросу от среднего, ошибке среднего и др. Кроме перечисленных выше функций, для работы с несколькими выборками и вычисления их статистических характеристик, Excel содержит инструмент Описательная статистика из Пакета анализа. При обработке случайных выборок, кроме получения статистических характеристик, обычно решаются следующие задачи: 74 1. Определение степени достоверности выборки, отнесение или не отнесение событий выборки к некоторой статистической совокупности. Определяется с помощью доверительных интервалов – интервалов, в который события попадают с заданной доверительной вероятностью p=1–. - есть уровень значимости – максимальное значение вероятности, при котором появление события практически невозможно. Достаточным обычно считается =0.05 – ей соответствует доверительная вероятность 0.95. Для повышения надежности статистических выводов берут =0.01, чему соответствует доверительная вероятность 0.99. Вычисление границ доверительного интервала в Excel используется функция ДОВЕРИТ и инструмент Описательная статистика. 2. Определение меры соответствия выборки какому-либо теоретическому распределению. Выполняется с использованием критериев согласия, в частности ХИ-квадрат – функция ХИ2ТЕСТ в Excel. Ориентировочная оценка может быть выполнена с помощью построения графиков и визуального сравнения расхождений и совпадений выборочного и теоретического распределений. 3. Выявление различий между выборками выполняется с использованием критериев различия, в частности t-критерия Стьюдента (функция ТТЕСТ) и критерия Фишера (функция ФТЕСТ). Можно использовать инструменты из Пакета анализа Excel: Двухвыборочный t-тест с различными дисперсиями Двухвыборочный F-тест для дисперсий, а также Парный двухвыборочный t-тест для средних и Двухвыборочный t-тест с одинаковыми дисперсиями. 4. Оценка влияния на выборки одного, двух или более факторов – однофакторный, двухфакторный и т.д. дисперсионный анализ. Инструменты Excel: Однофакторный дисперсионный анализ, Двухфакторный дисперсионный анализ с повторениями и Двухфакторный дисперсионный анализ без повторений. 5. Выявление степени связи между выборками (переменными) - корреляционный анализ. В качестве меры связи двух случайных величин используют коэффициент корреляции R. Если R=0 – зависимости нет, R>0 – зависимость прямо пропорциональная, R<0 – зависимость обратно пропорциональная. В Excel используется функция КОРРЕЛ и инструмент Корреляция. 6. Установление формы зависимости (уравнения регрессии) между выборкой (случайной переменной Y) и одной или несколькими независимыми переменными величинами – регрессионный анализ, с целью оценки достоверности принятой математической модели статистическим данным. Инструменты регрессионного анализа были рассмотрены ранее. Ниже будут рассмотрены перечисленные средства Excel для статистической обработки данных. Они достаточны для статистического анализа большинства экономических и других типов данных. В тоже время полноценный статистический анализ данных и прогнозирование выполняют в специализированных пакетах программ. Однако большинство из них требует соответствующей математической подготовки и глубокого знания пакетов. Подробное описание каждого инструмента из Пакета анализа Вы найдете в справке по F1, введя для поиска строку «О средствах статистического анализа данных». Наиболее распространенными пакетами статистического анализа и прогнозирования являются Statistica, Statgraphics, NCSS, SPSS, Project Expert (финансовое планирование). Извеcтны также пакеты SAS, SYSTAT, SigmaStat, SigmaPlot, ESB Stats, MVSP, Chameleon Statistics, Leo Statistic, Simca-P и другие. Перспективным инструментом решения трудноформализуемых задач прогнозирования, статистического и регрессионного анализа являются пакеты, построенные по технологии обучающихся нейронных сетей, в частности пакет STATISTICA Neural Network. Известны применения нейрокомпьютеров (CNAPS PC/128), имитаторов нейронных сетей (Qnet for WIndows) для прогнозирования финансовой деятельности и пр. Найти описания возможностей этих пакетов можно в поисковых системах Интернет (Yandex, Rambler, Google) по названию пакета. 75 Построение выборочной функции распределения Для построения выборочных функций распределения в Excel используют инструмент Гистограмма из Пакета анализа или функция ЧАСТОТА. При этом весь диапазон изменения случайной величины разбивают на интервалы равной ширины, называемые карманами. Число карманов обычно 5-15. Вычисляется число попаданий значений случайной величины в каждый карман. По ним вычисляются статистические (относительные) частоты - отношение числа попаданий в карман m к общему числу испытаний n (m/n), по которым и строится гистограмма выборочной функции распределения статистических вероятностей. В качестве примера построим выборочное распределение по данным о ежедневных продажах некоторого товара – на рис. 2.76 показана выборка за 2 месяца. Здесь же заведен диапазон карманов – граничных значений. Данные будут группироваться в интервалы 0-170, 171-175, 176-180 и т.д.: при подсчете в карман включаются значения на правой (нижней) границе и не включаются значения на левой (верхней) границе. Рис. 2.76 Построим выборочное распределение дневных продаж инструментом Гистограмма: вызов через меню Сервис Анализ данных…. 76 Рис. 2.77 На рис. 2.77 показано заполнение параметров инструмента. Входной интервал $А$3:$Е$14 - это диапазон исследуемых данных. Интервал карманов $G$2:$G$14 - это границы, в которые группируются входные данные. Выходной интервал $I$1 – это ячейка, начиная с которой будет выведен результат. Установите также флажок Вывод графика - гистограммы. Флажок Интегральный процент устанавливают, если надо вычислить проценты частот с накоплением и вывести график интегральных процентов. Результат работы инструмента показан на рис. 2.78. Рис. 2.78 Теперь построим выборочное распределение дневных продаж, воспользовавшись функцией ЧАСТОТА. Результат показан на рис. 2.79. Здесь функцией ЧАСТОТА подсчитывается лишь колонка Частота; колонки I и J следует вычислить вручную и построить график. 77 Рис. 2.79 Проделайте следующие действия: 1. Выделите диапазон H1:H14 и вызовите функцию ЧАСТОТА из группы Статистические и заполните параметры – рис. 2.80. После нажатия ОК встаньте на строку формул и нажмите Ctrl+Shift+Enter. Карманы будут заполнены частотами появления значений. 2. В ячейку H15 введите формулу вычисления общего числа испытаний n: =СУММ(H2:H14). 3. В ячейку I2 введите формулу вычисления статистической частоты =I2/H$15 и размножьте ее на весь диапазон I3:I14. 4. В ячейку J2 запишите значение из I2, в ячейку J3 – формулу =J2+I3, которую следует размножить на весь диапазон J4:J14. 5. Выделите диапазон I2:J14 для построения графика и вызовите мастер диаграмм: выберите нестандартный тип График | гистограмма 2. Построенный график (рис. 2.81) должен быть идентичен предыдущему (рис. 2.78). Рис. 2.80 78 Рис. 2.81 Расчет элементарных статистических характеристик При обработке случайных выборок в первую очередь вычисляют их числовые параметры, характеризующие тенденции, разброс и изменчивость данных. Их можно рассчитывать как с помощью перечисленных в предыдущих разделах функций, так и с применением инструмента Описательная статистика из Пакета анализа, который позволяет получить единый статистический отчет по всем характеристикам входных данных. Применим инструмент Описательная статистика к выборкам сезонных результатов двух прыгунов в высоту разными способами: фосбюри-флопом и перекидным – рис. 2.82. Рис. 2.82 Вызовите инструмент Описательная статистика через меню Сервис Анализ данных…. На рис. 2.83 показано заполнение параметров инструмента. Входной интервал $А$2:$D$11 - это диапазон анализируемых данных. Здесь данные выборки расположены по столбцам, поэтому установлен переключатель По столбцам. Выходной интервал $D$1 – это ячейка, начиная с 79 которой будет выведен результат. Установите также флажок Итоговая статистика - в выходном интервале для каждого столбца будут рассчитаны все статистические показатели. Поле Уровень надежности позволяет установить требуемый уровень доверительной вероятности; по умолчанию 95%, что соответствует уровню значимости 0.05. Результат работы инструмента показан на рис. 2.84. Рис. 2.83 Рис. 2.84 Определение доверительных интервалов Важная характеристика выборки – среднее арифметическое – обычно не совпадает со средним арифметическим генеральной совокупности. Поэтому актуальным является определение 80 приемлемых границ изменения среднего арифметического выборок – доверительного интервала среднего. Для этого вычисляют средние арифметические нескольких выборок; вычисленные значения рассматривают как случайные величины, распределенные по нормальному закону относительно среднего арифметического генеральной совокупности. Известно, что в пределы [m-r,m+r] нормально распределенная случайная величина попадает с доверительной вероятностью 0,683 (68.3%) в пределы [m-2r,m+2r] - с вероятностью 0,955 (95.5%), в пределы [m-3r,m+3r] - с вероятностью 0,997 (99.7%) – где m среднее, а r стандартное отклонение от среднего (рис. 2.71). Инструмент Описательная статистика вычисляет полный доверительный интервал выборки: на рис. 2.84 он равен 31. Таким образом, можно утверждать, что в 95% случаев значения выборки попадут в доверительный интервал [228.2-15.5, 228.2+15.5]. Функция ДОВЕРИТ вычисляет полуширину доверительного интервала среднего по заданному уровню значимости, стандартному отклонению и числу значений в выборке. Пусть требуется найти границы доверительного интервала для среднего с 95% надежностью (уровень значимости =0.05) для 50 отправлений по электронной почте, если известно среднее время доставки сообщения m=30сек, стандартное отклонение r=3сек. Введите статистическую функцию ДОВЕРИТ и заполните параметры, как показано на рис. 2.85. После нажатия ОК, вы получите значение ДОВЕРИТ(0,05;3;50)=0.83154. Это означает, что с уверенностью 95% среднее арифметическое времени доставки сообщения по E-mail для генеральной совокупности будет находиться в интервале [30-0.83154, 30+0.83154]. Рис. 2.85 ДОВЕРИТ(0,01;3;50) = 1.09283 ДОВЕРИТ(0,05;5;50) = 1.3859 ДОВЕРИТ(0,05;3;150) = 0.48009 Выше рассчитаны доверительные интервалы среднего для различных значений параметров. Как видно, доверительный интервал шире для больших значений уровня значимости и стандартного отклонения r; и – уже при большем размере выборки. 81 Подбор типа распределения Одной из задач статистического анализа является оценка степень соответствия выборки известному теоретическому распределению, в частности нормальному распределению. Для этих целей применяют: графический метод, позволяющий визуально оценить меру соответствия; например, график на рис. 2.81 напоминает форму нормальной кривой и при большом объеме (>50) выборки совпадения/расхождения более очевидны; числовые характеристики асимметрию и эксцесс; асимметрия характеризует степень несимметричности распределения относительно среднего вправо (>0) и влево (<0); эксцесс характеризует степень остроконечности (>0) или сглаженности (<0) «хвостов» распределения; можно говорить о нормальности распределения, если асимметрия находится в интервале [– 0.2;+0.2], а эксцесс – в интервале [2;4]; критерии согласия, в частности ХИ-квадрат, который вычисляет вероятность совпадения выборки с нормальным распределением (функция ХИ2ТЕСТ в Excel). Рассмотрим применение функции ХИ2ТЕСТ, дающей наиболее убедительную оценку меры соответствия выборки нормальному распределению. Если вычисленная вероятность совпадения ниже 0.95 (95%), то выборка не соответствует нормальному распределению, если выше 0.95, то можно утверждать о нормальном законе распределения выборки. Поскольку критерий ХИ-квадрат основан на сравнении частот интервалов, то для функции ХИ2ТЕСТ должны быть предварительно подготовлены выборочное и теоретическое распределения частот по интервалам с помощью функции ЧАСТОТА или инструмента Гистограмма. На рис. 2.86 дана некоторая выборка, к ней вычислены частоты и теоретические частоты, на основе которых вычислена вероятность совпадения распределений 0.989531786. Это значение говорит о высокой степени соответствия выборки нормальному распределению. Рис. 2.86 Последовательность действий результата на рис. 2.86 следующая: 82 1. Введите исходные данные в ячейки А3:Е14. В колонке G введите интервалы карманов и с помощью функции ЧАСТОТА в колонке H вычислите относительные частоты значений выборки. 2. В ячейке Н15 вычислите размер выборки (=СУММ(H2:H14)), в ячейке Н16 – среднее арифметическое выборки (=СРЗНАЧ(A3:E14)), в ячейке Н17 – стандартное отклонение (=СТАНДОТКЛОН(A3:E14)). 3. В колонке I вычислите статистические вероятности – это необходимо для дальнейшего графического сравнения выборочного распределения вероятностей с теоретическим. В ячейку I3 запишите формулу =H2/H$15, затем размножьте ее на диапазон I4:I14. 4. По вычисленным в п.2 данным постройте теоретическое нормальное распределение вероятностей, для чего в ячейку J3 запишите функцию =НОРМРАСП(G2;H$16;H$17;0). Затем размножьте ее на диапазон J4:J14. 5. В колонке К вычислите теоретические частоты: в ячейку К3 запишите формулу =J2*H$15 и размножьте ее на диапазон К4:К14. 6. В ячейку К17 введите функцию ХИ2ТЕСТ. Параметры функции показаны на рис. 2.87. Рис. 2.87 Для графической оценки постройте графики выборочного (I4:I14) и теоретического (J4:J14) распределения вероятностей – рис. 2.88. Сравнение графиков не опровергает результата работы функции ХИ2ТЕСТ: выборка в целом соответствует нормальному распределению Рис. 2.88 83 Функцию ХИ2ТЕСТ применяют также в случаях, когда требуется выявить наличие различий между выборками, а закон распределения данных неизвестен. При этом обычно известны лишь расчетные, теоретические значения, которые принимают за генеральную совокупность. Вычисляется вероятность случайного появления значений в выборках: если вероятность p меньше уровня значимости =0.05, то различия между выборками не случайны и делают вывод о достоверном отличии (независимости) выборок друг от друга (уровень значимости – максимальное значение вероятности, при котором появление события практически невозможно). Рис. 2.89 На рис. 2.89 приведены результаты опроса трех возрастных групп в баллах. Необходимо определить, есть ли достоверные отличия в ответах в группах. Поскольку ожидаемые значения не заданы, то в качестве ожидаемых, рассчитаем средние значения трех выборок по каждому вопросу, которые и примем за генеральную совокупность – рис. 2.90. Рис. 2.90 Далее применим функцию =ХИ2ТЕСТ(B3:D12;E3:G12). Результат 0.868486 (>0.05) говорит о том, что различия между выборками случайны и не выявлено достоверных отличий выборок друг от друга. 84 Сравнение и анализ двух выборок Для выявления различий между двумя выборками с известным законом распределения применяют t-критерий различия Стьюдента и критерий различия Фишера. При этом предполагается, что данные распределены по нормальному закону. Первый критерий сравнивает средние двух выборок и вычисляет вероятность того, что они относятся к одной и той же генеральной совокупности. Второй критерий проверяет принадлежность дисперсий двух выборок одной генеральной совокупности. В обоих случаях по вычисленной вероятности судят о принадлежности выборок к одной или разным совокупностям: если вероятность случайного появления значений в исследуемых выборках меньше уровня значимости <0.05, то различия между выборками не случайны и они достоверно отличаются друг от друга. Рассмотрим использование t-критерия Стьюдента для определения наличия различий между двумя выборками. При этом выборки могут быть: независимыми, несвязными с разным числом значений в выборках – анализируют с помощью инструмента Двухвыборочный t-тест с различными дисперсиями или Двухвыборочный t-тест с одинаковыми дисперсиями; зависимыми, связанными с равным числом значений в выборках – анализируют с помощью инструмента Парный двухвыборочный t-тест для средних или Двухвыборочный t-тест с различными дисперсиями. Включенная в Excel функция ТТЕСТ для оценки отличий по t-критерия Стьюдента имеет параметр Тип для настройки на один из видов t-теста: 1 – парный тест, 2 - двухвыборочный tтест с одинаковыми дисперсиями, 3 - двухвыборочный t-тест с разными дисперсиями. На рис. 2.91 приведены данные о месячных продажах хлебцев Burger, продаваемых без рекламы, и хлебцев Finn Crisp, продаваемых с рекламной поддержкой. Необходимо выявить достоверность различий в этих данных. Здесь же приведены результаты функции ТТЕСТ (ячейка В14) и инструмента Двухвыборочный t-тест с различными дисперсиями. Рис. 2.91 85 Полученное с помощью функции ТТЕСТ значение величины случайного появления анализируемых выборок 0.07895 больше уровня значимости =0.05. Таким образом, различия между выборками случайны и считаются не отличающимися друг от друга, что говорит о неэффективности рекламной поддержки хлебцев Finn Crisp и, возможно, о большей «раскрученности» бренда Burger. Аналогичные результаты получены инструментом Двухвыборочный t-тест с различными дисперсиями – вероятность случайного появления выборок P(T<=t) двухстороннее=0.0787. Воспроизведите полученные результаты. В ячейку В14 введите функцию ТТЕСТ из группы Статистические, заполните параметры, как на рис. 2.92 и нажмите ОК. Здесь выбран Тип=3, поскольку выборки не связаны, независимы и с разным числом значений. Рис. 2.92 Далее вызовите инструмент Двухвыборочный t-тест с различными дисперсиями через меню Сервис Анализ данных…. На рис. 2.93 показано заполнение параметров инструмента. Интервал переменной 1 $А$2:$A$10 и интервал переменной 2 $B$2:$B$12 это диапазоны анализируемых данных. Выходной интервал $D$1 – это ячейка, начиная с которой будет выведен результат. Поле Альфа позволяет установить требуемый уровень значимости =0.05. Рис. 2.93 86 Отметим важность правильного подбора типа t-теста, поскольку для одних и тех же данных они могут давать разные результаты. Если выбор типа t-теста не очевиден, то правильным будет применение двухвыборочного t-теста с разными дисперсиями как общий случай анализа; если выборки зависимы и связаны, то применяют парный t-тест. Дисперсионный анализ Часто требуется оценить существенность влияния на выборки одного или нескольких факторов. При этом выборки должны стремиться к нормальному распределению и быть независимыми. В Excel включены следующие инструменты: Однофакторный дисперсионный анализ, Двухфакторный дисперсионный анализ с повторениями, Двухфакторный дисперсионный анализ без повторения. Рассмотрим однофакторный дисперсионный анализ. Степень влияния фактора на выборку определяется сравнением дисперсий двух выборок: выборки с наличием исследуемого фактора и выборки без этого фактора (со случайными причинами). Инструмент Excel Однофакторный дисперсионный анализ вычисляет вероятность случайности различий (Р-значение), которая указывает на значимость различий: если уровень значимости меньше 0.05, то различия не случайны и говорят о статистическом влиянии фактора на выборку (переменную). В качестве примера проведем анализ влияния фактора цены комплексного обеда на дневную посещаемость кафе – рис. 2.94. На рис. 2.95 приведен результат анализа: Рзначение=0.00068257 <0.05. Это доказывает влияние фактора цены на посещаемость кафе. Рис. 2.94 87 Рис. 2.95 Воспроизведите полученные результаты. Введите данные и вызовите инструмент Однофакторный дисперсионный анализ через меню Сервис Анализ данных…. На рис. 2.96 показано заполнение параметров инструмента. Входной интервал $В$2:$I$4 это диапазон исследуемых данных. Переключатель Группирование установлен по строкам, т.к. выборки располагаются по строкам. Выходной интервал $J$1 – это ячейка, начиная с которой будет выведен результат. Поле Альфа позволяет установить требуемый уровень значимости, здесь =0.05. Рис. 2.96 Поиск статистических зависимостей. Корреляция Знание взаимосвязей между выборками важно для прогнозирования ситуации и принятия решений. Для оценки взаимосвязи между выборками (переменными X и Y) применяют 88 регрессионный анализ, корреляционный и ковариационный анализ. Первый устанавливает форму взаимозависимости, вторые - степень связи выборок. Корреляцию применяют, когда выборки представлены в безразмерном виде (с разной размерностью), например вес и рост. Ковариацию можно применять для выборок с одинаковой размерностью, например продажи до рекламной компании и продажи после рекламной компании. Степень связи двух выборок (случайных величин X и Y) оценивается ковариацией и коэффициентом корреляции R. Ковариация есть среднее произведений отклонений для каждой пары значений выборок. Коэффициент корреляции выборки представляет собой ковариацию двух выборок, деленную на произведение их стандартных отклонений (см. справку по F1). Ковариация принимает значения в единицах анализируемых выборок. Коэффициент корреляции R принимает значения от –1 до 1. Если R=0 – зависимости нет, R>0 – зависимость прямо пропорциональная, R<0 – зависимость обратно пропорциональная. Таким образом, корреляционный и ковариационный анализ дают возможность установить, ассоциированы ли выборки по величине, то есть, большие значения из одной выборки связаны с большими значениями другой выборки (положительная корреляция/ковариация), или, наоборот, малые значения одной выборки связаны с большими значениями другой (отрицательная корреляция/ковариация), или данные двух выборок никак не связаны (корреляция/ковариация близка к нулю). Функции Excel КОРРЕЛ, КОВАР и инструменты Корреляция, Ковариация вычисляют степень линейной взаимозависимости между выборками. Если коэффициент корреляции |R|>0.6, то линейную зависимость между выборками считают выявленной, при |R|<0.4 – не выявленной. Определим степень взаимосвязи между доходом семьи и числом посещений супермаркета в месяц – рис. 2.97. Тут же показан результат функции КОРРЕЛ(A2:A12;B2:B12)= –0.981225708. Это говорит о высокой степени обратной линейной зависимости между рассматриваемыми параметрами. Рис. 2.97 89 Теперь добавим третий параметр – среднюю сумму одной покупки (рис. 2.98) и применим инструмент Корреляция: меню Сервис Анализ данных…. Параметры заполните как на рис. 2.99. Результат показан в правой части рис. 2.98: в ячейках E1:H4 вычислена корреляционная матрица, на пересечении столбцов и строк которой записаны коэффициенты корреляции между параметрами (столбцами). В результате анализа выявлены: сильная степень обратной линейной зависимости между столбцом 1 и столбцом 2 (R= – 0,9812257); сильная степень прямой линейной зависимости между столбцом 1 и столбцом 3 (R= 0,99497); сильная степень обратной линейной зависимости между столбцом 2 и столбцом 3 (R= – 0,982206); Рис. 2.98 Рис. 2.99 Задания для самостоятельного выполнения: 90 1. Определить степень взаимосвязи между валовым доходом и расходами компании, заданной следующими выборками: Валовый доход (тыс. руб.) 1200 1500 1400 2100 1700 1300 2000 Расходы (тыс. руб.) 200 210 200 250 230 200 220 2. Определить степень взаимосвязи между месяцами (сезонами) и доходами компьютерных и строительных компаний: Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек 550 600 650 750 750 650 550 400 450 500 550 750 Доходы от стройматериало 100 в 120 130 150 300 500 550 500 450 350 150 80 Доходы от компьютеров 91 Лекция 8. Основы работы в системе MathCAD. Интерфейс пользователя Под интерфейсом пользователя подразумевается совокупность средств графической оболочки Math CAD, обеспечивающих лёгкое управление системой, как с клавишного пульта, так и с помощью мыши. Под управлением понимается и просто набор необходимых символов, формул, текстовых комментариев и т. д., и возможность полной подготовки в среде MathCAD документов (Work Sheets) и электронных книг с последующим их запуском в реальном времени. Пользовательский интерфейс системы создан так, что пользователь, имеющий элементарные навыки работы с Windowsприложениями, может сразу начать работу с MathCAD. Окно редактирования. Главное меню системы. Вторая строка окна системы - главное меню. Назначение его команд приведено ниже: File (Файл) – работа с файлами, сетью интернет и электронной почтой; 92 Ниспадающее меню содержит команды, стандартные для Windows-приложений. Edit (Правка) – редактирование документов; Ниспадающее меню также содержит команды, стандартные для Windowsприложений.Большинство из них доступны только в случае, если в документе выделены одна или несколько областей (текст, формула, график и т.д.) View (Обзор) – изменение средств обзора; Toolbars (Панели) - позволяет отображать или скрывать панели инструментов Standart (Стандартная), Formatting (Форматирования), Math(Математика). Status bar(Строка состояния) - включение или отключение отображения строки состояния системы. Ruler(линейка) - включение-отключение линейки. Regions (Границы) - Делает видимыми границы областей (текстовых, графических, формул). Zoom (изменение масштаба). Refresh (Обновить)[Ctrl+R] - обновление содержимого экрана. Animate (Анимация) - Команда позволяет создать анимацию. Playback (Проигрыватель) - Bоспроизведение анимации, хранящейся в файле с расширением AVI. Preferences (Настройки) - Одна из вкладок всплывающего окна (General) позволяет задать некоторые параметры работы впрграммы, не влияющие на вычисления, другая вкладка (Internet) служит для ввода информации при совместной работе с MathCAD-документами через Internet. Insert (Вставка) – Команды этого меню позволяют помещать в MathCAD -документ графики, функции, гиперссылки, компоненты и встраивать объекты. Format (Формат) – изменение формата объектов Equation (Уравнение) - Форматирование формул и создание собственных стилей для представления данных Result (Результат) - Позволяет задать формат представления результатов вычислений.(см. раздел 1.4 этой лекции) Text(Текст) - Форматирование текстового фрагмента (шрифт, размер, начертание) Paragraf (Абзац) - Изменение формата текущего абзаца (отступы, выравнивание). Tabs(Табуляция) - Задание позиций маркеров табуляции. Style (Стиль) - Оформление текстовых абзацев. Properties (Свойства) - Вкладка Display (Отображение) позволяет задать цвет фона для наиболее важных текстовых и графических областей; вставленный в документ рисунок (Insert -> Picture) позволяет заключить в рамку, вернуть ему первоначальный размер. Вквадка Calculation (Вычисление) позволяет для выделенной формулы включить и отключить вычисление; в последнем случае в правом верхнем углу области формулы появляется маленький черный прямоугольник и формула превращается в комментарий. Graf (График) - Позволяет менять параметры отображения графиков (см. Лекцию 3) Separate regions (Разделить области) - Позволяет раздвигать перекрывающиеся области. Align regions(Выровнять области) - Выравнивает выделенные области по горизонтали или по 93 вертикали. Headers/Footers (Колонтитулы) - создание и редактирование колонтитулов. Repaganite Now (Перенумерация страниц) - Производит разбивку текущего документа на страницы. Math (Математика) – управление процессом вычислений; в MathCAD существует два режима вычислений: автоматический и ручной. В автоматическом режиме результаты вычислений полностью обновляются при каком-либо изменении в формуле. Automatic Calculation (Автоматическое вычисление) - позволяет переключать режимы вычислений. Calculate (Вычислить) - При ручном режиме вычислений позволяет пересчитать видимую часть экрана. Calculate Worksheet (Просчитать документ) - Пересчет всего документа целиком. Optimization (Оптимизация) - При помощи этой команды можно заставит MathCAD перед численной оценкой выражения произвести символьные вычисления и при нахождении более компактной формы выражения использовать именно ее. Если выражение удалось оптимизировать, то справа от него появляется маленькая красная звездочка. Двойной щелчок на ней открывает окно, в котором находится оптимизированный результат. Options (Параметры) - позволяет задавать параметры вычислений (см. раздел 1.4 настоящей лекции) Symbolik (Символика) – выбор операций символьного процессора; Позиции этого меню подробно рассматриваются в Лекции 6 , посвященной символьным вычислениям в системе MathCAD. Window (Окно) – управление окнами системы; Help (?) – работа со справочной базой данных о системе; Mathcad Help (Справка по MathCAD) - содержит три вкладки: Содержание - справка упорядочена по темам; Указатель - предметный указатель; Поиск - находит нужное понятие при вводе его в форму. Resource Center (Центр ресурсов) - Информационный центр, содержащий обзор вычислительных способностей MathCAD (Overview and Tutorials), быструю справку в виде примеров из различных областей математики (Quicksheets and Reference tables). Tip of the Day - Всплывающие окна-подсказки с полезными советами (возникают при загрузке системы). Open Book (Открыть книгу) - позволяет открыть справочник системы MathCAD. About Mathcad (О программе Mathcad) - информация о версии программы, авторских правах и пользователе. Каждая позиция главного меню может быть сделана активной. Для этого достаточно указать на нее курсором – стрелкой мыши и нажать ее левую клавишу. Можно также нажать клавишу F10 и использовать клавиши перемещения вправо и влево. Затем выбор 94 фиксируется нажатием клавиши ввода Enter. Если какая-либо позиция главного меню делается активной, она выводит ниспадающее подменю со списком доступных и недоступных ( но возможных в дальнейшем) операций. Перемещение по списку подменю и выбор нужной операции производится аналогично тому, как это описано для главного меню. Стандартная панель инструментов. Третью строку окна системы занимает панель инструментов (Toolbox). Она содержит несколько групп кнопок управления с пиктограммами, каждая из которых дублирует одну из важнейших операций главного меню. Стоит только остановить курсор мыши на любой из этих пиктограмм, как в желтом окошечке появится текст, объясняющий функции пиктограмм. Рассмотрим действие кнопок быстрого управления системой. Кнопки операций с файлами. Документы системы MathCAD являются файлами, т.е. имеющими имена блоками хранения информации на магнитных дисках. Файлы можно создавать, загружать (открывать), записывать и распечатывать на принтере. Возможные операции с файлами представлены в панели инструментов первой группой из трех кнопок: New Worksheet (Создавать) – создание нового документа с очисткой окна редактирования; Open Worksheet (Открыть) – загрузка раннее созданного документа из диалогового окна; Save Worksheet (Cохранить) – запись текущего документа с его именем. Печать и контроль документов. Print Worksheet (Печать) – распечатка документа на принтере; Print Preview (Просмотр) – предварительный просмотр документа; Check Speling (Проверка) – проверка орфографии документа. Кнопки операций редактирования. Во время подготовки документов их приходится редактировать, т.е. видоизменять и дополнять. Cut (Вырезать) – перенос выделенной части документа в буфер обмена с очисткой этой части документа; Copy (Копировать) – копирование выделенной части документа в буфер обмена с сохранением выделенной части документа; 95 Paste (Вставить) – перенос содержимого буфера обмена в окно редактирования на место, указанное курсором мыши; Undo (Отменить) – отмена предшествующей операции редактирования; Три последние операции связаны с применением буфера обмена. Он предназначен для временного хранения данных и их переноса из одной части документа в другую, либо для организации обмена данными между различными приложениями. Кнопки размещения блоков. Документы состоят из различных блоков: текстовых, формальных, графических и т.д. Блоки просматриваются системой, интерпретируются и исполняются. Просмотр идет справа налево и снизу вверх. - Align Across ( Выровнять по горизонтали) – блоки выравниваются по горизонтали. - Align Down (Выровнять вниз) – блоки выравниваются по вертикали, располагаясь сверху вниз. Пиктограммы этих кнопок изображают блоки и указанные варианты их размещения. Кнопки операций с выражениями Формульные блоки часто являются вычисляемыми выражениями или выражениями, входящими в состав заданных пользователем новых функций. Для работы с выражениями служат пиктограммы Следующие группы кнопок являются специфичными именно для системы MathCAD. Insert Function (Вставить функции) – вставка функции из списка, появляющегося в диаологовом окне; Insert Unit (Вставить единицы) – вставка единиц измерения; Calculate (Пересчитать) – вычисление выделенного выражения; Доступ к новым возможностям MathCAD. Начиная с версии MathCAD 7.0 появились новые кнопки, дающие доступ к новым возможностям системы: Insert Giperlink (Включение гиперссылки) – обеспечивает создание гиперссылки; 96 Component Wizard (Мастер компонентов) – открывает окно Мастера, дающего удобный доступ ко всем компонентам системы; Ran Math Connex (Запуск системы Math Connex) – запуск системы для стимулирования блочно-заданных устройств. Кнопки управления ресурсами. Resource Center (Центр ресурсов) – дает доступ к центру ресурсов; Help (Справка) – дает доступ к ресурсам справочной базы данных системы. Панель форматирования. Четвертая строка верхней части экрана содержит типовые средства управления шрифтами: Style – Переключатель выбора стилей; Font – Переключатель выбора набора символов; Point Size – Переключатель выбора размеров символов; Bold – Установка жирных символов; Italik – Установка наклонных символов; Underline – Установка подчёркнутых символов; Left Align – Установка левостороннего выравнивания; Center Align – Установка выравнивания по центру; Right Align – Установка правостороннего выравнивания. До тех пор, пока не начат набор элементов документа, часть описанных кнопок и иных объектов пользовательского интерфейса находится в пассивном состоянии. В частности, в окнах переключателей панели форматирования нет надписей. Пиктограммы и переключатели становятся активными, как только появляется необходимость в их использовании. Внизу экрана кроме полосы горизонтальной прокрутки расположена ещё одна строка – строка состояния. В ней выводится служебная информация, краткие комментарии, номер страницы и др. Эта информация полезна для оперативной оценки состояния системы в ходе работы с нею. 97 Наборные математические панели инструментов. Для ввода математических знаков в MathCAD используются удобные перемещаемые наборные панели со знаками. Они служат для вывода заготовок – шаблонов математических знаков (цифр, знаков арифметических операций, матриц, знаков интегралов, производных и т. д.). Для вывода панели Math необходимо выполнить команду View -> Toolbar -> Math. Наборные панели появляются в окне редактирования документов при активизации соответствующих пиктограмм – первая линия пиктограмм управления системой. Используя общую наборную панель, можно вывести или все панели сразу или только те, что нужны для работы. Для установки с их помощью необходимого шаблона достаточно поместить курсор в желаемое место окна редактирования (красный крестик на цветном дисплее) и затем активизировать пиктограмму нужного шаблона, установив на него курсор мыши и нажав ее левую клавишу. Многие функции и операции, которые вставляются в документ с помощью наборных математических панелей, могут быть помещены в документ с помощью "быстрых клавиш". При этом работа в системе MathCAD становится более продуктивной. Рекомендуем запомнить сочетания клавишь хотя бы для некоторых наиболее часто употребляемых команд. Более подробно работа с дополнительными панелями, включаемыми кнопками панели Math , будет описана в соответствующих разделах. Ввод и редактирование формул и текста. В MatCAD-документе курсор ввода имеет вид красного крестика. Этот крестик указывает, в каком месте рабочего листа будет произведено следующее действие. Установив указатель мыши в нужном месте документа и выполнив щелчок, вы перемещаете туда крестик (можно использовать стрелки, а не мышь). Указатель в виде крестика может принимать другие формы. 98 Он становится вертикальной чертой голубого цвета при вводе формулы в области формул или при выборе уже существующей формулы. Перемещать этот голубой курсор можно только с помощью клавишстрелок. Если при перемещении красного курсора-крестика вы вторглись в область формулы, курсор автоматически принимает форму голубого курсора формул. Помимо курсора формул в вашем распоряжении находится курсор мыши. С его помощью можно только позиционировать курсор формул, как и курсор-крестик, но не перемещать его. Если вам не нравится взаимное расположени е областей в документе, его можно изменить: установите курсоркрестик на пустом месте документа удерживая нажатой левую клавишу мыши, создайте прямоугольну ю рамку из пунктирных линий, захватывая области, положение которых вы хотите изменить (попавшие в рамку области будут 99 выделены пунктиром). установите курсор на одну из выделенных областей (курсор примет вид черной руки) удерживая нажатой левую клавишу мыши, переместите выделенные области в требуемое место. При вводе текстовой области (клавиша ["]) курсор-крестик имеет вид вертикальной красной черты. При этом текстовая область окружена черной рамкой. Определение функций пользователя При определении функций пользователя так же как и при определении переменных могут быть использованы знаки локального и глобального присвоения. При этом с использованием знака глобального присваивания функция может быть определена в любом месте документа. Синтаксис определения функции: Name_Func (arg1, arg2, ..., argN) := Выражение Name_Func (arg1, arg2, ..., argN) Выражение Здесь Name_Func - имя функции; arg1, ..., argN - аргументы функции; Выражение любое выражение, содержащее доступные системе операторы и функции с операндами и аргументами, указанными в списке параметров. 100 Ранжированные переменые. Ранжированные переменные – особый класс переменных, который в системе Math CAD зачастую заменяет управляющие структуры, называемые циклами. Эти переменные имеют ряд фиксированных значений, с определённым шагом меняющихся от начального значения до конечного. Ранжированные переменные характеризуются именем и индексом каждого своего элемента. Например: Name:=Nbegin .. Nend где Name - имя переменной,Nbegin - её начальное значение, Nend - конечное значение, .. - символ, указывающий на изменение переменной в за Массивы (векторы, матрицы). Важным типом данных в системе MathCAD являются массивы. Массив- имеющая уникальное имя совокупность конечного числа числовых или символьных элементов, упорядоченных заданным образом и имеющих определенные адреса. В системе MathCAD используются массивы двух типов: одномерные (векторы) и двумерные (матрицы). Индексация элементов массивов. Порядковый номер элемента, который является его адресом, называется индексом. Нижняя граница индексации задается значением системной переменной ORIGIN, которая может принимать значение 0 или 1. Для смены начала индексации можно прямо в документе присвоить переменной ORIGON соответствующее значение или сделать это, через позицию Math главного меню, подменю Options, используя вкладку Build-In Variables(встроенные переменные) Векторы могут быть двух типов: векторы – строки и векторы – столбцы. Несмотря на то что два этих вектора имеют одни и те же числовые значения элементов, они различны по типу и дадут разные результаты при векторных и матричных операциях. Для ввода векторов и матриц можно использовать кнопку панели наборных математических элементов Matrix, которая ,в свою очередь, включается нажатием соответствующей кнопки на панели Math. Но горазжо проще использовать сочетание клавишь [Ctrl+M]. Оба выше указанных действия приводят к появлению диалогового окна Insert Matrix, в котором необходимо указать число строк и столбцов для вводимой матрицы 101 (вектора). В результате в документе появляется шаблон матрицы, который можно заполнить требуемыми данными. Переход от символа к символу внутри шаблона совершается с помощью клавиши Tab(Табуляция). 102 Настройка параметров вычислений. Для настройки параметров вычислений необходимо выбрать команду Options (Параметры) меню Math (Математика). При этом на экране появится диалоговое окно (Свойства), содержащее следующие вкладки: Built-In Variabls (Встроенные переменные) - позволяет установить значения встроенных системных переменных, влияющих на точность вычислений и параметры некоторых функций системы. Calculation (Вычисление) - Эта вкладка содержит две опции, задающие режим автоматических вычислений и оптимизации выражений перед вычислением. Display (Отображение) - Позволяет форматировать вид символов, отображающих основные операторы системы (умножение, деление, локальное и глобальное присваивание и др.) Unit System (Система единиц) - Позволяет выбрать систему единиц для размерных величин: SI, MKS, CGS, Us и None (не используется ни одна из этих систем). Dimensions (Размерность) - Позволяет изменить формат размерных величин (на вкладке содержится их перечень). Для этого надо "включить" опцию Display Dimensions (Просмотр размерностей) Остановимся подробнее на изучении параметров вкладки Built-In Variabls (Встроенные переменные). Здесь можно изменить значения системных констант и переменных. К ним относятся: Array Origin (ORIGIN) - Начальное значение для индексов. Например, трехмерный вектор v при ORIGIN=0 (по умолчанию) имеет компоненты v0, v1, v2. Convergence Tolerance (TOL) - Допустимое отклонение. MathACD использует эту переменную при различных численных расчетах, таких как вычисление определенных интегралов и при решении уравнений с использованием функций root и polyroots. По умолчанию TOL=10-3. 103 Constraint Tolerance (CTOL) - Задает точность вычислений при использовании блока решений уравнений и систем. Блок начинается со слова Given и заканчивается словами Find, Minerr и др. По умолчанию CTOL=10-3 Seed value for random numbers - Определяет интервал от 0 до указанного в поле значения, из которого функция rnd(x) генерирует x случайных чисел. Возможность менять этот интервал позволяет получать разные последовательности случайных чисел. Presision (PRNPRESISION) - Задает точность числовых значений, которые помещаются в файл, создаваемый функцией WRITEPRN Column Width (PRNCOLWIDTH) - Задает ширину столбца (в символах) при создании файлов с помощью функции WRITEPRN Кнопка Restore Defaults (Васстановить по умолчанию) позволяет вернуть стандартно установленные в системе MathCAD параметры вычислений (те, что установлены по умолчанию), если внесенные вами изменения в системные переменные вас не устраивают. Значения переменных по умолчанию указаны справа от полей, предназначенных для ввода. 104 Лекция 9. Программирование в Mathcad, Интерполяция и регрессия, функции сглаживания данных и предсказания. Обзор программных операторов. Вплоть до появления 7 версии системы MathCAD возможности программирования в них были крайне ограниченными. Фактически MathCAD позволяла реализовать лишь линейные программы, в основе которых лежит понятие функции. Функция if и ранжированные переменные в отдельных случаях могли заменить условные выражения и циклы, но с серьезными ограничениями. Отсутствовала возможность задания завершенных программных модулей. Эти возможности в расширенном варианте появились в MathCAD 7.0 Pro и имеются в описываемой версии MathCAD 2001 PRO. Они сосредоточены в наборной панели программных элементов Programming (показана на рисунке), включаемой кнопкой панели Math. на Отметим, что возможность составлять программы реализована только в версии Professional. Все эти MathCAD-программы с точки зрения программиста представляют собой подпрограммы-функции, которые могут возвращать в качестве результата число, вектор или матрицу. Функции могут вызывать сами себя (рекурсивно определенные функции) или другие подпрограммы-функции, определенные выше в том же MathCADдокументе. Эти подпрограммы-функции составляются так же, как и определения функций. Рассмотрим простой пример вычисления суммы: Sum(n)=1+2+3+..+n: Задайте сначала имя функции Sum, вслед за которым введите список параметров (n) и оператор присваивания := Введите начальное значение s <-- 0 и отметьте его целиком. Стрелка служит оператором присваивания в теле программы, вводитя клавишей { (открывающая фигурная скобка) или выбором кнопки со срелкой с панели. Создайте новую строку программы (вставка вертикальной черты) при помощи кнопки Add Line ( клавиша -] (закрывающая квадратная скобка)). На экране появится вертикальная черта и пустая ячейка. Выполните щелчок на кнопке for, чтобы ввести оператор цикла. Перед символом принадлежности введите переменную i, а после него - промежуток изменения переменной 1..n. В находящейся ниже ячейке введите присваивание s <- s+i. Программа готова. Ниже в таблице приведены операторы, находящиеся на кнопках панели программирования. 105 Команды панели Symbolic (символы) Команда Функция Пример Добавляет новую строку под/над Add Line (зависит от выделения) текущей строкой. Присваивание значения локальной переменной. if otherwise for Условный оператор (оператор ветвления)if; условие должно стоять после if, а оператор, который исполняется, если выполнено заданное условие,- перед if. Обозначает оператор, который должет быть исполнен, если условие оператора if не выполняется. Цикл for; за ключевым словом for следует переменная-счетчик, а после символа принадлежности вводится промедуток изменения этой переменной. Внутренние операторы цикла сдвинуты немного вправо. 106 while Цикл while;внутренние операторы цикла будут исполняться до тех пор, пока будет истинным условие, следующее за ключевым словом while. Пример показыветприменение цикла для нахождения нулей функции методом касательных Ньютона. break Служит для преждевременного завершения цикла, чтобы, например, избежать зацикливания или слишком продолжительных вычислений. Служит для преждевременного завершения текущей continue итерации цикла; сам цикл при этом продолжается. retutn on error Преждевременное завершение программы; указанное в ячейке значение будет возвращено. Если при вычислении выражения expr2 возникла ошибка, вычисляется выражение expr1. 107 6.2 Примеры программ. Условный оператор if и оператор otherwise.Рассмотрим пример программного блока, вычисляющего факториал с использованием рекурсии В данном примере 1 возвращается, только если n=0 или n=1. Обратите внимание на задание некольких условий - со знаком плюс, каждое условие в скобках. В остальных случаях, учитывая формулу n!=n*(n-1)!, вызывается fakt(n-1) и умножается на n. При помощи функции error можно вывести сообщение об ошибке при неправильном вводе аргумента. Для демонстрации работы цикла for рассмотрим ту же задачу, но вычисление факториала осуществим при помощи цикла. Если n=0 или n=1, возвращается 1, в противном случае при помощи цикла for вычисляется произведение n!=1*2*3...*n. Вычисленное последним значение pвозвращается автоматически. В следующем примере при помощи алгоритма Евклида определяется наибольший общий делитель. Для реализации алгоритма используется цикл с ключевым словом while Прерывание цикла при помощи операторов break и continue. Оператор return .Первый пример - релизация метода касательных Ньютона для определения нулей функции. На основе начального значения x вычисляется новое улучшенное значение x, расположенное ближе к искомому нулю функции. При этом итерации повторяются до тех пор, пока значение функции не станет меньше заданной точности (в примере 10-6). 108 При помощи оператора return организовано завершение программы в нужный момент. В данном примере если число итераций больше или равно 10, то происходит прерывание программы и выдается сообщение о том, что слишком много итераций. Здесь также отслеживаются случаи, когда производная в знаменателе близка к нулю и выдается об этом сообщение. Кроме ключевого слова break имеется ключевое слово continue с похожей функцией. В то время как break прерывает цикл и осуществляет переход к следующему за циклом оператору, continue прерывает выполнение только текущей итерации. В примере справа ключевое слово continue используется для выявления всех нулей функции на заданном интервале. При этом в примере производится разбиение интервала на n равных подинтервалов и ищутся те из них, на которых функия меняет знак. При обнаружении такого поинтервала вызывается функия, реализующая метод касательных Ньютона, с начальным значением, находящимся в середине подинтервала. Обратите внимание, по завершении работы программы выдается вектор значений. Ниже приводится программа, вычисляющая коэффициенты Фурье функции, причем в результате выдается матица значений: нулевая по счету строка содержит коэффициенты Аn, а первая - коэффициенты Bn. Для выделения этих коэффициентов выдавемая матрица 109 транспонируется и из нее выбирается нулевой столбец для коэффициентов Аn, и первый для Bn. Функции линейной и сплайновой аппроксимации. Одномерная линейная аппроксимация. Одномерная сплайн-интерполяция и сплайн-аппроксимация. Двумерная линейная сплайн-интерполяция и сплайн-аппроксимация. Одномерная линейная аппроксимация. При проведении научно-технических расчетов часто используются зависимости вида у (х), причем число точек этих зависимостей ограничено. Неизбежно возникает задача получения приемлемой представительности функций в промежутках между узловыми точками (интерполяция) и за их пределами (экстраполяция). Эта задача решается 110 аппроксимацией исходной зависимости, т. е. ее подменой какой-либо достаточно простой функцией. Система MathCAD предоставляет возможность аппроксимации двух типов: кусочно-линейной и сплайновой. При кусочно-линейной интерполяции, или аппроксимации, вычисления дополнительных точек выполняются по линейной зависимости. Графически это означает просто соединение узловых точек отрезками прямых, для чего используется следующая функция: linterp(VX, VY, х) Для заданных векторов VX и VY узловых точек и заданного аргумента х эта функция возвращает значение функции при ее линейной аппроксимации. При экстраполяции используются отрезки прямых с наклоном, соответствующим наклону крайних отрезков при линейной интерполяции. Одномерная сплайн-интерполяция и сплайн-аппроксимация. При небольшом числе узловых точек (менее 10) линейная интерполяция оказывается довольно грубой. Для целей экстраполяции функция linterp не предназначена и за пределами области определения может вести себя непредсказуемо. Гораздо лучшие результаты дает сплайн-аппроксимация. При ней исходная функция заменяется отрезками кубических полиномов, проходящих через три смежные узловые точки. Коэффициенты полиномов рассчитываются так, чтобы непрерывными были первая и вторая производные. 111 Для осуществления сплайновой аппроксимации система MathCAD предлагает четыре встроенные функции. Три из них служат для получения векторов вторых производных сплайнфункций при различном виде интерполяции: cspline(VX, VY) — возвращает вектор VS вторых производных при приближении в опорных точках к кубическому полиному; pspline(VX, VY) — возвращает вектор VS вторых производных при приближении к опорным точкам параболической кривой; lspline(VX, VY) — возвращает вектор VS вторых производных при приближении к опорным точкам прямой. Наконец, четвертая функция interp(VS, VX, VY, x)-возвращает значение у (х) для заданных векторов VS, VX, VY и заданного значения x. Таким образом, сплайн-аппроксимация проводится в два этапа. На первом с помощью функций cspline, pspline или Ispline отыскивается вектор вторых производных функции у (х), заданной векторами VX и VY ее значений (абсцисс и ординат). Затем, на втором этапе для каждой искомой точки вычисляется значение у (х) спомощью функции interp. Двумерная линейная сплайн-интерполяция и сплайн-аппроксимация. Для повышения качества построения ЗD-графиков имеется возможность осуществления двумерной сплайн-интерполяции. Это позволяет существенно повысить представительность сложных графиков SD-функций, в том числе контурных. 112 Интерполяция функции 2-х переменных проводится также в два этапа: 1. Вычисляется вектор VS вторых производных в опорных точках с помощью функций cspline(Mxy,Mz), pspline(Mxy,Mz), lspline(Mxy,Mz) . Здесь Mxy - матрица размера n*2, сторки которой определяют по диагонали (x,y)координаты прямоугольной сетки, Mz - матрица размера n*n значений функции в узлах вышеопределенной сетки. 2. Вычисление с помощью функции interp(VS,Mxy,Mz,V). Здесь V - вектор координат (x,y). На рисунке справа показан график функции 2-х переменных после проведения двумерной сплайн-интерполяции, а слева - без нее. 113 Функции для линейной регрессии. Другой широко распространенной задачей обработки данных является представление их совокупности некоторой функцией у(х). Задача регрессии заключается в получении параметров этой функции такими, чтобы функция приближала облако исходных точек (заданных векторами VX и VY) с наименьшей среднеквадратичной погрешностью. Чаще всего используется линейная регрессия, при которой функция у(х) имеет вид у(х) = а + b*х и описывает отрезок прямой. К линейной регрессии можно свести многие виды нелинейной регрессии при двупараметрических зависимостях у(х). Для проведения линейной регрессии в систему встроен ряд приведенных ниже функций: corr(VX, VY) — возвращает скаляр — коэффициент корреляции Пирсона; intercrpt(VX, VY) — возвращает значение параметра а (смещение линии регрессии по вертикали); slope(VX, VY) — возвращает значение параметра b (наклона линии регрессии). Функции сглаживания данных. Данные большинства экспериментов имеют случайные составляющие погрешности. Поэтому часто возникает необходимость статистического сглаживания данных. Ряд функций MathCAD предназначен для выполнения операций сглаживания данных различными методами. Вот перечень этих функций: medsmooth(VY,n)— для вектора с m действительными числами возвращает m-мерный вектор сглаженных данных по методу скользящей медианы, параметр n задает ширину окна сглаживания (n должно быть нечетным числом, меньшим m); ksmooth(VX, VY, b) — возвращает n-мерный вектор сглаженных VY, вычисленных на основе распределения Гаусса. VX и VY — n-мерные векторы действительных чисел. 114 Параметр b (полоса пропускания) задает ширину окна сглаживания ( b должно в несколько раз превышать интервал между точками по оси х ); supsmooth(VX, VY) — возвращает n-мерный вектор сглаженных VY, вычисленных на основе использования процедуры линейного сглаживания методом наименьших квадратов по правилу k-ближайших соседей с адаптивным выбором k. VX и VY — n-мерные векторы действительных чисел. Элементы вектора VX должны идти в порядке возрастания. Функция предсказания. Весьма интересной является функция предсказания predikt(data,k,N), где data — вектор данных, 115 где data — вектор данных, k — число последних точек существующих данных, на основе которых происходит расчет предсказываемых точек; и N — число точек, в которых необходимо предсказать данные. Она по ряду заданных равномерно расположенных точек позволяет рассчитать некоторое число N последующих точек, т. е. по существу выполняет экстраполяцию произвольной (но достаточно гладкой и предсказуемой) зависимости. Функция предсказания обеспечивает высокую точность при монотонных исходных функциях или функциях, представляемых полиномом невысокой степени. 116