Основы работы с базами данных
Некоторые термины и определения, используемые при работе с базами данных
Используемая терминология различна в теории реляционных баз данных, на стадии проектирования концептуальной модели и при практической работе с физической моделью и с базой данных, как это показано далее. Приведенные термины очень важны, однако для начинающих изучать данный предмет могут оказаться сложными для понимания. К этим формулировкам рекомендуется периодически возвращаться (после изучения следующих разделов курса) для их четкого усвоения. Основная часть первоисточников по теории баз данных, а также средства разработчиков используют английскую терминологию, поэтому для большинства русских терминов приведены соответствующие английские значения.База данных (БД, database) - поименованная совокупность структурированных данных, относящихся к определенной предметной области.
Предметная область - некоторая часть реально существующей системы, функционирующая как самостоятельная единица. Полная предметная область может представлять собой экономику страны или группы союзных государств, однако на практике для информационных систем наибольшее значение имеет предметная область масштаба отдельного предприятия или корпорации.
Система управления базами данных (СУБД) - комплекс программных и языковых средств, необходимых для создания и модификации базы данных, добавления, модификации, удаления, поиска и отбора информации, представления информации на экране и в печатном виде, разграничения прав доступа к информации, выполнения других операций с базой.
Реляционная БД - основной тип современных баз данных. Состоит из таблиц, между которыми могут существовать связи по ключевым значениям.
Таблица базы данных (table) - регулярная структура, которая состоит из однотипных строк (записей, records), разбитых на столбцы (поля, fields).
В теории реляционных баз данных синоним таблицы - отношение (relation), в котором строка называется кортежем, а столбец называется атрибутом.
В концептуальной модели реляционной БД аналогом таблицы является сущность (entity), с определенным набором свойств - атрибутов, способных принимать определенные значения (набор допустимых значений - домен).
Ключевой элемент таблицы (ключ, regular key) - такое ее поле ( простой ключ) или строковое выражение, образованное из значений нескольких полей (составной ключ), по которому можно определить значения других полей для одной или нескольких записей таблицы. На практике для использования ключей создаются индексы - служебная информация, содержащая упорядоченные сведения о ключевых значениях. В реляционной теории и концептуальной модели понятие "ключ" применяется для атрибутов отношения или сущности.
Первичный ключ (primary key) - главный ключевой элемент, однозначно идентифицирующий строку в таблице. Могут также существовать альтернативный (candidate key) и уникальный (unique key) ключи, служащие также для идентификации строк в таблице.
В реляционной теории первичный ключ - минимальный набор атрибутов, однозначно идентифицирующий кортеж в отношении.
В концептуальной модели первичный ключ - минимальный набор атрибутов сущности, однозначно идентифицирующий экземпляр сущности.
Связь (relation) - функциональная зависимость между объектами. В реляционных базах данных между таблицами устанавливаются связи по ключам, один из которых в главной (parent, родительской) таблице - первичный, второй - внешний ключ - во внешней (child, дочерней) таблице, как правило, первичным не является и образует связь "один ко многим" (1:N). В случае первичного внешнего ключа связь между таблицами имеет тип "один к одному" (1:1). Информация о связях сохраняется в базе данных.
Внешний ключ (foreign key) - ключевой элемент подчиненной (внешней, дочерней) таблицы, значение которого совпадает со значением первичного ключа главной (родительской) таблицы.
Ссылочная целостность данных (referential integrity) - набор правил, обеспечивающих соответствие ключевых значений в связанных таблицах.
Хранимые процедуры (stored procedures) - программные модули, сохраняемые в базе данных для выполнения определенных операций с информацией базы.
Триггеры (triggers) - хранимые процедуры, обеспечивающие соблюдение условий ссылочной целостности данных в операциях изменения первичных ключей (возможно каскадное изменение данных), удалении записей в главной таблице (каскадное удаление в дочерних таблицах) и добавлении записей или изменении данных в дочерних таблицах.
Объект (object) - элемент информационной системы, обладающий определенными свойствами (properties) и определенным образом реагирующий на внешние события (events).
Система - совокупность взаимодействующих между собой и с внешним окружением объектов.
Репликация базы данных - создание копий базы данных (реплик), которые могут обмениваться обновляемыми данными или реплицированными формами, отчетами или другими объектами в результате выполнения процесса синхронизации.
Транзакция - изменение информации в базе в результате выполнения одной операции или их последовательности, которое должно быть выполнено полностью или не выполнено вообще. В СУБД существуют специальные механизмы обеспечения транзакций.
Язык SQL (Structured Query Language) - универсальный язык работы с базами данных, включающий возможности ее создания, модификации структуры, отбора данных по запросам, модификации информации в базе и прочие операции манипулирования базой данных.
Null - значение поля таблицы, показывающее, что информация в данном поле отсутствует. Разрешение на возможность существования значения Null может задаваться для отдельных полей таблицы.
Принципы проектирования информационных систем
Информационная система (ИС) - программно-аппаратный комплекс, предназначенный для хранения и обработки информации какой-либо предметной области. База данных - важнейший компонент любой информационной системы. Хорошо структурированная информация в базе данных позволяет не только беспроблемно эксплуатировать систему и выполнять ее текущее обслуживание, но и модифицировать и развивать ее при модернизации предприятия и изменении информационных потоков, законодательства и форм отчетности.В настоящее время в эксплуатации на крупных предприятиях находятся комплексные ИС управления предприятиями (КИС, корпоративные системы, ERP-системы), такие как R/3 фирмы SAP, Oracle E-Business Suite, BaanERP. Среди российских разработок приближаются по функциональности к системам класса ERP "Галактика", "Флагман", "Парус".
По данным аналитической компании IDC за 2004 г., объем российского рынка интегрированных систем управления предприятием (ИСУП) вырос на 52,8% и достиг 195 млн. долл. Уже третий год подряд темпы его роста превышают аналогичный показатель ИТ отрасли в целом (1.1).
| SAP | 40,6 |
| Oracle | 22,8 |
| Microsoft | 10,9 |
| Galaktika | 8,2 |
| 1C | 4,6 |
| Epicor-Scala | 3,7 |
| BAAN | 2,4 |
| Остальное | 6,8 |
| ВСЕГО | 195,15 млн. долл. |
Многие ERP-системы могут устанавливаться и функционировать на различных операционных системах и серверах баз данных (многоплатформенные системы). База данных подобных систем состоит из нескольких тысяч таблиц (BaanERP 5.0с - более 2500 таблиц информации по одному предприятию).
Любая сложная система для обеспечения ее надежного функционирования строится как иерархическая система, состоящая из отдельных подсистем и модулей, которые взаимодействуют между собой и используют общую базу данных.
На рис. 1.2 показан полный состав системы BaanERP версии 5.0с (меню администратора системы) и состав модулей подсистемы "Производство".


Рис. 1.2. Подсистемы и модули BaanERP 5.0c
На рис. 1.3 приведена схема подсистем и модулей КИС "Флагман".

Рис. 1.3. Схема подсистем и модулей КИС "Флагман"
Понимание принципов разработки, организации и функционирования подобных систем, способов хранения и обработки информации необходимо каждому современному специалисту.
При описании информационной системы предполагается, что она содержит два типа сущностей: операционные сущности, которые выполняют какую-либо обработку (некоторый аналог программы), и пассивные сущности, которые хранят информацию, доступную для пополнения, изменения, поиска, чтения (база данных).
При проектировании сложных информационных систем используется метод декомпозиции - система разбивается на составные части, которые связаны, взаимодействуют друг с другом и образуют иерархическую структуру. Иерархический характер сложных систем хорошо согласуется с принципом групповой разработки. В этом случае деятельность каждого участника проекта ограничивается соответствующим иерархическим уровнем.
Классический подход к разработке сложных систем представляет собой структурное проектирование, при котором осуществляется алгоритмическая декомпозиция системы по методу "сверху вниз". Именно в этом случае можно построить хорошо функционирующую систему с общей базой данных, согласованными форматами использования и обработки информации на всех участках, с оптимальным взаимодействием всех подсистем.
Исторически сложилось так, что некоторые системы разрабатывались по методу "снизу вверх": вначале создавались отдельные автоматизированные рабочие места (АРМы), затем предпринимались попытки объединения их в единую информационную систему. Подобные разработки для крупных систем не могут быть успешны.
При создании проекта информационной системы для проектирования ее базы данных следует определить:
При этом очень важен анализ существующей практики реализации информационных процессов и нормативной информации (законов, постановлений правительства, отраслевых стандартов), определяющих необходимый объем и формат хранения и передачи информации. Если радикальной перестройки сложившегося информационного процесса не предвидится, следует учитывать имеющиеся формы хранения и обработки информации в виде журналов, ведомостей, таблиц и т.п. бумажных носителей.
Однако предварительно необходимо выполнить анализ возможности перехода на новые системы учета, хранения и обработки информации, возможно, исходя из имеющихся на рынке программных продуктов-аналогов, разработанных крупными информационными компаниями и частично или полностью соответствующими поставленной задаче.
Схема формирования информационной модели представлена на рис.1.4.

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

Рис. 1.5. Каскадная схема жизненного цикла ИС
Правил Кодда
Кодд предложил применение реляционной алгебры в СУРБД, для расчленения данных в связанные наборы. Он организовал свою систему БД вокруг концепции, основанной на наборах данных.
В реляционной модели данные разбиваются на наборы, которые составляют табличную структуру. Эта структура таблиц состоит из индивидуальных элементов данных, называемых полями. Одиночный набор или группа полей известна как запись.
Модель данных, или концептуальное описание предметной области - самый абстрактный уровень проектирования баз данных.
С точки зрения теории реляционных БД, основные принципы реляционной модели на концептуальном уровне можно сформулировать следующим образом:
Формулируя принципы реляционной модели, доктор Кодд выбрал термин "отношение" (relation), потому что, по его мнению, этот термин однозначен (в то время как, например, термин "таблица" имеет множество различных видов - таблица в тексте, электронная таблица и пр.). Весьма распространено следующее заблуждение: реляционная модель названа так потому, что она определяет связи между таблицами. На самом деле, название этой модели происходит от отношений (таблиц базы данных), лежащих в ее основе.
Каждая строка, содержащая данные, называется кортежем, каждый столбец отношения называется атрибутом (на уровне практической работы с современными реляционными БД используются термины "запись" и "поле").
Элементами описания реляционной модели данных на концептуальном уровне являются сущности, атрибуты, домены и связи
Сущность - некоторый обособленный объект или событие, информацию о котором необходимо сохранять в базе данных, имеющий определенный набор свойств - атрибутов.
Сущности могут быть как физические (реально существующие объекты: например, СТУДЕНТ, атрибуты - № зачетной книжки, фамилия, его факультет, специальность, № группы и т.д.), так и абстрактные (например, ЭКЗАМЕН, атрибуты - дисциплина, дата, преподаватель, аудитория и пр.). Для сущностей различают ее тип и экземпляр. Тип характеризуется именем и списком свойств, а экземпляр - конкретными значениями свойств.
Атрибуты сущности бывают:
Спецификация атрибута состоит из его названия, указания типа данных и описания ограничений целостности - множества значений (или домена), которые может принимать данный атрибут.
Домен - это набор всех допустимых значений, которые может содержать атрибут.
Понятие "домен" часто путают с понятием "тип данных". Необходимо различать эти два понятия. Тип данных - это физическая концепция, а домен - логическая. Например, "целое число" - это тип данных, а "возраст" - это домен.
Связи - на концептуальном уровне представляют собой простые ассоциации между сущностями. Например, утверждение "Покупатели приобретают продукты" указывает, что между сущностями "Покупатели" и "Продукты" существует связь, и такие сущности называются участниками этой связи.
Существует несколько типов связей между двумя сущностями: это связи "один к одному", "один ко многим" и "многие ко многим".
Каждая связь в реляционной модели характеризуется именем, обязательностью, типом и степенью. Различают факультативные и обязательные связи. Если сущность одного типа оказывается по необходимости связанной с сущностью другого типа, то между этими типами объектов существует обязательная связь (обозначается двойной линией). Иначе связь является факультативной.
Степень связи определяется количеством сущностей, которые охвачены данной связью. Пример бинарной связи - связь между отделом и сотрудниками, которые в нем работают.
Диаграмма "сущности-связи" (Entity-Relationship diagrams, или E/R diagram) служит для описания схемы базы на концептуальном уровне проектирования. Метод был предложен в 1976 г. Питером Пин Шань Ченом (Peter Pin Shan Chen) [2]. На диаграммах "сущности-связи" сущности изображаются в виде прямоугольников, атрибуты - в виде эллипсов, а связи - в виде ромбов (см. рис. 2.6).

Рис. 2.6. Диаграмма "сущности-связи"
В дальнейшем многими авторами были разработаны свои варианты подобных моделей (нотация Мартина, нотация IDEF1X, нотация Баркера и др.). Кроме того, различные программные средства, реализующие одну и ту же нотацию, могут отличаться своими возможностями. По сути, все варианты диаграмм "сущность-связь" исходят из одной идеи - рисунок всегда нагляднее текстового описания.
Все такие диаграммы используют графическое изображение сущностей предметной области, их свойств (атрибутов), и взаимосвязей между сущностями.
Проектирование схемы БД должно решать задачи минимизации дублирования данных, упрощения и ускорения процедур их обработки и обновления. При неправильно спроектированной схеме БД могут возникнуть аномалии модификации данных. Для решения подобных проблем проводится нормализация отношений
Однако в технологии работы с хранилищами данных может использоваться обратный прием - денормализация отношений с целью увеличения скорости выполнения запросов к очень большим объемам архивных данных.
В рамках реляционной модели данных Э.Ф. Коддом были разработаны принципы нормализации отношений и предложен механизм, позволяющий любое отношение преобразовать к третьей нормальной форме.
Нормализация - это формальный метод анализа отношений на основе их первичного ключа и существующих связей. Ее задача - это замена одной схемы (или совокупности отношений) БД другой схемой, в которой отношения имеют более простую и регулярную структуру.
При работе с реляционной моделью для создания отношений приемлемого качества достаточно выполнения требований первой нормальной формы.
Первая нормальная форма (1НФ) связана с понятиями простого и сложного атрибутов. Простой атрибут - это атрибут, значения которого атомарны (т.е. неделимы). Сложный атрибут может иметь значение, представляющее собой объединение нескольких значений одного или разных доменов. В первой нормальной форме устраняются повторяющиеся атрибуты или группы атрибутов, т.е. производится выявление неявных сущностей, "замаскированных" под атрибуты.
Отношение приведено к 1НФ, если все его атрибуты - простые, т.е. значение атрибута не должно быть множеством или повторяющейся группой.
Для приведения таблиц к 1НФ необходимо разбить сложные атрибуты на простые, а многозначные атрибуты вынести в отдельные отношения.
Вторая нормальная форма (2НФ) применяется к отношениям с составными ключами (состоящими из двух и более атрибутов) и связана с понятиями функциональной зависимости.
Если в любой момент времени каждому значению атрибута A соответствует единственное значение атрибута B, то B функционально зависит от A (A
B). Атрибут (группа атрибутов) A называется детерминантом.Во второй нормальной форме устраняются атрибуты, зависящие только от части уникального ключа. Эта часть уникального ключа определяет отдельную сущность.
Отношение находится во 2НФ, если оно приведено к 1НФ и каждый неключевой атрибут функционально полно зависит от составного первичного ключа.
Третья нормальная форма (3НФ) связана с понятием транзитивной зависимости. Пусть A, B, C - атрибуты некоторого отношения. При этом A
B и B
C, но обратное соответствие отсутствует, т.е. C не зависит от B или B не зависит от A. Тогда говорят, что C транзитивно зависит от A (A
C).В третьей нормальной форме устраняются атрибуты, которые зависят от атрибутов, не входящих в уникальный ключ. Эти атрибуты являются основой отдельной сущности.
Отношение находится в 3НФ, если оно находится во 2НФ и не имеет атрибутов, не входящих в первичный ключ и находящихся в транзитивной зависимости от первичного ключа.
Существуют также нормальная форма Бойса-Кодда (НФБК), 4НФ и 5НФ. Однако наибольшее значение имеет 1НФ, т.к. последующие НФ связаны с понятиями о составных ключах и сложных зависимостях от ключей, а на практике встречаются обычно более простые случаи.
Моделирование структуры базы данных при помощи алгоритма нормализации имеет серьезные недостатки:
В реальном проектировании структуры базы данных применяются другой метод - так называемое семантическое моделирование. Семантическое моделирование представляет собой моделирование структуры данных, опирающееся на смысл этих данных. В качестве инструмента семантического моделирования используются различные варианты диаграмм "сущность-связь (ERD)" c построением концептуальной модели базы данных.
Любой специалист, освоивший общие принципы оптимальной организации реляционных баз данных, в состоянии построить модель, не противоречащую принципам нормализации.
Реляционная БД на физическом уровне состоит из таблиц, между которыми могут существовать связи по ключевым значениям. Одновременно с таблицами и информацией о связях в реляционной базе данных могут присутствовать "хранимые процедуры" и, в частности, "триггеры", обеспечивающие соблюдение условий ссылочной целостности базы.
Дополнительные стратегии поддержания ссылочной целостности
IGNORE (ИГНОРИРОВАТЬ) - разрешить выполнять операцию без проверки ссылочной целостности. В этом случае в дочерней таблице могут появляться некорректные значения внешних ключей, вся ответственность за целостность базы данных ложится на программиста или пользователя.SET NULL (ЗАДАТЬ ЗНАЧЕНИЕ NULL) - разрешить выполнение требуемой операции, но все возникающие некорректные значения внешних ключей изменять на null-значения. Эта стратегия имеет два недостатка. Во-первых, для нее требуется разрешение на использование null-значений. Во-вторых, записи дочерней таблицы теряют связь с записями родительской таблицы. Установить, с какой записью родительской таблицы были связаны измененные записи дочерней таблицы, после выполнения операции уже нельзя.
SET DEFAULT (ЗАДАТЬ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ) - разрешить выполнение требуемой операции, но все возникающие некорректные значения внешних ключей изменять на некоторое значение, принятое по умолчанию. Достоинство этой стратегии по сравнению с предыдущей в том, что она позволяет не пользоваться null-значениями. Установить, с какими записями родительской таблицы были связаны измененные записи дочерней таблицы, после выполнения такой операции тоже нельзя.
На рис. 2.7 представлен пример реляционной базы, содержащей сведения отдела кадров по работникам предприятия, в которой для каждой таблицы базы показан список ее полей и показаны связи между таблицами по простому ключу - значению поля tabn.

Рис. 2.7. Схема реляционной базы данных
Начиная с 1980-х годов, одновременно с широким распространением персональных компьютеров, большое распространение получили так называемые "настольные" реляционные СУБД (Desktop Databases), такие как dBase, FoхBase (его более поздние версии - FoхPro и Visual FoхPro), Paradoх, Access. Наиболее распространенным форматом таблиц подобных реляционных баз стал *.dbf, с которым работали dBase, FoхBase, а также Clipper - система написания программ (в режиме строкового компилятора) для работы с базами данных.
В последующем некоторые из них стали полноценными сетевыми СУБД, работающими не только в различных операционных системах в архитектуре "файл-сервер", но и имеющими возможности для работы с серверами баз данных в архитектуре "клиент-сервер", а также разработки и использования html-страниц для работы с базами данных.
Все СУБД для ПК можно подразделить на 3 вида:
Все подобные СУБД имеют в своем составе средства для:
Важными факторами, определяющими выбор СУБД, являются:
Все современные СУБД поддерживают режимы работы в локальной сети многих пользователей с одной базой данных. Некоторые имеют "мастеров", "построителей" и "генераторы выражений" для ускоренной разработки баз данных, экранных форм, отчетов, стандартных приложений.
Последние версии СУБД, разработанные для работы в OC Windows 95, относятся к классу RAD-систем (Rapid Application Development) - средства быстрой разработки приложений - и имеют объектно-ориентированный язык программирования. Это такие системы, как Visual FoхPro, MS Access, Visual dBase и другие.
Иерархические базы данных
В основе данной модели - иерархическая модель данных. В этой модели имеется один главный объект и остальные - подчиненные - объекты, находящиеся на разных уровнях иерархии. Взаимосвязи объектов образуют иерархическое дерево с одним корневым объектом.Иерархическая БД состоит из упорядоченного набора нескольких экземпляров одного типа дерева. Автоматически поддерживается целостность ссылок между предками и потомками. Основное правило: никакой потомок не может существовать без своего родителя (см. рис. 2.4).

Рис. 2.4. Схема иерархической модели данных
Типичным представителем (наиболее известным и распространенным) является Information Management System (IMS) фирмы IBM. Первая версия появилась в 1968 г. До сих пор поддерживается много баз данных этой системы.
Классификация баз данных
По технологии обработки данных базы данных подразделяются на централизованные и распределенные.Централизованная база данных хранится в памяти одной вычислительной системы. Эта вычислительная система может быть мэйнфреймом - тогда доступ к ней организуется с использованием терминалов - или файловым сервером локальной сети ПК.
Распределенная база данных состоит из нескольких, возможно, пересекающихся или даже дублирующих друг друга частей, которые хранятся в различных ЭВМ вычислительной сети. Работа с такой базой осуществляется с помощью системы управления распределенной базой данных (СУРБД).
По способу доступа к данным базы данных разделяются на базы данных с локальным доступом и базы данных с сетевым доступом.
Для всех современных баз данных можно организовать сетевой доступ с многопользовательским режимом работы.
Централизованные базы данных с сетевым доступом могут иметь следующую архитектуру:

Рис. 2.1. Схема работы с БД в локальной сети с выделенным файловым сервером
Файл-сервер. Архитектура систем БД с сетевым доступом предполагает выделение одной из машин сети в качестве центральной (файловый сервер). На этот компьютер устанавливается операционная система (ОС) для выделенного сервера (например, Microsoft Windows Server 2003). На нем же хранится совместно используемая централизованная БД в виде одного или группы файлов. Все другие компьютеры сети выполняют функции рабочих станций (могут работать в ОС Microsoft Windows 2000 Professional или Microsoft Windows 98). Файлы базы данных в соответствии с пользовательскими запросами передаются на рабочие станции, где и производится обработка информации (см. рис. 2.1). При большой интенсивности доступа к одним и тем же данным производительность информационной системы падает. Пользователи могут создавать также локальные БД на рабочих станциях.

Рис. 2.2. Схема работы с БД в архитектуре "Клиент-сервер"
Клиент-сервер. В этой архитектуре на выделенном сервере, работающем под управлением серверной операционной системы, устанавливается специальное программное обеспечение (ПО) - сервер БД, например, Microsoft®SQL Server™или Oracle. СУБД подразделяется на две части: клиентскую и серверную. Основа работы сервера БД - использование языка запросов (SQL). Запрос на языке SQL, передаваемый клиентом (рабочей станцией) серверу БД, порождает поиск и извлечение данных на сервере. Извлеченные данные транспортируются по сети от сервера к клиенту (см. рис. 2.2). Тем самым, количество передаваемой по сети информации уменьшается во много раз.
Трехуровневая архитектура функционирует в Интранет- и Интернет-сетях. Клиентская часть ("тонкий клиент"), взаимодействующая с пользователем, представляет собой HTML-страницу в Web-браузере либо Windows-приложение, взаимодействующее с Web-сервисами. Вся программная логика вынесена на сервер приложений, который обеспечивает формирование запросов к базе данных, передаваемых на выполнение серверу баз данных. Сервер приложений может быть Web-сервером или специализированной программой (например, Oracle Forms Server) (см. рис. 2.3).

Рис. 2.3. Схема работы с БД в трехуровневой архитектуре
Основные стратегии поддержания ссылочной целостности
Существуют две основные стратегии поддержания ссылочной целостности.RESTRICT (ОГРАНИЧИТЬ) - не разрешать выполнение операции, приводящей к нарушению ссылочной целостности.
CASCADE (КАСКАДНОЕ ИЗМЕНЕНИЕ) - разрешить выполнение требуемой операции, но внести при этом необходимые изменения в связанных таблицах так, чтобы не допустить нарушения ссылочной целостности и сохранить все имеющиеся связи. Изменение начинается в родительской таблице и каскадно выполняется в дочерних таблицах. В реализации этой стратегии имеется одна тонкость, заключающаяся в том, что дочерние таблицы сами могут быть родительскими для некоторых третьих таблиц. При этом может дополнительно потребоваться выполнение какой-либо стратегии и для этой связи и т.д. Если при этом какая-либо из каскадных операций (любого уровня) не может быть выполнена, то необходимо отказаться от первоначальной операции и вернуть базу данных в исходное состояние. Это сложная стратегия, но она не нарушает связей между родительскими и дочерними таблицами.
Эти стратегии являются стандартными и присутствуют во всех СУБД, в которых имеется поддержка ссылочной целостности.
Постреляционные базы данных
В настоящее время известны также так называемые "постреляционные" СУБД, в основе которых лежат модель данных в виде многомерных таблиц (например в системе Cache фирмы InterSystems Сorporation) и широкое использование принципов объектно-ориентированного подхода при организации баз данных и программировании.Распределенные базы данных
Основная задача систем управления распределенными базами данных состоит в обеспечении средства интеграции локальных баз данных, располагающихся в некоторых узлах вычислительной сети, с тем, чтобы пользователь, работающий в любом узле сети, имел доступ ко всем этим базам данных как к единой базе.Возможны однородные и неоднородные распределенные базы данных. В однородном случае каждая локальная база данных управляется одной и той же СУБД. В неоднородной системе локальные базы данных могут относиться даже к разным моделям данных. Сетевая интеграция неоднородных баз данных - очень сложная проблема. Многие решения известны на теоретическом уровне, но пока не удается справиться с главной проблемой: недостаточной эффективностью интегрированных систем. Более успешно решается промежуточная задача - интеграция неоднородных SQL-ориентированных систем. Этому в большой степени способствует стандартизация языка SQL.
Примером распределенной СУБД может служить System R*. В данной системе разработчики прикладных программ и конечные пользователи остаются в среде языка SQL. Возможность использования SQL основывается на обеспечении System R* прозрачности местоположения данных. Система автоматически обнаруживает текущее местоположение упоминаемых в запросе пользователя объектов данных; одна и та же прикладная программа, включающая предложения SQL, может быть выполнена в разных узлах сети. При этом в каждом узле сети на этапе компиляции запроса выбирается наиболее оптимальный план выполнения запроса в соответствии с расположением данных в распределенной системе.
Реляционные системы
Реляционные системы далеко не сразу получили широкое распространение. В то время как основные теоретические результаты в этой области были получены еще в 70-х годах и тогда же появились первые прототипы реляционных СУБД, долгое время считалось невозможным добиться эффективной реализации таких систем. Однако постепенное накопление методов и алгоритмов организации реляционных баз данных и управления ими привели к тому, что уже в середине 80-х годов реляционные системы практически вытеснили с мирового рынка ранние СУБД.Реляционная модель данных основывается на математических принципах, вытекающих непосредственно из теории множеств и логики предикатов. Эти принципы впервые были применены в области моделирования данных в конце 1960-х гг. доктором Е.Ф. Коддом, в то время работавшим в IBM, а впервые опубликованы - в 1970 г. [1].
Техническая статья "Реляционная модель данных для больших разделяемых банков данных" доктора Е.Ф. Кодда, опубликованная в 1970 г., является родоначальницей современной теории реляционных БД. Доктор Кодд определил 13 правил реляционной модели (которые называют 12 правилами Кодда).
Серверы баз данных
В локальных и глобальных компьютерных сетях широко применяются серверы: компьютеры и программные средства для обслуживания клиентов - рабочих станций и/или других серверов.Примерами серверов могут быть:
Термин "сервер баз данных" обычно используют для обозначения всей СУБД, основанной на архитектуре "клиент-сервер", включая и серверную, и клиентскую части. Наиболее распространенными серверами являются в настоящее время Microsoft SQL Server, Oracle, IBM DB2 Universal DataBase, Informix и др. Размер одной базы данных на этих серверах может достигать миллиона терабайт.
Сетевые базы данных
Сетевой подход к организации данных является расширением иерархического. В иерархических структурах запись-потомок должна иметь в точности одного предка; в сетевой структуре данных потомок может иметь любое число предков.В сетевой модели данных любой объект может быть одновременно и главным, и подчиненным, и может участвовать в образовании любого числа взаимосвязей с другими объектами. Сетевая БД состоит из набора записей и набора связей между этими записями, а если говорить более точно - из набора экземпляров каждого типа из заданного в схеме БД набора типов записи и набора экземпляров каждого типа из заданного набора типов связи (см. рис. 2.5).

Рис. 2.5. Схема сетевой модели
Типичным представителем является Integrated Database Management System (IDMS) компании Cullinet Software, Inc., предназначенная для использования на машинах основного класса фирмы IBM под управлением большинства операционных систем. Архитектура системы основана на предложениях Data Base Task Group (DBTG) Комитета по языкам программирования Conference on Data Systems Languages (CODASYL) - организации, ответственной за определение языка программирования Кобол. Отчет DBTG был опубликован в 1971 г., а позже появилось несколько систем, среди которых IDMS.
Соблюдение условий ссылочной целостности в реляционной базе данных
Правило соответствия внешних ключей первичным - основное правило соблюдения условий ссылочной целостности. Для каждого значения внешнего ключа должно существовать соответствующее значение первичного ключа в родительской таблицеСсылочная целостность может нарушиться в результате операций вставки (добавления), обновления и удаления записей в таблицах. В определении ссылочной целостности участвуют две таблицы - родительская и дочерняя, для каждой из них возможны эти операции, поэтому существует шесть различных вариантов, которые могут привести либо не привести к нарушению ссылочной целостности.
Для родительской таблицы:
Для дочерней таблицы:
Таким образом, ссылочная целостность в принципе может быть нарушена при выполнении одной из четырех операций:
Использование методологии IDEF1X для разработки концептуальной модели данных
Важнейшая цель проектирования информационной модели - выработка непротиворечивой структурированной интерпретации реально существующей информации изучаемой предметной области и взаимодействия между ее структурными компонентамиПонятие концептуальной модели данных связано с методологией семантического моделирования данных, т.е. с представлением данных в контексте их взаимосвязей с другими данными.
Методология IDEF1X - один из подходов к семантическому моделированию данных, основанный на концепции "сущность-связь" (Entity-Relationship). Это инструмент для анализа информационной структуры систем различной природы. Информационная модель, построенная с помощью IDEF1X-методологии, отображает логическую структуру информации об объектах системы
Таким образом, концептуальная модель, представленная в соответствии со стандартом IDEF1X, является логической схемой базы данных для проектируемой системы
Основными объектами концептуальной модели являются сущности и связи.
Сущность - некоторый обособленный объект или событие моделируемой системы, имеющий определенный набор свойств - атрибутов. Отдельный элемент этого множества называется "экземпляром сущности". Сущность может обладать одним или несколькими атрибутами, которые однозначно идентифицируют каждый образец сущности, и может обладать любым количеством связей с другими сущностями.
Правила для атрибутов сущности:
Сущность изображается на ER-диаграмме в виде прямоугольника, в верхней части которого приводится ее название; далее следует список атрибутов. Ключевые атрибуты могут быть выделены подчеркиванием или иным способом.
Стандарт IDEF1X описывает способы изображения двух типов сущностей - независимой и зависимой, и связей - идентифицирующих и неидентифицирующих (см. рис. 3.1).

увеличить изображение
Рис. 3.1. Изображение сущностей и связей по стандарту IDEF1X
Каждая сущность может обладать любым количеством связей с другими сущностями.
Сущность является независимой, если каждый ее экземпляр может быть однозначно идентифицирован без определения его связей с другими сущностями.
Сущность называется зависимой, если однозначная идентификация ее экземпляра зависит от его связей с другими сущностями.
Сущность может обладать атрибутами, которые наследуются через связь с родительской сущностью. Последние обычно являются внешними ключами (FK на рис. 3.1) и служат для организации связей между сущностями. Если внешний ключ сущности используется в качестве ее первичного ключа (PK) или как часть составного первичного ключа, то сущность является зависимой от родительской сущности. Если внешний ключ не является первичным и не входит в составной первичный ключ, то сущность является независимой от родительской сущности.
Если сущность является зависимой, то связь ее с родительской сущностью называется идентифицирующей, в противном случае - неидентифицирующей.
Связь изображается на ER-диаграмме линией, проводимой между сущностью-родителем и сущностью-потомком с точкой на конце линии у сущности-потомка. идентифицирующая связь изображается сплошной линией, неидентифицирующая - пунктирной.
Связи дается имя, выражаемое грамматической формой глагола. Для связи дополнительно может присутствовать указание мощности: какое количество экземпляров сущности-потомка может существовать для сущности-родителя. Имя связи всегда формируется с точки зрения родителя, так что может быть образовано предложение, если соединить имя сущности родителя, имя связи, выражение мощности и имя сущности-потомка (например "много СТУДЕНТов - сдают - ЭКЗАМЕН").
Принципы изображения концептуальных моделей баз данных стандарта IDEF1 и IDEF1X используют CASE Studio и другие CASE-средства.Подобные системы позволяют на основе концептуальной модели генерировать физическую модель и программный код создания базы данных для большинства наиболее распространенных СУБД и серверов баз данных.
В рассматриваемом далее примере концептуальной модели (см. рис. рис. 3.5) все сущности - независимые и связи между ними - неидентифицирующие, хотя возможны и другие варианты ключей и связей.
Использование системы CASE Studio для проектирования концептуальной и физической моделей базы данных
CASE Studio является профессиональным инструментом проектирования баз данных. Система предназначена для визуального создания и модификации диаграмм "сущность-связь" (ERD) и диаграмм потоков данных (DFD). Уровень представления ER-диаграмм может быть различен: от простейшего вида (имена сущностей и связи между ними) и до полной физической модели для выбранной СУБД. Сложные модели данных могут быть разбиты на отдельные логические фрагменты - субмодели.Для разработанных диаграмм далее может быть сгенерирован программный код для создания таблиц, индексов, связей, хранимых процедур, пользователей и других компонентов различных СУБД (см. табл. 3.7.). Кроме того, предусмотрена возможность генерации ER-диаграмм для существующей базы данных (Reverse Engineering) с использованием для связи с БД прямого соединения, ODBC или ADO-драйверов.
При создании новой модели данных следует задать, для какой СУБД она проектируется, т.к. CASE Studio имеет возможность построения полной физической модели базы данных с использованием индивидуальных свойств каждой БД - типы и свойства атрибутов (стандартные БД и пользователя), возможности описания ключей (первичные и внешние), связей, условий соблюдения ссылочной целостности, пользователей и их групп (ролей); возможности написания хранимых процедур и пр. В последующем можно будет выполнить конверсию физической модели для другой СУБД (меню Model - Database Convertion) с сохранением в виде копии.
Создание новой модели может начинаться с задания только имен сущностей и связей между ними, как показано на рис. 3.2, который соответствует описанному выше примеру. Связи (неидентифицирующего типа) следует создавать в направлении от предполагаемого первичного ключа к внешнему. Для всех связей в модели заданы условия соблюдения ссылочной целостности: каскадные изменения при изменении и удалении данных в главной таблице и контроль с запретом неверного ввода (restrict) в операциях обновления и добавления данных в дочерних таблицах (см. рис. 3.3).

увеличить изображение
Рис. 3.2. Простейший вид ER-диаграммы в системе CASE Studio
Далее для каждой сущности в окне свойств (рис. рис. 3.4) можно задать название соответствующей ей таблицы в физической модели, названия атрибутов концептуальной модели и полей физической модели с указанием их типа, размера, с заданием ключей, надписей (Notes), описаний и пр. Следует отметить, что для описания полей физической модели необходимо знать типы данных той СУБД, для которой она разрабатывается. В последующем будут разобраны типы данных полей в системах Visual FoxPro, Microsoft Access и Microsoft SQL Server.

Рис. 3.3. Окно описания свойств связи

Рис. 3.4. Окно описания свойств сущности и таблицы
После описания всех атрибутов и полей может быть использована различная детализация показа концептуальной (в меню View - Display Level, см. рис. 3.5) и физической (в меню View нужно поставить галочку у позиции Physical View) моделей.

Рис. 3.5. Меню задания режима показа модели
На рис. 3.6 показана концептуальная модель для описанного выше примера, на рис. рис. 3.7 - физическая модель для СУБД Oracle 9i.

увеличить изображение
Рис. 3.6. Концептуальная модель базы данных

увеличить изображение
Рис. 3.7. Физическая модель базы данных
Далее можно описать права групп пользователей и права отдельных пользователей (меню системы пункт Model - Users Roles и Model - Users), если эту информацию нужно использовать при создании базы данных.
На основе описания физической модели был сгенерирован текст программ для создания базы данных в СУБД Oracle (в меню системы пункт Model - Script Generation) и, после конвертации модели, - для Microsoft Access.
Концептуальная модель базы данных
На концептуальном уровне данные информационной системы состоят из двух основных сущностей: "Студент" и "Успеваемость".Минимальный состав атрибутов и их описание для сущности "Студент" представлены в табл. 3.1.
| Номер зачетки | Первичный ключ - уникальный номер, однозначно идентифицирующий студента университета |
| Фамилия, имя, отчество | Является простым с точки зрения экземпляра сущности, при необходимости из общего поля можно выделить составляющие его фамилию, имя и отчество или фамилию и инициалы, однако на практике часто этот атрибут разделяют на 3 отдельных; первый вариант является более экономичным по необходимой общей ширине поля таблицы |
| Дата поступления в университет | В нашей стране наиболее часто используется формат работы с датой в виде ДД.ММ.ГГ, что совпадает с немецким (German) форматом дат. Количество цифр года: либо две - для новых систем, поддерживающих заданный в Microsoft Windows годичный интервал (Панель управления - Язык и стандарты - Дата - "При вводе двух цифр года воспринимать их как год между:"), или для систем, в которых аналогичный интервал может быть задан в программе, - либо 4 цифры |
| Факультет (№ факультета) | Может быть сложным (кроме кода и названия, может содержать и другие сведения); даже в том случае, если для сущности "Студент" мы хотим сохранять название факультета, оно должно быть представлено в одинаковом виде для каждого факультета, поэтому, в соответствии с принципами нормализации баз данных, этот атрибут следует представить в виде номера, являющегося внешним ключом для новой сущности - "Факультет", в которой каждому номеру, являющемуся первичным ключом, будут соответствовать название и прочие атрибуты этой сущности |
| Специальность(код специальности) | Может быть сложным, кроме того, необходимо использовать справочник министерства с утвержденными кодами специальностей, поэтому данный атрибут должен хранить код специальности - внешний ключ для первичного ключа новой сущности "Специальность" |
| Курс | Число от 1 до 5 |
| Номер группы | Трехзначное число |
| Номер паспорта | Состав и вид паспортных данных определяется требованиями бухгалтерской отчетности перед налоговыми органами, фондами социального страхования и пенсионным фондом |
| ... | Прочие атрибуты, которых может быть достаточно много |
В табл. 3.2-3.5 представлены атрибуты сущностей "Успеваемость", "Факультет", "Специальность", "Предмет".
| Номер зачетки | Внешний ключ (к сущности "Студент") |
| Номер семестра | Число от 1 до 10 |
| Предмет (№ предмета) | Может быть сложным, его следует заменить на его номер (внешний ключ) и связать с новой сущностью "Предмет", состоящий, как минимум, из атрибутов "номер предмета" (первичный ключ) и "название предмета" |
| Оценка | Может быть представлена цифрами от 0 до 5 или 1 буквой: например "н" - неявка |
| Дата получения оценки | Формат даты обычно ДД.ММ.ГГ |
| Фамилия преподавателя | Это поле может быть связано с сущностью "Преподаватель". В данном учебном примере ограничимся простым атрибутом |
| ... | Могут быть добавлены и другие атрибуты, например, номер экзаменационной ведомости |
| Номер факультета | Первичный ключ |
| Название факультета | Может быть достаточно длинным, но не более 255 символов |
| ... | Могут быть добавлены и другие атрибуты, например, декан, номер комнаты деканата и т.д. |
| Код специальности | Первичный ключ - значение из справочника министерства |
| Название специальности | Значение из справочника министерства |
| ... | Могут быть добавлены и другие атрибуты |
| № предмета | Первичный ключ |
| Название предмета | Общий справочник университета |
| ... | Могут быть добавлены и другие атрибуты |
Состав данных и связи в концептуальной и физической моделях показаны в табл. 3.6 и табл. 3.7.
| № п/п | Сущности концептуальной модели | Таблицы физической модели | |
| Название | Информация | ||
| 1. | "Студент" | "SPISOK" | "Список студентов" |
| 2. | "Успеваемость" | "OCENKI" | "Оценки студентов" |
| 3. | "Факультет" | "FCLT" | Справочник факультетов |
| 4. | "Специальность" | "SPECT" | Справочник специальностей |
| 5. | "Предмет" | "PREDMET" | Справочник предметов |
| 1. | "Студент" - "Успеваемость" | "SPISOK" - "OCENKI" |
| 2. | "Студент" - "Факультет" | "SPISOK" - "FCLT" |
| 3. | "Студент" - "Специальность" | "SPISOK" - "SPECT" |
| 4. | "Успеваемость" - "Предмет" | "OCENKI" - "PREDMET" |
Описание модели данных информационной системы "Контингент студентов университета"
Первоначальный этап - создание текстового описания моделируемой системы.Постановка задачи. Главная задача системы - сохранение в базе данных всех необходимых сведений о студентах и их успеваемости, формирование необходимых печатных форм для проведения зачетной и экзаменационной работы преподавателей, генерация сводных итогов по результатам сессии для руководящих работников деканатов, институтов и университета. При разработке системы следует учитывать, что она взаимодействует с системами "Абитуриент", "Стипендия" и "Кадры университета". Информация о студентах первоначально поступает из системы "Абитуриент" и редактируется на уровне деканатов. Она должна также удовлетворять требованиям бухгалтерского учета по начислению стипендий. Система должна использовать справочник специальностей, утвержденный в вышестоящем министерстве. Информация об успеваемости студентов накапливается постоянно и сохраняется за весь период обучения, после чего переносится в архивное хранилище данных. В системе должен использоваться единый справочник дисциплин (предметов) для всех подразделений университета.
Сгенерированная Case Studio программа создания таблиц базы данных для СУБД Access
' Created 02.02.2006 ' Modified 03.02.2006 ' Project Kontingent ' Model Students ' Company AGTU ' Author Groshev ' Version 2006.1 ' Database Access 2000 '======================================================= '=== MS Access 2000 database creation method '=== '=== 1. Create a new database in the MS Access 2000 '=== 2. Create a new module '=== 3. Copy the CASE Studio 2 output SQL script into the new MS Access 2000 module '=== 4. Select from main menu "Tools" item "References..." and check '=== the "Microsoft DAO 3.6 Object Library." '=== 5. Place your mouse cursor somewhere in the main procedure Main() '=== 6. Run the module code (Click the "Run Sub/UserForm" button or press F5) '======================================================= Public dbs As DAO.Database Public tdf As DAO.TableDef Public idx As DAO.Index Public rel As DAO.Relation Sub Main() Set dbs = CurrentDb() On Error GoTo ErrorHandler Call CreateTables Call CreatePrimaryKeys Call CreateIndexes Call CreateAlterKeys Call CreateRelations Call CreateQueries MsgBox "Script successfully processed.", vbInformation Exit Sub ErrorHandler: Select Case Err.Number Case 3010 MsgBox "Table " & tdf.Name & " allready exist!", vbInformation Err.Clear Case 3284 MsgBox "Index " & idx.Name & " for table " & tdf.Name & " allready exist!", vbInformation Err.Clear Case Else MsgBox Err.Description, vbCritical End Select End Sub ' Create tables '=============== Sub CreateTables() Call CreateTable1 'Student Call CreateTable2 'Ocenki Call CreateTable3 'Predmet Call CreateTable4 'FCLT Call CreateTable5 'SPECT End Sub '=== Create table Student ====== Sub CreateTable1() Set tdf = dbs.CreateTableDef( "Student" ) Call AddFieldToTable("Nz", dbText, 7, 0, "", "", "", TRUE ) Call AddFieldToTable("Fio", dbText, 45, 0, "", "", "", FALSE ) Call AddFieldToTable("date_p", dbDate, 0, 0, "", "", "", FALSE ) Call AddFieldToTable("n_fclt", dbSingle, 0, 0, "", "", "", TRUE ) Call AddFieldToTable("n_spect", dbText, 9, 0, "", "", "", TRUE ) Call AddFieldToTable("kurs", dbSingle, 0, 0, "", "", "", FALSE ) Call AddFieldToTable("n_grup", dbText, 10, 0, "", "", "", FALSE ) Call AddFieldToTable("n_pasp", dbText, 10, 0, "", "", "", FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Ocenki ====== Sub CreateTable2() Set tdf = dbs.CreateTableDef( "Ocenki" ) Call AddFieldToTable("semestr", dbSingle, 0, 0, "", "", "", FALSE ) Call AddFieldToTable("n_predm", dbSingle, 0, 0, "", "", "", TRUE ) Call AddFieldToTable("ball", dbText, 1, 0, "", "", "", FALSE ) Call AddFieldToTable("data_b", dbDate, 0, 0, "", "", "", FALSE ) Call AddFieldToTable("Prepod", dbText, 45, 0, "", "", "", FALSE ) Call AddFieldToTable("Nz", dbText, 7, 0, "", "", "", TRUE ) dbs.TableDefs.Append tdf End Sub '=== Create table Predmet ====== Sub CreateTable3() Set tdf = dbs.CreateTableDef( "Predmet" ) Call AddFieldToTable("n_predm", dbSingle, 0, 0, "", "", "", TRUE ) Call AddFieldToTable("name_p", dbText, 120, 0, "", "", "", FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table FCLT ====== Sub CreateTable4() Set tdf = dbs.CreateTableDef( "FCLT" ) Call AddFieldToTable("n_fclt", dbSingle, 0, 0, "", "", "", TRUE ) Call AddFieldToTable("name_f", dbText, 120, 0, "", "", "", FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table SPECT ====== Sub CreateTable5() Set tdf = dbs.CreateTableDef( "SPECT" ) Call AddFieldToTable("n_spect", dbText, 9, 0, "", "", "", TRUE ) Call AddFieldToTable("name_S", dbText, 120, 0, "", "", "", FALSE ) dbs.TableDefs.Append tdf End Sub ' Create primary keys '===================== Sub CreatePrimaryKeys() '=== Create primary key for table Student ====== Set tdf = dbs.TableDefs( "Student" ) Set idx = tdf.CreateIndex( "pk_Student" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "Nz", False ) tdf.Indexes.Append idx '=== Create primary key for table Predmet ====== Set tdf = dbs.TableDefs( "Predmet" ) Set idx = tdf.CreateIndex( "pk_Predmet" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "n_predm", False ) tdf.Indexes.Append idx '=== Create primary key for table FCLT ====== Set tdf = dbs.TableDefs( "FCLT" ) Set idx = tdf.CreateIndex( "pk_FCLT" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "n_fclt", False ) tdf.Indexes.Append idx '=== Create primary key for table SPECT ====== Set tdf = dbs.TableDefs( "SPECT" ) Set idx = tdf.CreateIndex( "pk_SPECT" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "n_spect", False ) tdf.Indexes.Append idx End Sub ' Create indexes '================ Sub CreateIndexes() End Sub ' Create alter keys (unique indexes in MS ACCESS) '================================================ Sub CreateAlterKeys() End Sub ' Create relations '================== Sub CreateRelations() '=== Create relations between parent table Student and child table Ocenki ====== Set rel = dbs.CreateRelation("Student_Ocenki") rel.Table = "Student" rel.ForeignTable = "Ocenki" rel.Attributes = dbRelationUpdateCascade+dbRelationDeleteCascade Call AddFieldToRelation("Nz", "Nz") dbs.Relations.Append rel '=== Create relations between parent table Predmet and child table Ocenki ====== Set rel = dbs.CreateRelation("Predmet_Ocenki") rel.Table = "Predmet" rel.ForeignTable = "Ocenki" rel.Attributes = dbRelationUpdateCascade+dbRelationDeleteCascade Call AddFieldToRelation("n_predm", "n_predm") dbs.Relations.Append rel '=== Create relations between parent table FCLT and child table Student ====== Set rel = dbs.CreateRelation("FCLT_Student") rel.Table = "FCLT" rel.ForeignTable = "Student" rel.Attributes = dbRelationUpdateCascade+dbRelationDeleteCascade Call AddFieldToRelation("n_fclt", "n_fclt") dbs.Relations.Append rel '=== Create relations between parent table SPECT and child table Student ====== Set rel = dbs.CreateRelation("SPECT_Student") rel.Table = "SPECT" rel.ForeignTable = "Student" rel.Attributes = dbRelationUpdateCascade+dbRelationDeleteCascade Call AddFieldToRelation("n_spect", "n_spect") dbs.Relations.Append rel End Sub ' Create queries '================ Sub CreateQueries() Dim qdf As QueryDef End Sub ' Add fields to table '===================== Sub AddFieldToTable(FieldName As String, DataType As String, SizeCol As Integer, Attributes As Long, DefaultValue As Variant, ValText As String, ValRule As String, NotN As Boolean) Dim fld As DAO.Field Set fld = tdf.CreateField( FieldName, DataType ) If SizeCol <> 0 Then fld.Size = SizeCol If Attributes <> 0 Then fld.Attributes = Attributes fld.Required = NotN fld.DefaultValue = DefaultValue fld.ValidationRule = ValRule fld.ValidationText = ValText tdf.Fields.Append fld End Sub ' Add properties to table '========================= Sub AddPropertyToTable( PropertyName As String, Value As Variant, DataType As String) Dim prp As DAO.Property Set prp = tdf.CreateProperty(PropertyName, DataType, Value) tdf.Properties.Append prp End Sub ' Add properties to field '========================= Sub AddPropertyToField(FieldName As String, PropertyName As String, Value As Variant, DataType As String) Dim prp As DAO.Property Dim fld As DAO.Field Set fld = tdf.Fields( FieldName ) Set prp = fld.CreateProperty(PropertyName, DataType, Value) fld.Properties.Append prp End Sub ' Add fields to index '===================== Sub AddFieldToIndex( FieldName As String, Descending As Boolean ) Dim fld As DAO.Field Set fld = idx.CreateField( FieldName ) If Descending = True Then fld.Attributes = dbDescending idx.Fields.Append fld End Sub ' Add fields to relation '======================== Sub AddFieldToRelation( PKField As String, FKField As String ) Dim fld As DAO.Field Set fld = rel.CreateField( PKField ) fld.ForeignName = FKField rel.Fields.Append fld End SubСгенерированная Case Studio SQL-программа создания таблиц базы данных для сервера Oracle
/* Created 02.02.2006 Modified 03.02.2006 Project Kontingent Model Students Company AGTU Author Groshev Version 2006.1 Database Oracle 9i */ Create table "Student" ( "Nz" Char(7) NOT NULL , "Fio" Char(45), "date_p" Date, "n_fclt" Decimal(2,0) NOT NULL , "n_spect" Char(9) NOT NULL , "kurs" Decimal(1,0), "n_grup" Char(10), "n_pasp" Char(10)) / Create table "Ocenki" ( "semestr" Decimal(2,0), "n_predm" Decimal(2,0) NOT NULL , "ball" Char(1), "data_b" Date, "Prepod" Char(45), "Nz" Char(7) NOT NULL ) / Create table "Predmet" ( "n_predm" Decimal(2,0) NOT NULL , "name_p" Char(120)) / Create table "FCLT" ( "n_fclt" Decimal(2,0) NOT NULL , "name_f" Char(120)) / Create table "SPECT" ( "n_spect" Char(9) NOT NULL , "name_S" Char(120)) / Alter table "Student" add primary key ("Nz") / Alter table "Predmet" add primary key ("n_predm") / Alter table "FCLT" add primary key ("n_fclt") / Alter table "SPECT" add primary key ("n_spect") / Alter table "Ocenki" add foreign key ("Nz") references "Student" ("Nz") on delete cascade / Alter table "Ocenki" add foreign key ("n_predm") references "Predmet" ("n_predm") on delete cascade / Alter table "Student" add foreign key ("n_fclt") references "FCLT" ("n_fclt") on delete cascade / Alter table "Student" add foreign key ("n_spect") references "SPECT" ("n_spect") on delete cascade / -- Update trigger for Student Create Trigger "tu_Student" after update of "Nz","n_fclt","n_spect" on "Student" referencing new as new_upd old as old_upd for each row declare numrows integer; begin -- cascade child Ocenki update when parent Student changed if (:old_upd."Nz" != :new_upd."Nz") then begin update "Ocenki" set "Nz" = :new_upd."Nz" where "Ocenki"."Nz" = :old_upd."Nz" ; end; end if; -- restrict parent SPECT when child Student updated if :new_upd."n_spect" != :old_upd."n_spect" then begin select count( * ) into numrows from "SPECT" where :new_upd."n_spect" = "SPECT"."n_spect"; if ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist.Cannot update child.'); end; end if; end; end if; -- restrict parent FCLT when child Student updated if :new_upd."n_fclt" != :old_upd."n_fclt" then begin select count( * ) into numrows from "FCLT" where :new_upd."n_fclt" = "FCLT"."n_fclt"; if ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist. Cannot update child.'); end; end if; end; end if;
end; / -- Update trigger for Ocenki Create Trigger "tu_Ocenki" after update of "n_predm","Nz" on "Ocenki" referencing new as new_upd old as old_upd for each row declare numrows integer; begin -- restrict parent Predmet when child Ocenki updated if :new_upd."n_predm" != :old_upd."n_predm" then begin select count( * ) into numrows from "Predmet" where :new_upd."n_predm" = "Predmet"."n_predm"; if ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist. Cannot update child.'); end; end if; end; end if; -- restrict parent Student when child Ocenki updated if :new_upd."Nz" != :old_upd."Nz" then begin select count( * ) into numrows from "Student" where :new_upd."Nz" = "Student"."Nz"; if ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist. Cannot update child.'); end; end if; end; end if;
end; / -- Update trigger for Predmet Create Trigger "tu_Predmet" after update of "n_predm" on "Predmet" referencing new as new_upd old as old_upd for each row declare numrows integer; begin -- cascade child Ocenki update when parent Predmet changed if (:old_upd."n_predm" != :new_upd."n_predm") then begin update "Ocenki" set "n_predm" = :new_upd."n_predm" where "Ocenki"."n_predm" = :old_upd."n_predm" ; end; end if; end; / -- Update trigger for FCLT Create Trigger "tu_FCLT" after update of "n_fclt" on "FCLT" referencing new as new_upd old as old_upd for each row declare numrows integer; begin -- cascade child Student update when parent FCLT changed if (:old_upd."n_fclt" != :new_upd."n_fclt") then begin update "Student" set "n_fclt" = :new_upd."n_fclt" where "Student"."n_fclt" = :old_upd."n_fclt" ; end; end if; end; / -- Update trigger for SPECT Create Trigger "tu_SPECT" after update of "n_spect" on "SPECT" referencing new as new_upd old as old_upd for each row declare numrows integer; begin -- cascade child Student update when parent SPECT changed if (:old_upd."n_spect" != :new_upd."n_spect") then begin update "Student" set "n_spect" = :new_upd."n_spect" where "Student"."n_spect" = :old_upd."n_spect" ; end; end if; end; / -- Insert trigger for Student Create Trigger "ti_Student" after insert on "Student" referencing new as new_ins for each row declare numrows integer; begin -- restrict child Student when parent SPECT insert if (:new_ins."n_spect" is not null) then begin select count( * ) into numrows from "SPECT" where :new_ins."n_spect" = "SPECT"."n_spect"; IF ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist.
Cannot insert child.'); end; end if; end; end if; -- restrict child Student when parent FCLT insert if (:new_ins."n_fclt" is not null) then begin select count( * ) into numrows from "FCLT" where :new_ins."n_fclt" = "FCLT"."n_fclt";
IF ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist. Cannot insert child.'); end; end if; end; end if; end; / -- Insert trigger for Ocenki Create Trigger "ti_Ocenki" after insert on "Ocenki" referencing new as new_ins for each row declare numrows integer; begin -- restrict child Ocenki when parent Predmet insert if (:new_ins."n_predm" is not null) then begin select count( * ) into numrows from "Predmet" where :new_ins."n_predm" = "Predmet"."n_predm"; IF ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist. Cannot insert child.'); end; end if; end; end if; -- restrict child Ocenki when parent Student insert if (:new_ins."Nz" is not null) then begin select count( * ) into numrows from "Student" where :new_ins."Nz" = "Student"."Nz"; IF ( numrows = 0 ) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist. Cannot insert child.'); end; end if; end; end if; end; / Create role "Stud_admin" / Create role "Dekan" / Grant "Stud_admin" to "Petrov_P_P" / Grant "Dekan" to "Иванов_И_И" / /* Roles permissions */ Grant select on "Student" to "Stud_admin" / Grant update on "Student" to "Stud_admin" / Grant delete on "Student" to "Stud_admin" / Grant insert on "Student" to "Stud_admin" / Grant references on "Student" to "Stud_admin" / Grant select on "Student" to "Dekan" / Grant update on "Student" to "Dekan" / Grant delete on "Student" to "Dekan" / Grant insert on "Student" to "Dekan" / Grant references on "Student" to "Dekan" / Grant select on "Ocenki" to "Stud_admin" / Grant update on "Ocenki" to "Stud_admin" / Grant delete on "Ocenki" to "Stud_admin" / Grant insert on "Ocenki" to "Stud_admin" / Grant references on "Ocenki" to "Stud_admin" / Grant select on "Ocenki" to "Dekan" / Grant update on "Ocenki" to "Dekan" / Grant delete on "Ocenki" to "Dekan" / Grant insert on "Ocenki" to "Dekan" / Grant references on "Ocenki" to "Dekan" / Grant select on "Predmet" to "Stud_admin" / Grant update on "Predmet" to "Stud_admin" / Grant delete on "Predmet" to "Stud_admin" / Grant insert on "Predmet" to "Stud_admin" / Grant references on "Predmet" to "Stud_admin" / Grant select on "FCLT" to "Stud_admin" / Grant update on "FCLT" to "Stud_admin" / Grant delete on "FCLT" to "Stud_admin" / Grant insert on "FCLT" to "Stud_admin" / Grant references on "FCLT" to "Stud_admin" / Grant select on "SPECT" to "Stud_admin" / Grant update on "SPECT" to "Stud_admin" / Grant delete on "SPECT" to "Stud_admin" / Grant insert on "SPECT" to "Stud_admin" / Grant references on "SPECT" to "Stud_admin" / /* Users permissions */
Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
В системе VFP существует два основных режима работы с таблицами (и, соответственно, команды языка этой системы): Browse - табличный формат и Edit - форма с построчным расположением полей.Существует много разных способов открыть окно таблицы базы данных для редактирования в одном из этих режимов, в том числе:
После вариантов 1-4 в окне Command мы увидим 2 или 3 команды (вторая может отсутствовать), например, для табл. 4.4, следующие:
USE c:\asg\students\fclt.dbf IN 0 EXCLUSIVE - открыть таблицу в первой свободной рабочей зоне с алиасом (псевдонимом) FCLT эксклюзивно;
SELECT FCLT - выбрать рабочую зону с алиасом FCLT;
BROWSE LAST - показать на экране таблицу в той же конфигурации, как ранее (если в структуре таблицы добавлены новые поля или ранее был задан показ не всех полей, а нужно показать все, следует написать команду BROWSE NORMAL).
В результате будет открыто окно таблицы базы данных (рис. 4.12), изменится пункт главного меню View (Вид) - в нем появятся пункты Browse и Edit для переключения режимов, кроме того, пункт Append mode - режим автоматического добавления записей в таблицу (возможен только при работе с таблицами из системы VFP, в программном режиме для добавления записей служат команды APPEND: и INSERT:).
В системе VFP существует два основных режима работы с таблицами (и, соответственно, команды языка этой системы): Browse - табличный формат и Edit - форма с построчным расположением полей.
Существует много разных способов открыть окно таблицы базы данных для редактирования в одном из этих режимов, в том числе:
После вариантов 1-4 в окне Command мы увидим 2 или 3 команды (вторая может отсутствовать), например, для табл. 4.4, следующие:
USE c:\asg\students\fclt.dbf IN 0 EXCLUSIVE - открыть таблицу в первой свободной рабочей зоне с алиасом (псевдонимом) FCLT эксклюзивно;
SELECT FCLT - выбрать рабочую зону с алиасом FCLT;
BROWSE LAST - показать на экране таблицу в той же конфигурации, как ранее (если в структуре таблицы добавлены новые поля или ранее был задан показ не всех полей, а нужно показать все, следует написать команду BROWSE NORMAL).
В результате будет открыто окно таблицы базы данных (рис. 4.12), изменится пункт главного меню View (Вид) - в нем появятся пункты Browse и Edit для переключения режимов, кроме того, пункт Append mode - режим автоматического добавления записей в таблицу (возможен только при работе с таблицами из системы VFP, в программном режиме для добавления записей служат команды APPEND: и INSERT:).

Рис. 4.12. Стандартный режим Browse работы с таблицей
Выбрав режимы Browse и Append mode (в меню у этих пунктов появится галочка), мы сможем занести новые записи в таблицы нашей базы.
Окно Browse имеет очень много возможностей, которые используются при программировании (см. полный синтаксис команды Browse в приложении). Поля таблиц на экране можно менять местами, изменять их ширину и пр. В диалоговом режиме VFP по умолчанию выполняется команда Browse Last - открыть окно в той конфигурации, в которой оно было открыто в предыдущий раз. Если вы при модификации структуры таблицы добавили в нее новое поле, оно может не появиться на экране. В этом случае нужно написать в окне Command команду Browse или Browse normal.
Окно Browse можно разделить на 2 части. Одна из них может быть в режиме Browse, другая - Edit, что удобно при работе с таблицами, имеющими большое количество полей. Можно изменять расположение и ширину полей.
Назначение узкой белой колонки слева от полей таблицы - пометить запись для удаления. Помеченная запись может быть видна с черной отметкой в этой колонке (set delete off) или не видна и как бы отсутствует (set delete on). Помеченные записи можно удалить из файла таблицы (командой Pack), но эта операция связана с переписыванием информации из одного файла в другой, может выполняться только в эксклюзивном режиме открытия таблицы, поэтому выполняется нечасто и обычно не простым пользователем, а администратором базы или программистом.
Режим Edit для той же таблицы показан на рис. 4.13.
В таблице 3-я запись помечена для удаления. Отметку легко снять, повторно щелкнув по черной полоске слева от записи. Она видна, если параметр системы SET DELETED имеет значение OFF.

Рис. 4.13. Стандартный режим Edit работы с таблицей

Рис. 4.14. Стандартный режим с разделением окна на 2 части
Возможен показ таблицы с разделением ее на 2 части, одна из которых будет в режиме Browse, другая - в режиме Edit (рис. 4.14).
Режим сохранения добавленных, измененных и удаленных данных зависит от того, используется или нет буферизация данных. Изменить режим можно в свойствах рабочей зоны (Properties для выбранной таблицы в меню или в окне Data Session), окно описания свойств показано на рис. 4.15

Рис. 4.15. Окно свойств рабочей зоны, в которой открыта таблица Fclt.dbf
Если режим буферизации не задан, сохранение информации происходит сразу при выходе из поля редактирования или закрытии таблицы.
В режиме буферизации изменения заносятся в таблицу только в том случае, если перед ее закрытием дана команда =TABLEUPDATE(.T.).
Буферизация бывает оптимистическая (Lock records when written) и пессимистическая (Lock records when edited), на уровне одной записи (Buffer current record) или многих (Buffer all edited records).
Правильное использование режимов буферизации имеет большое значение при многопользовательском режиме работы с одной таблицей базы данных. В режиме оптимистической буферизации сразу несколько пользователей могут редактировать одни и те же записи и поля. В VFP имеются специальные механизмы разрешения конфликтов сохранения данных, которые могут возникать в этом случае.
Более подробные сведения о многопользовательской работе и использовании режимов буферизации можно найти в справочной системе VFP.
Особенность VFP при показе в стандартных режимах двух таблиц, между которыми установлена связь: в дочерней таблице система показывает только те записи, внешний ключ которых соответствует значению первичного ключа главной таблицы (см. рис. 4.16).

Рис. 4.16. Работа с таблицами, между которыми установлена связь
Для разрабатываемой информационной системы следует занести в стандартном режиме работы с таблицами информацию в справочники - таблицы табл. 4.4, табл. 4.5 и табл. 4.7. Список студентов и список их оценок лучше заполнять с использованием экранной формы, которая будет создана далее.


Рис. 4.12. Стандартный режим Browse работы с таблицей
Выбрав режимы Browse и Append mode (в меню у этих пунктов появится галочка), мы сможем занести новые записи в таблицы нашей базы.
Окно Browse имеет очень много возможностей, которые используются при программировании (см. полный синтаксис команды Browse в приложении). Поля таблиц на экране можно менять местами, изменять их ширину и пр. В диалоговом режиме VFP по умолчанию выполняется команда Browse Last - открыть окно в той конфигурации, в которой оно было открыто в предыдущий раз. Если вы при модификации структуры таблицы добавили в нее новое поле, оно может не появиться на экране. В этом случае нужно написать в окне Command команду Browse или Browse normal.
Окно Browse можно разделить на 2 части. Одна из них может быть в режиме Browse, другая - Edit, что удобно при работе с таблицами, имеющими большое количество полей. Можно изменять расположение и ширину полей.
Назначение узкой белой колонки слева от полей таблицы - пометить запись для удаления. Помеченная запись может быть видна с черной отметкой в этой колонке (set delete off) или не видна и как бы отсутствует (set delete on). Помеченные записи можно удалить из файла таблицы (командой Pack), но эта операция связана с переписыванием информации из одного файла в другой, может выполняться только в эксклюзивном режиме открытия таблицы, поэтому выполняется нечасто и обычно не простым пользователем, а администратором базы или программистом.
Режим Edit для той же таблицы показан на рис. 4.13.
В таблице 3-я запись помечена для удаления. Отметку легко снять, повторно щелкнув по черной полоске слева от записи. Она видна, если параметр системы SET DELETED имеет значение OFF.

Рис. 4.13. Стандартный режим Edit работы с таблицей

Рис. 4.14. Стандартный режим с разделением окна на 2 части
Возможен показ таблицы с разделением ее на 2 части, одна из которых будет в режиме Browse, другая - в режиме Edit (рис. 4.14).
Настройка системы
Перед использованием системы VFP необходимо выполнить некоторые настройки для удобства использования. Для этого в меню Tools следует вызвать команду Options, после чего появится многостраничная экранная форма для задания параметров настройки с аналогичным названием (рис. 4.1).
Рис. 4.1. Окно настройки параметров системы Visual FoxPro
Наиболее существенными являются настройки:
Все заданные параметры будут сохранены в файле foxuser.dbf, если будет нажата кнопка Set As Default.
Еще один файл, который связан с настройкой системы, - Config.fpw. Это текстовый файл, в котором можно записать некоторые команды конфигурирования системы (например, codepage = auto, date = german, screen = off и пр.). Он выполняется автоматически при запуске VFP или приложения, разработанного в этой системе для работы с базой данных.
Во время работы в системе все предварительные установки при необходимости можно изменить.
При работе в VFP очень полезными являются окна Command, в котором можно видеть команды из меню и писать свои команды, и окно Data Session (когда-то раньше оно называлось View), в котором можно видеть все открытые таблицы, установленный порядок по индексам, заданные фильтры и связи между таблицами, и выполнять все эти операции.
Их можно держать постоянно открытыми в главном окне VFP.
Следует знать о таком свойстве окон в VFP, как Dockable - прилипание к границам родительского окна (аналогичное свойство имеют панели инструментов). Если это свойство задано, окно, с одной стороны, может прилипать, но одновременно может и выдвигаться за границы родительского окна и всегда лежит поверх других окон. При большом количестве окон в VFP, 15'' или 17'' мониторе и разрешении 1024х768 лучше это свойство выключить и использовать его на больших мониторах с вынесением ряда окон из основного окна VFP.

увеличить изображение
Рис. 4.2. Главное окно системы Visual FoxPro с открытыми в нем окнами проекта, программы, Trace, Watch, Data Session и Command
Общая характеристика системы
Visual FoxPro (VFP) - современная СУБД для персональных компьютеров, использующая реляционные базы данных, имеющая объектно-ориентированный алгоритмический язык для работы с информацией, методы визуального программирования и достаточно большие возможности (табл. 4.1). Типы данных, которые могут иметь поля таблиц базы данных, приведены в табл. 4.2 и табл. 4.3Версия системы 7.0 может работать в операционных системах Windows 9x и ядра NT, версии 8.0 и 9.0 - только в Windows XP, 2000, 2003.
| Количество записей в файле таблицы | 1 миллиард |
| Размер файла таблицы | 2 гигабайта |
| Количество символов в одной записи | 65500 |
| Количество полей в одной записи | 255 |
| Количество одновременно открытых таблиц | 255 |
| Количество символов в поле таблицы | 254 |
| Количество байтов в индексном ключе в некомпаундном индексе | 100 |
| Количество байтов в индексном ключе в компаундном индексе | 240 |
| Количество открытых индексных файлов для одной таблицы | не ограничено |
| Количество открытых индексов во всех рабочих областях | не ограничено |
| Количество связей | не ограничено |
| Длина выражений связи | не ограничена |
| Размер символьных полей | 254 |
| Размер числовых полей | 20 |
| Количество символов в имени поля в свободной таблице | 10 |
| Количество символов в имени поля в таблице, содержащейся в базе данных | 128 |
| Диапазон целых чисел | + 2 147 483 647 |
| Точность в числовых вычислениях | 16 цифр до 9007199254740992 (253) |
| Действительные числа | до 10308 или 2 1023 |
| Количество переменных по умолчанию | 16384 |
| Количество переменных | 65000 |
| Количество массивов | 65000 |
| Количество элементов в массиве | 65000 |
| Количество строк в исходных программных файлах | не ограничено |
| Размер модуля компилируемой программы | 64 килобайта |
| Размер процедур в файле | не ограничен |
| Количество вложенных DO | 128 |
| Количество вложенных READ | 5 |
| Количество передаваемых параметров | 27 |
| Количество транзакций | 5 |
| Количество объектов в отчете | не ограничено |
| Длина описания отчета | 20 дюймов |
| Количество уровней группировки | 74 |
| Длина символьных переменных в отчете | 255 |
| Количество открытых окон (всех типов) | не ограничено |
| Количество открытых окон BROWSE | 255 |
| Количество символов в символьной строке или переменной памяти | 16 777 184 |
| Количество символов в командной строке | 8192 |
| Количество открытых файлов | возможности ОС |
| Количество нажатий клавиш в макро | 1024 |
| Количество полей в одном запросе SQL | 255 |
| Двоичные данные неограниченной длины. Значения сохраняются в memo (.fpt) файле. Кодовая страница не учитывается | 4 байта в *.dbf | Ограничен доступной памятью, на диске до 2 Гб |
| Текст, состоящий из символов | 1 байт на символ, до 254 символов | Любые символы |
| Денежный формат | 8 байт | - $922337203685477.5807 до $922337203685477.5807 |
| Дата, состоящая из месяца, дня и года | 8 байт | От {^0001-01-01} - 1 января 1 года до {^9999-12-31} - 31 декабря 9999 года |
| Дата и время, состоит из месяца, дня, года, часа, минуты и секунды | 8 байт | От {^0001-01-01} до {^9999-12-31}, время от 00:00:00 до 23:59:59 |
| Логическое значение, True или False | 1 байт | True (.T.) или False (.F.) |
| Целые или действительные числа | 8 байт в памяти; от 1 до 20 байт в *.dbf | - .9999999999E+19 до .9999999999E+20 |
| Двоичные значения. Под пустые концевые значения место на диске не резервируется. Кодовая страница не учитывается | 1 байт на шестнадцатеричное значение, всего до 255 байт | Любое шестнадцатеричное значение |
| Любой тип Visual FoxPro и null-значение. Когда данные сохраняются в переменной, ее тип становится типом данных | См. все другие типы | См. все другие типы |
table class="xml_table" cellpadding="2" cellspacing="1">
Таблица 4.3. Типы данных в полях таблиц системы Visual FoxPro
Наличие в составе системы значительного количества библиотек стандартных классов с доступным для модификации исходным текстом. Возможность использования библиотек других приложений Windows (ActiveX).
Система VFP предназначена для использования профессиональными программистами, поэтому нет смысла в русификации ее меню и языка - для любого программиста английский синтаксис алгоритмического языка более привычен, чем русский.
Создание базы данных
Разработка любой информационной системы начинается с создания базы данных. Рассмотрим процесс создания базы данных, модель которой описана в предыдущей лекции, в системе VFP.Для создания новой базы данных можно воспользоваться кнопкой New стандартной панели инструментов (рис. 4.3) или пунктом меню "File - New:".

Рис. 4.3. Стандартная панель инструментов системы Visual FoxPro

Рис. 4.4. Выбор типа файла в диалоге New
Особенность этой команды - возможность создания большого количества различных типов файлов, соответствующих различным типам объектов системы, которые мы видим в окне New, появляющемся после этой команды (рис. 4.4).
В окне New в данном случае нужно выбрать тип файла Database.
Далее можно использовать кнопки New file или Wizard. Если выбрать кнопку Wizard - будут предложены готовые американские образцы баз данных - Address Book, Book Collection, Contact Management, Event Management, Music Collection, Picture Library, Students and Classes, Video Collection и прочие, всего более двух десятков.
Для примера на рис. 4.5 приведена схема базы данных, полученная с помощью Wizard для образца Students and Classes.
Как видно из примера, база данных слишком специфична, не совсем соответствует структуре нашего высшего учебного заведения, используется слишком много не совсем привычных для нас английских терминов, очень много индексов (каждый индекс дублирует информацию полей таблиц, при чрезмерно большом их количестве размер индексного файла может получиться больше, чем размер таблицы, что нерационально). Проще создать новую базу данных, соответствующую разработанной нами ранее модели.

увеличить изображение
Рис. 4.5. Образец базы данных, полученный с использованием Wizard
Выберем кнопку New file для создания собственной базы данных. После этого нужно задать папку на диске, где мы будем сохранять все компоненты, относящиеся к разрабатываемому проекту, и задать название базы данных (расширение файла указывать не надо - система допишет его сама).
Пусть папка и имя базы данных будут Students (рис. 4.6).

Рис. 4.6. Диалог для сохранения базы данных на диске
После нажатия на кнопку Save (Сохранить) будут созданы файлы базы данных (students.dbc, students.dct и students.dcx) и откроется пустое окно модификации структуры базы данных (Database Designer), показанное на рис. 4.7. Следует отметить, что очень многие команды, задаваемые нами с использованием меню системы, отображаются в виде текстовых команд в окне Command (создается протокол команд, который сохраняется), и это может быть использовано для повторного выполнения использованных команд или для включения их в текст программы, а также может быть полезно начинающим пользователям для изучения языка системы VFP. После команды Save в окне Command появятся 2 строки команд: CREATE DATABASE и MODIFY DATABASE, как показано на рис. 4.8.
Поместив курсор мыши в окно Database Designer, щелкнем в нем правой кнопкой мыши и в контекстном меню выберем команду New table:.
Далее выбираем New table, а не Wizard, который нам опять предложил бы американские образцы таблиц за основу, выбираем папку и задаем имя главной таблицы базы - Spisok, после чего открывается окно описания структуры таблицы базы данных (Table Designer) (рис. 4.9).

Рис. 4.7. Окно Конструктора базы данных

Рис. 4.8. Окно Command системы VFP

увеличить изображение
Рис. 4.9. Окно Конструктора таблиц
В окне Table Designer описываем все поля таблицы Spisok.dbf- имя поля (Name), тип (Type), ширину (Width), количество десятичных знаков для действительных чисел (Decimal), наличие простого индекса (Index) и задаем заголовок поля таблицы (Caption). Имена полей лучше писать латинскими буквами.
Для индекса NZ на странице Indexes окна Table Designer следует задать тип индекса - Primary (первичный), т.к. номер зачетки - уникальный для каждого студента, однозначно его идентифицирует и поэтому может служить первичным ключом (в таблице обозначения A (Ascending) - индекс в порядке возрастания, P (Primary).
Структура главной таблицы базы данных приведена в табл. 4.3.
Для таблицы, входящей в состав базы данных, в окне Table Designer присутствуют разделы Display, Map field type to classes, Field validation, Field comment, эта информация сохраняется в файле базы данных и поэтому отсутствует при описании структуры свободных таблиц (файлы *.dbf, не входящие в состав базы данных). Таблицу можно удалить из базы, но оставить в виде свободной таблицы на диске; в таком случае информация этих разделов теряется.
Задание заголовков (Caption) для полей при описании структуры таблицы облегчает разработку экранных форм и отчетов - эти названия появятся как подписи для полей (если Caption отсутствует, подписью будет имя поля).
| Nz | C | 7 | A,P | Номер зачетки | |
| Fio | C | 45 | Фамилия, имя, отчество | ||
| data_p | D | 8 | Дата поступления | ||
| n_fclt | N | 2 | A | Факультет | |
| n_spect | C | 7 | A | Специальность | |
| kurs | N | 1 | Курс | ||
| n_grup | С | 10 | Группа | ||
| n_pasp | С | 10 | Номер паспорта |
табл. 4.4
| n_fclt | N | 2 | A,P | Номер факультета | |
| name_f | C | 120 | Название факультета |
Точно так же создаем в базе данных следующие таблицы и индексы для табл. 4.5, табл. 4.6, табл. 4.7.
| n_spect | C | 7 | A,P | Код специальности | |
| name_s | C | 120 | Название специальности |
| nz | C | 7 | A | Номер зачетки | |
| semestr | N | 1 | Семестр | ||
| n_predm | N | 2 | A | Предмет | |
| ball | С | 1 | Оценка | ||
| data_b | D | 8 | Дата | ||
| prepod | C | 45 | Преподаватель |
| n_predm | N | 2 | A,P | Номер предмета | |
| name_p | С | 120 | Название предмета |
Далее в окне Database Designer задаем постоянные связи между таблицами в базе, перетаскивая мышкой название первичного индекса к обычному (Regular) индексу (внешний ключ). В результате получаем схему базы данных (рис. 4.10).

Рис. 4.10. Окно базы данных STUDENTS
Для связей можно задать условия соблюдения ссылочной целостности: каскадное обновление в операциях удаления и вставки и контроль с запретом ввода записей с неверными ключевыми значениями в операциях вставки (см. рис. 4.11). Для заданных условий будет сгенерирован программный код, занесенный в базу данных как хранимые процедуры - триггеры. Эти программы при желании можно просмотреть, изучить механизм их действия или модифицировать, если такая необходимость возникнет. Текст триггеров может представлять значительный интерес для программистов, т.к. он написан в наиболее универсальном виде для работы с различными режимами и базами с использованием стиля оформления, принятого в фирме-разработчике системы VFP.

Рис. 4.11. Задание условий соблюдения ссылочной целостности
Типы файлов, которые использует система
Особенность системы - использование значительного количества файлов с различными расширениями для работы с различными типами объектов, но по сути формат многих из них - dbf с мемо-полями.В табл. 4.4 приведен список основных типов файлов. Знание всех типов файлов необходимо каждому программисту, работающему с системой.
| .dbc | .dct | .dcx | База данных (Database) | |
| .dbf | .fpt | .cdx, .idx | Таблица (Table) | |
| .frx | .frt | Отчет (Report) | ||
| .h | Файл заголовков | |||
| .ico | Иконка | |||
| .lbx | .lbt | Этикетка (Label) | ||
| .mnx | .mnt | .mpx | Меню | |
| .mpr | Сгенерированная программа меню | |||
| .ocx | Библиотека объектов ActiveX | |||
| .pjx | .pjt | .exe, .dll, .app | Мемо-поля проекта | |
| .prg | .fxp | Файл программы | ||
| .qpr | .qpx | Программа-запрос | ||
| .scx | .sct | Форма (Form) | ||
| .vcx | .vct | Библиотека Visual FoxPro |
Использование Мастера для разработки экранных форм
В системе VFP Мастер (Wizard) разработки экранных форм создает их с использованием первого стиля. Созданные Мастером простейшие формы далее, как правило, приходится дополнять и модифицировать для реализации всех необходимых условий работы с базой. Мастера системы VFP используют библиотеки объектов, в которых реализованы механизмы сетевой работы с любыми базами данных в разных режимах буферизации или без нее. Поэтому модификацию существующих программных модулей библиотечных объектов следует выполнять при необходимости крайне осторожно, разобравшись в стандартном программном коде.При работе с базой данных наиболее удобно использовать режим буферизации данных на уровне многих записей - в этом случае все изменения, выполненные в различных таблицах (редактирование существующих данных, добавление и удаление записей) могут быть сохранены после нажатия на соответствующую кнопку на экране или панели инструментов, либо все изменения могут быть отменены.
Мастер экранных форм (Form Wizard) позволяет разрабатывать экранные формы, имеющие некоторый стандартный набор кнопок управления. В этом случае данные становятся доступны для редактирования только после нажатия на кнопку Правка, а по завершении редактирования надо нажать на кнопку Сохранить или Отменить.
При использовании Мастера проектов (Application Wizard) можно разрабатывать экранные формы, входящие в состав проекта, и оформленные в новом стиле - все данные на экране изначально доступны для редактирования, пользователь может в любой момент принять решение, сохранять изменения или нет. Для управления используется не набор кнопок, а панели инструментов. Система следит за изменениями: если Вы попытаетесь закончить работать с базой, не дав команды о сохранении или отмене изменений, появится соответствующий запрос (как в программах Word или в Excel при закрытии окна).
Воспользуемся способом разработки экранных форм с использованием Form Wizard. Предварительно откроем базу данных Students в эксклюзивном режиме (в окне Open должна стоять галочка у слова Exclusive).
Далее нажимаем на кнопку New на стандартной панели инструментов системы VFP, выбираем тип нового файла - Form - и нажимаем на большую кнопку Wizard (см. ранее рис. 2.2 - экран New). В появившемся окне Wizard Selection выбираем вариант One-to-Many Form Wizard - разработка экранной формы для двух связанных таблиц, показывающей поля одной записи главной таблицы и множество связанных записей дочерней таблицы в виде объекта Grid. В нашем случае главная таблица базы - Spisok, связанная с ней таблица - Ocenki.
Работа Мастера заключается в пошаговом формировании ответов на определенные вопросы с генерацией для полученного таким образом описания экранной формы или другого объекта при использовании других Мастеров.
Шаг 1 (Step 1, рис. 5.6): выбор главной таблицы и ее полей. Экран содержит краткое описание этого шага и следующие списки: выбора базы данных и таблиц (Databases and tables), доступных полей выбранной таблицы (Available fields) и выбранных для размещения на экранной форме полей главной таблицы (Selected fields).

Рис. 5.6. Шаг 1 Мастера разработки экранных форм
Для выбора необходимых полей служат кнопки со стрелками или может использоваться двойной щелчок мыши.
Далее нажимаем на кнопку Next > и переходим ко второму шагу, где нам необходимо выбрать на аналогичном экране таблицу, связанную с главной связью от одной записи - ко многим, и ее поля, в нашем случае это все поля таблицы Ocenki.
На третьем шаге нужно подтвердить, что выбранные таблицы действительно связаны по значению поля NZ.
Четвертый шаг - выбор стиля формы и типа кнопок (рис. 5.7). Использование кнопок с картинками (Picture buttons) имеет то преимущество, что изображение носит интернациональный характер, после усвоения назначения кнопок быстрее воспринимается, чем текст. Другой вариант в международных многоязыковых системах - сохранять все названия кнопок в отдельных файлах или в базе данных, т.е. с названиями кнопок связывать значения переменных, которые определяются при запуске системы в работу.

Рис. 5.7. Шаг 4 Мастера разработки форм
Шаг 5 - задание сортировки записей главной таблицы. Можно задать сортировку по имеющемуся у таблицы индексу или указать последовательность полей для создания сложного индекса (не более трех), например, поля N_fclt, N_grup, Fio (рис. 5.8).

Рис. 5.8. Шаг 5 Мастера разработки форм
На шестом, последнем шаге задаем заголовок (Titul) для формы и выбираем завершающую операцию - Save form and modify it in Form Designer - Сохранить форму и модифицировать ее в дизайнере форм.
После нажатия на кнопку Finish выбираем папку для сохранения файлов экранной формы и ее название - можно оставить предлагаемое системой название, совпадающее с названием главной таблицы (у файлов таблицы и формы будут разные расширения).
В результате будет сгенерирована и открыта в дизайнере форма следующего вида (рис. 5.9):

увеличить изображение
Рис. 5.9. Экранная форма, разработанная Мастером
Модификация экранной формы в Конструкторе
При работе с базами данных всегда используются таблицы-справочники. На экранных формах для выбора данных из справочников можно использовать раскрывающиеся списки (в VFP - объект Combo Box) или выполнять выбор из другой раскрывающейся формы после нажатия на командную кнопку. Второй способ позволяет просматривать сложную информацию справочников и одновременно дополнять и редактировать справочник.Для использования информации из справочных таблиц необходимо добавить их в Data Environment - окно, связанное с экранной формой и описывающее, какие таблицы связаны с формой, как они открываются и закрываются при запуске формы в работу (см. свойства в окне Properties). Другой вариант - в событии Load экранной формы самому написать команды открытия таблиц, задания порядка по индексам и установления связей.
Для начинающих программистов проще воспользоваться первым, визуальным способом. Окно Data Environment можно открыть, щелкнув на соответствующем названии в пункте главного меню View или выбрав команду Data Environment в контекстном меню экранной формы. Вид этого окна показан на рис. 5.13. Щелкнув правой кнопкой мыши на пустом месте окна Data Environment, выберем команду Add в контекстном меню, добавим таблицы Fclt, Spect, Predmеts и зададим правильно связи между ними перетаскиванием мышкой названия поля к названию индекса, как показано на рисунке.

Рис. 5.13. Окно данных экранной формы Data Environment
Теперь можно добавить на экранную форму раскрывающиеся списки для показа информации из справочников факультетов, специальностей и предметов и занесения соответствующих номеров из справочников в список студентов или в таблицу оценок.
Найдем на панели Form Controls объект Combo Box, щелкнем на нем мышкой и покажем область размещения и размер этого объекта на экранной форме Spisok. Затем щелкаем правой кнопкой мыши на нем и в контекстном меню выбираем пункт Builder. В результате в VFP открывается окно Combo Box Builder (рис. 5.14.). Это окно состоит из четырех страниц для выбора исходных данных, стиля и внешнего вида списка и задания, какую колонку и где сохранять при выборе пункта списка.
Затем надо описать свойства вставленного в колонку 3 объекта с именем Combo1:
Для показа названия предмета в таблице добавим количество колонок (для объекта Grid свойство ColumnCount изменим на 7), переместим колонку перетаскиванием мышкой за заголовок на четвертое место в таблице после колонки N_predm и опишем свойства колонки 7: ControlSourse - Predmets.name_p (выбором из списка доступных полей); ReadOnly - .T. (делаем эту колонку нередактируемой).
Далее отредактируем заголовки (Header) у всех колонок объекте Grid, цвет фона экранной формы и объекта Grid (BackColor) и цвета объектов Combo box - DisabledBackColor и DisabledForeColor.
В результате экранная форма (после запуска ее в работу) будет иметь вид, показанный на рис. 5.16.

Рис. 5.16. Экранная форма после модификации в Конструкторе
Назначение экранных форм
Для баз данных, состоящих из большого количества таблиц, наглядная и удобная работа может быть организована при использовании экранных форм. Данный режим позволяет использовать все необходимые данные из одной или нескольких таблиц. Можно разместить на экранной форме меню, панели инструментов, командные кнопки и другие сложные объекты для работы с данными.На экранных формах можно организовать выбор информации из таблиц-справочников с использованием раскрывающихся списков или отдельных окон, использовать специальные режимы редактирования данных с сохранением или отменой изменений, режимы поиска и отбора информации, печати необходимых отчетов на принтере и пр.
На рис. 5.1 - 5.5 приведены в качестве примера экранные формы нескольких основных видов в одной из наиболее крупных систем автоматизации управления предприятиями - BaanERP.

Рис. 5.1. Множество записей в одной экранной форме, редактирование - в отдельном окне (см. рис. 5.4)

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

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

увеличить изображение
Рис. 5.4. Одна запись на многостраничной экранной форме с кнопками без меню и панели инструментов

Рис. 5.5. Экранная форма с командными кнопками
При работе с экранными формами существует два принципиально разных подхода:
В несложной системе, основой которой может быть одна экранная форма, первый стиль позволяет быстрее переходить к редактированию необходимых данных (за счет имеющихся кнопок и горячих клавиш поиска, перехода к следующей и предыдущей записи, создания новой записи).
Объекты экранных форм и их основные свойства
На экранной форме (объект базового класса Form) присутствуют объекты следующих классов (см. рис. 5.9):Label - надпись на форме, обычно не изменяющаяся (но может изменяться программно);
Line - линия на форме, обычно не изменяющаяся, но, в принципе, тоже может изменяться;
Text Box - поле редактирования, служит для отображения и редактирования информации поля таблицы базы данных или переменной, его главное свойство: ControlSourse - с каким источником данных связан этот объект (см. далее рис. 5.10);
Grid - сложный объект, состоящий из столбцов, которые имеют заголовок (Header) и, обычно, редактируемые данные в виде объекта Text Box (можно заменить при необходимости на Combo Box - раскрывающийся список, Spinner - счетчик и пр.);
Container - контейнер-объект, который служит для объединения других объектов в одну группу, для которой можно задать общие свойства и события;
Command Button - командная кнопка, связанная с выполнением определенной процедуры, находится внутри контейнера.
Следует отметить, что многие из этих объектов имеют базовый класс (свойство BaseClass), соответствующий приведенному названию (из библиотеки классов Standard), а реально происходят из Wizembss.vcx - библиотеки классов, которую использует Мастер разработки экранных форм. Эта библиотека основана на стандартных объектах, но они модифицированы (добавлены и описаны новые свойства и события), что необходимо для работы Мастера.
Для создания объектов экранных форм используется панель инструментов Form Controls, для выравнивания объектов полезна панель Layout (см. рис. 5.10).

Рис. 5.10. Панели инструментов для работы с объектами экранной формы
Полный список стандартных объектов экранных форм, присутствующих на панели Form Controls, приведен в табл. 5.1
| Label | ![]() | Caption | ![]() | ||
| Text box | ![]() | Control Sourse | ![]() | ||
| Edit box | ![]() | Control Sourse | ![]() | ||
| Command button | ![]() | Click Event | ![]() | ||
| Option Group | ![]() | Control Sourse | ![]() | ||
| Check box | ![]() | Control Sourse | ![]() | ||
| Combo box | ![]() | ControlSourse,RowSourseTip,RowSourse | ![]() | ||
| List box | ![]() | ControlSourse,RowSourseTip,RowSourse | ![]() | ||
| Spinner | ![]() | Control Sourse | ![]() | ||
| Grid | ![]() | см. рис. 5.9 | |||
| Image Picture | ![]() | Picture | ![]() | ||
| Timer | ![]() | Timer Event, Interval | невидимый объект | ||
| Page Frame | ![]() | Многостраничная форма | |||
| ActiveX (OLE) Container | ![]() | Ole Class | Объект ActiveX | ||
| ActiveX (OLE) Bound | ![]() | Control Sourse | Объект поля General | ||
| Line | ![]() | ![]() | |||
| Shape | ![]() | Curvature | ![]() | ||
| Сontainer | ![]() | Группа объектов | |||
| Hyperlink | ![]() | Используется с объектами библиотек _hyperlink.vcx и _internet.vcx | Невидимый объект |

Рис. 5.11. Окно свойств объекта
В верхней части окна присутствует раскрывающийся иерархический список объектов, ниже - несколько страниц групп свойств объектов:
Data - данные, важнейшее свойство в этом разделе - Control Sourse для объектов, связанных с редактированием каких-либо данных;
Metods - методы, т.е. процедуры (программные модули), выполняющиеся для объекта, чаще всего, при наступлении определенных событий (Events). Примеры событий: Load Event - происходит перед созданием объекта (но после открытия таблиц, если это задано в Data Environment для формы); Activate Event - при активизации объекта; When Event - перед тем, как курсор переместится на текущий объект, выбранный мышкой, или при переходе на него с предыдущего объекта с использованием клавиш TAB или Enter; Valid Event - перед тем, как курсор переместится c текущего на другой объект; Click Event - при щелчке мышкой на объекте и пр.;
Layout - все, что связано с внешним видом объекта: расположение, размеры, шрифт, цвет, тип выравнивания, ShowTips - показывать или нет всплывающие подсказки, ScrollBars - показывать или нет полосы скроллинга и пр.;
Other - прочие свойства;
Favorites - избранное, раздел, куда можно помещать список самых важных свойств объекта (в версии VFP 9.0).
Следует отметить важность события Valid Event для всех объектов, связанных с редактированием данных, - оно не только позволяет выполнить проверку правильности ввода данных, но, что особенно ценно, позволяет автоматизировать выполнение расчетов после редактирования данных и выхода из поля редактирования.
Для использования экранной формы нужно запустить ее в работу, что можно сделать из системы FoxPro несколькими способами: нажатием на кнопку Run

на стандартной панели инструментов, горячими клавишами Ctrl+E, командой Run Form в пункте меню Form (этот пункт присутствует в меню только при активном окне Form Designer) или командой Do Form Spisok, написанной в окне Command (при этом папка, в которой расположены файлы экранной формы Spisok.scx и Spisok.sct должна быть Default Directory или в команде нужно указать полный путь и название файла).После чего начинает работать программа, отображающая на экране тот вид, что описан вами с использованием Конструктора форм, дающая возможность редактировать данные в полях формы и выполнять процедуры, связанные с объектами этой формы (рис. 5.12).

Рис. 5.12. Экранная форма, запущенная в работу с базой данных
Как мы видим, на форме отсутствуют названия факультетов, специальностей и предметов. В объекте Grid Мастер не показал имеющиеся в таблице Ocenki заголовки полей таблицы (Caption). Следует устранить эти недостатки и создать возможность выбора факультетов, специальностей и предметов из соответствующих справочников.
Пример простейшего расчета при работе с базой данных
При работе с числовой информацией в базе данных часто необходимо выполнить какие-либо расчеты после ввода данных. Это можно выполнять автоматически, как отмечалось ранее, описав процедуру расчета в методе ValidEvent поля ввода данных, или использовать процедуру, связанную с новой командной кнопкой на экранной форме.Дополним экранную форму новой кнопкой для выполнения небольшого расчетного примера.
На рис. 5.20. приведен текст процедуры метода ClickEvent новой кнопки для расчета и показа средней оценки студента.

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

Рис. 5.21. Результат работы кнопки "Расчет средней оценки"
Более сложные расчеты выполняются обычно с использованием запросов для отбора информации из базы, о которых будет рассказано в следующей лекции.
Работа с базой данных с использованием экранной формы
Следующая задача - научиться пользоваться той экранной формой, основу которой предложил Мастер и которая содержит некоторый набор кнопок для работы с информацией базы данных. Для последующей работы с отчетами с группировкой данных нам необходимо, используя ее правила заполнения, занести в базу данных информацию о студентах не менее 2 факультетов, на каждом факультете должно быть 2-3 группы, в каждой группе несколько студентов, у каждого студента - 3-5 оценок.Назначение кнопок, на которых вместо надписей мы задали показ картинок (см. рис. 5.7.), поясняется подсказками у курсора мыши (ToolTipText) и на строке состояния (StatusBarText), однако эти сообщения в библиотечном объекте написаны на английском языке. Если использовать в дальнейшем библиотеки из папки VFP Wizards, следует перевести на русский язык сообщения и надписи на экранных формахэтих библиотек. В табл. 5.2. приведено назначение стандартных кнопок экранной формы.
| 1. | Перейти к первой записи | Top record | Go to top of table |
| 2. | Перейти к предыдущей записи | Previous record | Skip to previous record |
| 3. | Перейти к следующей записи | Next record | Skip to next record |
| 4. | Перейти к последней записи | Bottom record | Go to bottom of table |
| 5. | Поиск записей | Find records | Search for records |
| 6. | Напечатать отчет | Print report | Print to report |
| 7. | Добавить/сохранить запись | Add/Save record | Add new record/Save edits |
| 8. | Редактировать/отменить изменения | Edit/Revert record | Edit existing record/Revert edits |
| 9. | Удалить запись | Delete record | Delete existing record |
| 10. | Выйти из формы | Exit form | Exit input form |
Как видно из табл. 5.2., кнопки 7 и 8 имеют двойное назначение, которое изменяется после нажатия на кнопку. Текст процедур, связанных с методом ClickEvent для кнопок, находится в классе txtbtns библиотеки wizbtns.vcx, где его можно изучить. Если для кнопки 7 возникнет необходимость использовать нестандартную команду добавления данных, нужно скопировать процедуру библиотечного объекта в метод ClickEvent своей кнопки и отредактировать фрагмент программы (в фигурных скобках - комментарии к программе):
IF THIS.Parent.EditMode {если нажата кнопка и мы в режиме редактирования} THIS.Parent.UpdateRows() { сохранить запись, процедура группы кнопок - родительского объекта} ELSE IF !THIS.Parent.AddRec() {иначе - к процедуре добавления записей} RETURN ENDIF ENDIF THIS.Parent.EditMode = !THIS.Parent.EditMode {изменение свойства EditMode } THIS.Parent.AddMode = THIS.Parent.EditMode {изменение свойства AddMode } THIS.Parent.TopFile = .F. THIS.Parent.ButtonRefresh() {обновление параметров кнопок 5 -10 } THIS.Parent.NavRefresh() {обновление параметров кнопок 1-4 и объектов формы}
Наиболее сложные функции - у кнопок 7 в режиме добавления данных, кнопок 5 и 6. Эти кнопки вызывают запуск в работу библиотечных экранных форм для добавления, поиска записей и вывода отчетов, вид которых в Конструкторе (после перевода надписей на русский язык и модификации формы поиска) приведен на рис. 5.17-5.19.

Рис. 5.17. Экранная форма GridAddForm библиотеки wizbtns.vcx

Рис. 5.18. Экранная форма SearchForm библиотеки wizbtns.vcx(добавлен объект Grid1 для показа таблицы, в которой выполняется поиск)

Рис. 5.19. Экранная форма вывода отчета библиотеки _report.vcx
Порядок ввода новых данных с использованием разработанной формы следующий:
Команды для работы с базами данных, таблицами, индексами, связями
Команды перемещения по таблице, поиска и отбора данных
Для nRecords>0 - перемещение далее по таблице, для nRecords<0 - назад к предыдущим записям.
Функция BOF() возвращает .T., если текущая запись - первая и Вы пытаетесь выполнить команду SKIP -1, аналогично для последней записи - EOF()=.T.
(Найти следующую запись, соответствующую условию - команда CONTINUE)
В качестве StorageDestination можно использовать одно из следующих предложений:
В качестве DisplayDestination можно использовать одно из следующих предложений:
Команды для добавления, модификации и удаления данных
При описании полей (в параметре FIELDS) список может содержать следующие параметры:
FieldName (имя поля) [:R] (только чтение) [:nColWidth] (ширина поля) [:V = lExpr1 [:F] [:E = cTxt]] (функция, выполняемая при выходе из поля) [:P = cFormatCodes] (формат) [:B = eMin, eMax [:F]] (диапазон данных) [:H = cHeadingText] (заголовок) [:W = lExpr2] (функция,выполняемая перед входом в поле)
Близкий синтаксис имеют команды EDIT и CHANGE для работы с таблицей при построчном расположении полей.
APPEND FROM ARRAY ArrayName [FOR lExpression] [ FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton]
SQL-команда INSERT INTO - добавить запись с заданными значениями полей:
INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])] VALUES (eExpression1 [, eExpression2, ...]) INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR | FROM NAME ObjectName INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])] SELECT SELECTClauses [UNION UnionClause SELECT SELECTClauses ...]
параметр MEMVAR означает - используются переменные с теми же именами, что и имена полей записи; имя переменной в программе следует писать как m.<имя поля>).
Здесь Target - таблица (table), курсор (cursor) или их алиас или файл для обновления.
Команды вычислений по данным таблиц
где для eExpressionList - можно использовать следующие функции:
AVG(nExpression) - среднее значение CNT( ) - количество MAX(eExpression) - максимальное значение MIN(eExpression) - минимальное значение NPV(nExpression1, nExpression2 [, nExpression3]) - банковская функция STD(nExpression) - стандартное отклонение SUM(nExpression) - сумма VAR(nExpression) - статистическая функция
SUM [eExpressionList] [Scope] [FOR lExpression1] [WHILE lExpression2][TO MemVarNameList | TO ARRAY ArrayName] [NOOPTIMIZE]
AVERAGE [ExpressionList] [Scope] [FOR lExpression1] [WHILElExpression2][TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE]
Некоторые команды и функции для работы с базой данных
Далее при описании команд приводится их полный синтаксис. Следует помнить, что элементы команд, заключенные в квадратные скобки, являются необязательными, могут присутствовать или отсутствовать. Если элементы разделены вертикальной чертой - должен присутствовать один из них.Полный список команд и функций с разъяснением их параметров и примерами использования можно найти в справочной системе VFP в разделе Language Reference.
Отбор данных из базы с использованием SQL-запросов
Ранее отмечалось, что для работы с данными, отобранными в соответствии с каким-либо условием, может быть использована команда SET FILTER TO <условие> - установить фильтр для открытой таблицы базы данных.Однако большими возможностями обладает так называемый SQL-запрос - команда SELECT :, сформированная в соответствии с правилами языка запросов SQL (Structured Query Language).
Запрос позволяет отбирать данные по заданным сложным условиям из нескольких таблиц различных баз данных, с размещением результатов выполнения запроса на экране, во временной таблице (cursor), в новой таблице, в текстовом файле или в массиве переменных. При этом возможны сложные виды упорядочения информации и группировки данных с получением расчетных групповых результатов.
Отбор осуществляется непосредственно из файла на диске, таким образом те же таблицы одновременно могут быть открыты с какими-либо установленными фильтрами (например, в программе, работающей с данными только за текущий месяц).
В VFP и других системах фирмы Microsoft (Word, Excel) можно использовать Конструктор запросов, что упрощает и ускоряет написание запросов. Кроме того, в VFP есть Мастер для разработки запросов разного вида. Однако использование этих средств не позволяет реализовать все возможности языка запросов. Максимальные возможности - при написании запроса в текстовом виде в любом программном модуле в соответствии с синтаксисом команды SELECT (полный синтаксис будет описан далее).
Принцип формирования запросов наиболее легко освоить при использовании Мастера запросов.
Поставим задачу отобрать информацию по экзаменационным оценкам студентов по факультету № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1 ("Математика" в справочной таблице) с сортировкой данных по группам, в группах - в порядке уменьшения оценки.
Для этого выбираем на стандартной панели или в меню команду New, далее выбираем Query и нажимаем кнопку Query Wizard. В появившемся списке из трех пунктов: Cross-Tab Wizard, Graph Wizard и Query Wizard выбираем последний вариант - стандартный запрос.
Ранее отмечалось, что для работы с данными, отобранными в соответствии с каким-либо условием, может быть использована команда SET FILTER TO <условие> - установить фильтр для открытой таблицы базы данных.
Однако большими возможностями обладает так называемый SQL-запрос - команда SELECT :, сформированная в соответствии с правилами языка запросов SQL (Structured Query Language).
Запрос позволяет отбирать данные по заданным сложным условиям из нескольких таблиц различных баз данных, с размещением результатов выполнения запроса на экране, во временной таблице (cursor), в новой таблице, в текстовом файле или в массиве переменных. При этом возможны сложные виды упорядочения информации и группировки данных с получением расчетных групповых результатов.
Отбор осуществляется непосредственно из файла на диске, таким образом те же таблицы одновременно могут быть открыты с какими-либо установленными фильтрами (например, в программе, работающей с данными только за текущий месяц).
В VFP и других системах фирмы Microsoft (Word, Excel) можно использовать Конструктор запросов, что упрощает и ускоряет написание запросов. Кроме того, в VFP есть Мастер для разработки запросов разного вида. Однако использование этих средств не позволяет реализовать все возможности языка запросов. Максимальные возможности - при написании запроса в текстовом виде в любом программном модуле в соответствии с синтаксисом команды SELECT (полный синтаксис будет описан далее).
Принцип формирования запросов наиболее легко освоить при использовании Мастера запросов.
Поставим задачу отобрать информацию по экзаменационным оценкам студентов по факультету № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1 ("Математика" в справочной таблице) с сортировкой данных по группам, в группах - в порядке уменьшения оценки.
Для этого выбираем на стандартной панели или в меню команду New, далее выбираем Query и нажимаем кнопку Query Wizard. В появившемся списке из трех пунктов: Cross-Tab Wizard, Graph Wizard и Query Wizard выбираем последний вариант - стандартный запрос.
На первом шаге Мастера необходимо выбрать таблицы и поля, которые следует включить в запрос. Если предварительно база данных не была открыта, следует ее выбрать с помощью кнопки рядом с полем списка Databases and tables. Выбор полей может быть выполнен из нескольких таблиц базы (рис. 6.12.).

Рис. 6.12. Мастер запросов - шаг 1
На шаге 2 следует добавить в список связей выражение SPISOK.NZ = OCENKI.NZ, что Мастер сам предложит вам сделать.
На шаге 2а вам нужно ответить на вопрос, какие записи при объединении таблиц следует включать в результаты (join conditions - условия объединения):
only matching rows - отбираются только записи при их одновременном присутствии в обеих связанных таблицах для заданных условий отбора и связей (условие объединения Inner Join);
all rows from table SPISOK - отбираются все записи таблицы SPISOK, соответствующие условиям отбора, и связанные записи другой таблицы при их наличии (Left Outer Join);
all rows from table OCENKI- отбираются все записи таблицы OCENKI, соответствующие условиям отбора, и связанные записи другой таблицы при их наличии (Right Outer Join);
all rows from both tables - отбираются все записи таблиц SPISOK и OCENKI, соответствующие условиям отбора, независимо от наличия связанных записей другой таблицы (Full Join).
Выбираем первый вариант для нашего запроса.
На шаге 3 могут быть заданы условия отбора данных (количество условий - не более двух, в Конструкторе запросов или в тексте запроса можно увеличить их количество). Зададим условия - SPISOK.N_FCLT=1 and OCENKI.SEMESTR=1 (рис. 6.13.). В Мастере нельзя задать больше двух условий, в Конструкторе или тексте SQL-программы количество условий не ограничено.

Рис. 6.13. Мастер запросов - шаг 3
Шаг 4 - задание условий сортировки данных. Здесь можно выбрать последовательно 3 поля таблиц, по которым следует сортировать данные, например, n_grup, ball - упорядочить по группам, внутри групп - по баллу в порядке уменьшения (Descending).
На шаге 4а можно задать процент или количество рассматриваемых записей, здесь мы оставим без изменений условие all records - все записи.
На последнем шаге 5 выберем вариант Save query and modify it in Query Designer - Сохранить запрос и модифицировать его в Конструкторе запросов, зададим путь и имя для сохранения файла запроса.
В результате на диске будет создан текстовый файл запроса с расширением *.qpr (например, query_s1.qpr), который может быть открыт как текстовый файл или в Конструкторе запросов с отображением всех условий запроса.
Как видим на рис. 6.14., в верхней половине Конструктора запросов показаны таблицы, используемые для отбора данных и связи между ними, в нижней части - присутствуют страницы для выбора полей таблиц (Fields), условий объединения (Join), отбора данных (Filter), упорядочения (Order By), группировки (Group By) и разное (Miscellaneous). Щелчок правой кнопкой мыши в окне вызовет контекстное меню, в котором можно выбрать позицию Output settings и задать тип сохранения результата отбора данных - Browse, Cursor, Table, Screen. По умолчанию используется режим Screen - данные сохраняются в курсоре (временной таблице, доступной только для чтения, автоматически уничтожающейся при завершении работы системы) и показываются на экране как Browse.

увеличить изображение
Рис. 6.14. Конструктор запросов
Модифицируем запрос для отбора данных только по экзаменационным оценкам за 1 семестр 2005/2006 учебного года. Для этого на странице Filter добавим новые условия: semestr = 1, val(Ocenki.ball)>1, val(Ocenki.ball)<6 и YEAR(Ocenki.data_b) = 2006 (см. рис. 6.15.).

увеличить изображение
Рис. 6.15. Страница задания условий отбора данных в Конструкторе запросов
Текст запроса на языке SQL будет выглядеть следующим образом (в контекстном меню можно воспользоваться командой View SQL):
SELECT Spisok.n_fclt, Spisok.n_grup, Spisok.fio, Ocenki.semestr,; Ocenki.n_predm, Ocenki.ball; FROM ; STUDENTS!SPISOK ; INNER JOIN STUDENTS!OCENKI ; ON Spisok.nz = Ocenki.nz; WHERE Spisok.n_fclt = 1; {для всех условий задан одинаковый } AND Ocenki.semestr = 1; {приоритет (Pri.) равный 0} AND Ocenki.n_predm = 1; AND val(Ocenki.ball) > 1; AND val(Ocenki.ball) < 6; AND YEAR(Ocenki.data_b) = 2006; ORDER BY Spisok.n_grup, Ocenki.ball DESC
Выполнив запрос (кнопка Run на стандартной панели), мы получим результат отбора данных (рис. 6.16.).

Рис. 6.16. Результаты отбора данных по запросу
Более сложный вариант - запрос с группировкой данных и расчетом групповых итогов. Поставим задачу показать средний балл для студенческих групп по экзаменационным оценкам для факультета № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1. Сделать это можно путем модификации в Конструкторе предыдущего запроса.
Далее уберем лишние поля на странице Fields. При группировке данных допускается отображение только сгруппированных или итоговых данных, таких как следующие:
Не допускается отображение значений отдельных строк таблицы.
Оставим в списке полей только поле группировки - n_grup, и добавим новое поле - выражение для расчета средней оценки - AVG(VAL(ball). На странице Order By запишем одно условие - упорядочить по новому расчетному полю в порядке убывания. На странице Filter оставим все прежние условия отбора. Введем вывод результатов запроса в таблицу query_s2.dbf1)
Текст запроса будет выглядеть следующим образом:
SELECT Spisok.n_grup, AVG(VAL(Ocenki.ball)); FROM ; STUDENTS!SPISOK ; INNER JOIN STUDENTS!OCENKI ; ON Spisok.nz = Ocenki.nz; WHERE Spisok.n_fclt = 1; AND Ocenki.semestr = 1; AND Ocenki.n_predm = 1; AND VAL(Ocenki.ball) > 1; AND VAL(Ocenki.ball) < 6; AND YEAR(Ocenki.data_b) = 2006; GROUP BY Spisok.n_grup; ORDER BY 2 DESC; INTO TABLE query_s2.dbf
Результаты отбора данных по запросу показаны на рис. 6.17.

Рис. 6.17. Отбор данных по запросу с группировкой
Результаты отбора данных могут быть показаны в виде диаграммы (объект Microsoft Graph). Для этого можно воспользоваться мастером построения диаграмм в VFP - в меню системы Tools - Wizards - All Wizards:, далее в окне полного списка Мастеров выбрать GraphWizard (см.
табл. "Полный список Wizard-ов в VFP 9.0"). Результат построения столбчатой диаграммы показан на рис. 6.18. (после дополнительного редактирования объекта в системе VFP).
| Application Builder |
| Application Wizard |
| Cross-Tab Wizard |
| Database Wizard |
| Documenting Wizard |
| Form Wizard |
| Graph Wizard |
| Import Wizard |
| Label Wizard |
| Local View Wizard |
| Mail Merge Wizard |
| Microsoft SQL Server Upsizing Wizard |
| One-to-Many Form Wizard |
| One-to-Many Report Wizard |
| One-to-Many Report Wizard |
| Query Wizard |
| Remote View Wizard |
| Report Wizard |
| Table Wizard |
| Web Publishing Wizard |
| Web Services Publisher |

Рис. 6.18. Диаграмма, построенная по результатам запроса
Запрос может иметь несколько уровней группировки данных. Добавим в запроссправочные таблицы для показа названий факультетов и предметов. Усложним предыдущий запрос, добавив внешние уровни группировок по названиям факультетов и предметов, и уберем условия отбора данных по номерам факультетов и предметов. Расчет итогов будет выполняться с учетом всех уровней группировки, как показано в следующем примере запроса:
SELECT Fclt.name_f, Spisok.n_grup, Predmets.name_p,; AVG(VAL(Ocenki.ball)); FROM ; STUDENTS!SPISOK ; INNER JOIN STUDENTS!OCENKI ; ON Spisok.nz = Ocenki.nz ; INNER JOIN students!fclt ; ON Fclt.n_fclt = Spisok.n_fclt ; INNER JOIN students!predmets ; ON Predmets.n_predm = Ocenki.n_predm; WHERE Ocenki.semestr = ( 1 ); AND VAL(Ocenki.ball) > ( 1 ); AND VAL(Ocenki.ball) < ( 6 ); AND YEAR(Ocenki.data_b) = ( 2006 ); GROUP BY Fclt.name_f, Spisok.n_grup, Predmets.name_p; ORDER BY Fclt.name_f, Spisok.n_grup, Predmets.name_p, 4 DESC; INTO TABLE query_s3.dbf
Результаты отбора данных по запросу показаны на рис. 6.19.

Рис. 6.19. Отбор данных по запросу с группировкой
На основе таблицы query_s3.dbf можно построить перекрестный запрос(Cross-Tab Wizard) для отображения в последующем данных на одной трехмерной диаграмме с осями X (Row) - группа, Y (Column) - предмет, Z (Data) - средний балл.
Страница 3 мастера с заданием этих параметров показана на рис. 6.20.

Рис. 6.20. Страница 3 мастера Cross-Tab Wizard
Текст запросав системе VFP будет выглядеть следующим образом:
SELECT Query_s3.n_grup, Query_s3.name_p, AVG(Query_s3.avg_exp_4); FROM ; QUERY_S3.DBF; GROUP BY Query_s3.n_grup, Query_s3.name_p; ORDER BY Query_s3.n_grup, Query_s3.name_p; INTO TABLE q_cross.dbf DO (_GENXTAB) WITH 'Query' BROWSE NOMODIFY
Результат выполнения перекрестного запроса показан на рис. 6.21.

Рис. 6.21. Данные перекрестного запроса
Для полученной таблицы можно построить трехмерную диаграмму с помощью Мастера GraphWizard, показанную на рис. 6.22. (после дополнительного редактирования ее в системе VFP).

Рис. 6.22. Диаграмма, построенная по данным перекрестного запроса
Разработка отчетов
Для разработки отчетов - печатных документов, отражающих информацию базы данных, в системе VFP существует Конструктор отчетов (Report Designer) и Мастер отчетов (Report Wizard). Важным свойством отчетов является возможность группировки данных и получения итоговых данных для групп и всего отчета. При формировании отчетов можно задавать фильтр отбора необходимых данных либо формировать отчет на основе данных SQL-запроса или представления данных (View).Наиболее просто для разработки основы отчета воспользоваться Мастером отчетов с последующей модификацией и дополнением отчета в Конструкторе.
Существует 2 типа Мастера отчетов:
One-to-Many Report Wizard - Мастер отчета, в котором для одной записи главной таблицы существует множество записей связанной с ней дочерней таблицы.
Report Wizard - Мастер простого отчета, но с возможностью задания группировки данных.
Поставим задачу разработать отчет, в котором показаны экзаменационные оценки всех студентов за зимнюю сессию 2005-2006 учебного года (с 10.01.2006 по 06.02.2006) с группировкой данных по факультетам, курсам, группам и в группе - по фамилиям студентов.
Как обычно, создание нового объекта начинаем, нажав кнопку New на стандартной панели инструментов, затем выбираем Report - Wizard - One-to-Many Report Wizard.
Далее на первом шаге Мастера (рис. 6.1) выбираем базу Students и поля главной таблицы базы (Spisok), которые мы хотим показать в отчете.

Рис. 6.1. Шаг 1 Мастера разработки отчета
На втором шаге (рис. 6.2) выбираем поля дочерней таблицы - Ocenki.

Рис. 6.2. Шаг 2 Мастера разработки отчета
Третий шаг - подтверждаем, что эти таблицы связаны по значению поля NZ.
На четвертом шаге необходимо задать порядок сортировки данных в отчете. Мастер позволяет задать не более трех значений полей для сложной сортировки (с созданием соответствующего сложного индекса). Выберем поля N_fclt, Kurs, N_grup с сортировкой в порядке возрастания (Ascending).
Пятый шаг (рис. 6.3) - задаем стиль отчета, расположение его на листе (вертикальный лист - Portrait или горизонтальный - Landscape) и суммарные параметры - расчет среднего значения (Avg) для поля Ball.

Рис. 6.3. Шаг 5 Мастера разработки отчета
На последнем, 6- м шаге задаем заголовок отчета, выбираем команду Сохранить отчет и модифицировать его в Конструкторе отчетов - Save report and modify it in Report Designer и после нажатия на кнопку Finish задаем имя (Spisok) и место сохранения файлов отчета (будут созданы два файла с одинаковым именем и расширениями *.frt и *.frx).
В окне Report Designer мы увидим отчет, показанный на рис. 6.4.

увеличить изображение
Рис. 6.4. Окно Конструктора отчетов
В Конструкторе отчет разбит на отдельные зоны, информация которых может присутствовать в отчете один раз (Title и Summary), в начале каждой страницы (Page Header) или в конце каждой страницы (Page Footer), в начале каждой группы (Group Header, групп может быть много) и в конце каждой группы (Group Footer), а также зона показа информации каждой записи таблицы (Detail).
Особенность отчета, созданного Мастером, - в нем присутствуют зоны итогов для группы NZ и всего отчета, но поля для расчета средней оценки в них нет, хотя мы просили Мастера это сделать (см. рис. 6.3.). Заданное условие не было выполнено, т.к. поле ball имеет текстовый тип, а мы задали функцию для работы с числами. Для вычисления средней оценки придется самим добавить новое поле в отчет с расчетом средней оценки после преобразования в этом поле текстового значения в числовое с использованием функции Val(ball).
Контекстное меню для Конструктора отчетов (щелчок правой кнопкой мыши на пустом месте окна Report Designer ) содержит следующие пункты (рис. 6.5.):

Рис. 6.5. Контекстное меню
Для использования в отчете названий факультетов, специальностей и предметов необходимо открыть окно Data Environment, добавить в него справочные таблицы базы и правильно установить связи между ними, как показано на рис. 6.6. (для постоянных связей базы иногда возникает неправильное направление, связь должна идти от поля главной таблицы к индексу дочерней).

Рис. 6.6. Окно данных отчета
Для связи между таблицами Spisok и Ocenki должно быть установлено свойство OneToMany = .T.
Для таблицы Spisok в окне Properties для Data Environment зададим фильтр VAL(Ocenki.ball)>1 AND VAL(Ocenki.ball)<6 AND Ocenki.data_b=>{^2006/01/10} AND Ocenki.data_b<={^2006/02/06} - условие отбора студентов, у которых есть оценки (от 2 до 5, среди баллов могут быть отметки о неявке (Н), незачете (1), зачете (6) и пр.) в заданном периоде (в фильтре используется формат даты в виде {^ГГГГ/ММ/ДД}). Установленный фильтр имеет особенность: фильтр задан для таблицы Spisok, а его логическое выражение построено из значений полей таблицы Ocenki, что не совсем обычно, но допустимо при наличии связи между этими таблицами. Если данное выражение написать как фильтр для таблицы Ocenki, в отчет могут попасть студенты, у которых нет оценок за заданный период, и средняя оценка будет рассчитана неправильно.
Для дальнейшего оформления отчета необходимо присутствие на экране двух панелей инструментов - Report Controls и Layout.
Первая панель содержит те объекты, которые можно располагать на отчетах (рис. 6.7.).

Рис. 6.7. Панель объектов отчета
Так как наша задача - представить отчет с группировкой и расчетом средних оценок по факультетам, курсам, группам, необходимо добавить новые группы в отчет и модифицировать, соответственно, индексный файл главной таблицы. Выбрав пункт Data Grouping в контекстном или главном меню (раздел Report), добавим необходимые группы (рис. 6.8.).

Рис. 6.8. Страница группировки данных в окне свойств отчета
Далее перенесем номера факультетов, курсов и групп в зоны заголовков соответствующих групп, добавим поля с названиями из справочников факультетов, специальностей и предметов, добавим итоговые поля для расчета средних оценок (val(ocenki.ball)).
Новые поля можно создать с использованием соответствующей кнопки на панели Report Controls (рис. 6.7.) или копированием имеющихся в отчете полей (для сохранения заданного шрифта) с изменением данных, которые показывает поле (свойство Expression поля).
В свойствах итоговых полей (окно свойств выбранного поля открывается двойным кликом на нем, или выбором пункта Properties в его контекстном меню, или на клавиатуре Alt+Enter) в разделе Calculate следует правильно указать в пункте Calculation Type - Average (среднее) и в пункте Reset based on - соответствующую группу или End of Report для зоны Summary (см. рис. 6.9.).


Рис. 6.9. Окно свойств поля отчета. Страницы General и Calculate
Для таблицы Spisok следует модифицировать созданный Мастером сложный индекс с именем WIZARD_1 - добавить в него поле FIO: STR(n_fclt,2,0) + STR(kurs,1,0) + n_grup + fio.
Отчет в Конструкторе будет иметь вид, показанный на см. рис. 6.10..

увеличить изображение
Рис. 6.10. Окончательный вид отчета в Конструкторе
При предварительном просмотре (Preview) или после печати на принтере мы получим отчет, показанный на рис. 6.1. (примечание: перед формированием отчета откройте таблицу Ocenki, иначе заданный фильтр для таблицы Spisok вызовет сообщение об отсутствии алиаса Ocenki).

увеличить изображение
Рис. 6.11. Фрагмент отчета, напечатанного на принтере
Разработка проекта и исполняемой программы
Основой разработки программ для операционной системы Microsoft Windows в большинстве современных систем (VFP, Delphi, Visual C++, Visual Basic и пр.) является проект (Project).Проект выглядит на экране как особое окно, содержащее список всех компонентов, входящих в состав пользовательского приложения, и обеспечивающее легкий доступ к ним. В VFP окно проекта разбито на отдельные страницы по видам компонентов проекта.
Создать новый проект можно с помощью Мастера разработки проекта или самостоятельно. Более целесообразно использовать Мастер, зачастую с этого и следует начинать при разработке сложной системы (после разработки базы данных - сразу создать проект с помощью Мастера системы VFP 6.0 -7.0 - этот Мастер при генерации стандартного проект предложит создать также необходимые вам экранные формы, панели инструментов, отчеты, меню и пр.).
Однако иногда бывает необходимо создать небольшую исполняемую программу, работающую с базой данных, - для этого можно создать простейший проект следующим образом.
Создаем новый файл проекта (New - Project - New file), выбираем для нее папку и даем имя Students.pjx. В соответствующие группы пустого окна проекта добавляем созданные нами ранее экранную форму и отчет. Если вы хотите добавить в проект базу данных, она должна быть помечена как внешняя (
Exclude). После этого окно проекта будет иметь вид, приведенный на рис. 6.23. (форма Spisok.scx выделена в нем жирно как головная программа).
Рис. 6.23. Диаграмма, построенная по данным перекрестного запроса
На странице All представлены все виды компонентов, которые могут входить в состав проекта. При работе с большими проектами удобнее пользоваться отдельными страницами проект (Data, Documents, Classes, Code, Other).
Справа в окне проект расположена группа кнопок, нижняя из которых - Build: - компиляция проекта. Если мы нажмем на нее, появится список для выбора типа компиляции проекта (для тех, кто забыл: компиляция - перевод исходного текста программы на машинный язык, исполняемый в данной операционной системе).
Use navigation menu - показывать навигационное меню;
Appear in File New dialog - форма появляется в пункте New меню и панели инструментов;
Appear in File Open dialog - форма появляется в пункте Open
На странице 5 Reports следует указать Name - название, которое будет показано для отчета в окне Start, и Appears in Print Report dialog - показывать или нет отчет в диалоге печати отчетов.
После этого можно нажать кнопку OK и изучить, как выглядят экранные формы, отчеты и как ведет себя полученная программа после компиляции проекта.
Как правило, экранные формы и отчеты в дальнейшем подвергаются автором значительной модификации.
Особенность разработанной таким образом программы: на экранной форме нет навигационных кнопок и кнопок редактирования. Эти функции берут на себя панели инструментов (стандартная и навигационная), которые взаимодействуют с формами. Недостаток данного типа проекта - большой размер исполняемого файла в результате использования значительного количества дополнительных библиотек VFP.
Если скомпилировать такой проект в exe-файл (рис. 6.24.), на диске появится файл students.exe, но для данного состава проекта запускаться и нормально работать он будет только из системы VFP (из Windows он запустится и тут же завершит свою работу), т.к. в нем нет головной программы с командой запуска процесса обработки событий read events.

Рис. 6.24. Компиляция проекта
Для получения программы, работающей в операционной системе Windows, нужно сделать следующее:
сохраняем файл в своей папке с названием program1 или с другим названием и указываем в проекте, что это головная программа (правый клик на файле и выбрать команду Set Main);

Рис. 6.25. Процедура Destroy Event для формы Spisok
Далее снова компилируем программу и проверяем ее работу, запуская ее из папки Windows. Мы увидим, что окно экранной формы при запуске программы появляется внутри другого окна, имеющего некоторое стандартное меню. Если вы хотите, чтобы на экране было только окно вашей формы Spisok, можно изменить свойство формы ShowWindow на 2-As Top-Level Form и добавить первой строкой в головной файл проекта команду: _SCREEN.Visible=.F. (Вместо 2-го пункта можно создать в папке программы файл config.fpw и в нем написать строку SCREEN = OFF). В результате мы получим небольшую по размеру (около 250 Кб) программу, имеющую все основные возможности для работы с базой данных. Для запуска такой программы на другом компьютере потребуется сама база данных, файл этой программы (с расширением *.exe) и в доступном каталоге (например, Windows - System32) библиотечные файлы VFPVersionNumberR.dll and VFPVersionNumberRRUS.dll (для 9-й версии Vfp9r.dll - размер 4,49 Мб и Vfp9rrus.dll - 1,18 Мб).
Использование запросов
Ранее отмечалось, что для работы с данными, отобранными в соответствии с каким-либо условием, может быть использована возможность установить фильтр для таблицы базы данных или формы (в пункте меню Записи). В том же пункте меню есть раздел Расширенный фильтр, который открывает окно Конструктора запросов. Кроме того, Конструктор запросов фактически уже использовался при описании источника записей для отчета (см. рис. 7.25.).Для работы с запросами и для их сохранения в базе в системе Access присутствует специальный раздел, который позволяет создавать новые запросы в режиме конструктора или с помощью Мастера.
Запросы в системе Access бывают нескольких видов:
Принцип формирования запросов наиболее легко освоить при использовании Мастера запросов. Предположим, нам нужно отобрать тех студентов, которые по предмету Математика имеют только отличные оценки по результатам первого семестра. Для создания запроса выбираем в разделе Запросы базы режим Создание запроса с помощью Мастера.
На первом шаге следует выбрать таблицы и поля, которые нужно включить в запрос. Выбор полей может быть выполнен из нескольких таблиц базы.
Закроем окно конструктора и выполним запрос командой Открыть или двойным щелчком мышью. Результат отбора данных будет показан на экране в виде таблицы (рис. 7.32.). Следует помнить, что редактирование данных этой таблицы приведет к изменению информации в таблицах базы данных!

увеличить изображение
Рис. 7.32. Результаты выполнения запроса
Результаты выполнения запроса или данные таблиц можно представить в виде диаграмм и графиков. Создадим запрос, в котором покажем в графическом виде средний балл по студенческим группам по предмету "Математика" (№ предмета = 1). Для группировки данных, как отмечалось выше, в пункте "Вид" меню системы ставим галочку у строки "Групповые операции".
Получим следующий текст запроса:
SELECT Spisok.N_GRUP, OCENKI.N_PREDM, Avg(OCENKI.BALL) AS [Avg-BALL] FROM Spisok INNER JOIN OCENKI ON Spisok.NZ = OCENKI.NZ GROUP BY Spisok.N_GRUP, OCENKI.N_PREDM HAVING (((OCENKI.N_PREDM)=1));
Для представления данных в виде графика в меню Вид выбираем пункт Сводная диаграмма, после чего открывается окно Построителя диаграмм. Методы оформления диаграмм аналогичны использованию объекта Диаграмма Microsoft Graph в программах Microsoft Word или Excel. На рис. 7.33. показана диаграмма для приведенного выше запроса. На рис. 7.34. приведена трехмерная диаграмма для запроса следующего вида:
SELECT DISTINCTROW FCLT.NAME_F, PREDMETS.NAME_P, Avg(OCENKI.BALL) AS [Avg-BALL] FROM PREDMETS INNER JOIN ((Spisok INNER JOIN OCENKI ON Spisok.NZ = OCENKI.NZ) INNER JOIN FCLT ON Spisok.N_FCLT = FCLT.N_FCLT) ON PREDMETS.N_PREDM = OCENKI.N_PREDM GROUP BY FCLT.NAME_F, PREDMETS.NAME_P;

Рис. 7.33. Результаты выполнения запроса с группировкой данных, представленные в виде диаграммы

Рис. 7.34. Результаты выполнения запроса с группировкой данных, представленные в виде трехмерной диаграммы
С использованием запросов других видов одной командой можно изменять (команда SQL UPDATE) либо удалять (команда SQL DELETE) данные множества записей таблицы, отобранных по какому-либо условию, а также добавлять записи из других таблиц (команда SQL INSERT).
Компиляция базы данных (MDE-файл)
База данных Microsoft Access может быть сохранена в виде MDE-файла.Для этого необходимо выбрать в главном меню пункт "Сервис" - "Служебные программы" - "Создать MDE-файл", далее задать имя файла.
При сохранении базы в формате MDE будут скомпилированы все программные модули, удалены все исходные тексты программ, будет сжата. Программы Visual Basic будут по-прежнему выполняться, но их нельзя будет просматривать или изменять. Из-за удаления исходных кодов уменьшится размер базы данных, т.е. будет оптимизировано использование памяти, что повысит быстродействие базы данных .
Работа с базой данных не изменится. Пользователи по-прежнему смогут обновлять данные, запускать экранные формы, формировать отчеты.
Возможны модификация структуры таблиц, создание новых таблиц с использованием Конструктора и Мастера, изменение схемы базы данных с добавлением и удалением таблиц и связей между ними.
Невозможными становятся следующие действия, связанные с созданием компонентов приложения для работы с базой данных:
Общая характеристика системы
Система Microsoft Access является одним из основных компонентов Microsoft Office и предназначена для работы с реляционными базами данных. Особенность данной СУБД: вся информация базы данных хранится в одном файле (*.mdb). Кроме информации таблиц, в этом же файле сохраняются компоненты приложения для работы с базой данных - экранные формы, отчеты, запросы, программные модули.Для работы с базой данных система использует Microsoft Jet database engine - систему управления базами данных, извлекающую и сохраняющую данные в пользовательских и системных задачах. Ядро базы данных Microsoft Jet можно рассматривать как компонент диспетчера данных, с помощью которого строятся остальные системы доступа к данным, такие как Microsoft Access и Microsoft Visual Basic.
Язык написания программных модулей для работы с базой данных - Microsoft Visual Basic for Applications (VBA).
Основные возможности системы при работе с базами данных приведены в табл. 7.1.
| Размер файла базы данных (*.mdb) | 2 Гбайт за вычетом места, необходимого системным объектам |
| Число объектов в базе данных | 32 768 |
| Модули (включая формы и отчеты), свойство Наличие модуля (HasModule) которых имеет значение True) | 1 000 |
| Число знаков в имени объекта | 64 |
| Число знаков в пароле | 14 |
| Число знаков в имени пользователя или имени группы | 20 |
| Число одновременно работающих пользователей | 255 |
| Число знаков в имени таблицы | 64 |
| Число знаков в имени поля | 64 |
| Число полей в таблице | 255 |
| Число открытых таблиц | 2048 (фактическое число может быть меньше из-за внутренних таблиц, открываемых Microsoft Access) |
| Размер таблицы | 2 Гбайт за вычетом места, необходимого системным объектам |
| Число знаков в текстовом поле | 255 |
| Число знаков в поле MEMO | 65 535 при вводе данных через интерфейс пользователя;1 Гбайт для хранения знаков при программном вводе данных |
| Размер поля объекта OLE | 1 Гбайт |
| Число индексов в таблице | 32 |
| Число полей в индексе | 10 |
| Число знаков в сообщении об ошибке | 255 |
| Число знаков в условии на значение записи | 2048 |
| Число знаков в описании таблицы или поля | 255 |
| Число знаков в записи (кроме полей MEMO и полей объектов OLE) | 2000 |
| Число знаков в значении свойства поля | 255 |
| Число установленных связей | 32 на одну таблицу за вычетом числа индексов, находящихся в таблице для полей или сочетаний полей, которые не участвуют в связях |
| Число таблиц в запросе | 32 |
| Число полей в наборе записей | 255 |
| Размер набора записей | 1 Гбайт |
| Предел сортировки | 255 знаков в одном или нескольких полях |
| Число уровней вложения запросов | 50 |
| Число знаков в ячейке на бланке запроса | 1024 |
| Число знаков для параметра в запросе с параметрами | 255 |
| Число операторов AND в предложении WHERE или HAVING | 99 |
| Число знаков в инструкции SQL | приблизительно 64000 |
| Число знаков в надписи | 2048 |
| Число знаков в поле | 65535 |
| Ширина формы или отчета | 22 дюйма (55,87 см) |
| Высота раздела | 22 дюйма (55,87 см) |
| Высота всех разделов плюс заголовки разделов (в режиме конструктора) | 200 дюймов (508 см) |
| Число уровней вложения форм или отчетов | 7 |
| Число полей или выражений, которые можно отсортировать или сгруппировать в отчете | 10 |
| Число заголовков и примечаний в отчете | 1 заголовок/примечание отчета; 1 заголовок/примечание страницы; 10 заголовков/примечаний групп |
| Число печатных страниц в отчете | 65536 |
| Число элементов управления и разделов, которые можно добавить за время существования формы или отчета | 754 |
| Число знаков в инструкции SQL, работающей в качестве свойства Источник записей (RecordSource) или Источник строк (RowSource) формы, отчета или элемента управления (оба .mdb и .adp) | 32750 |
| Число макрокоманд в макросе | 999 |
| Число знаков в условии | 255 |
| Число знаков в комментарии | 255 |
| Число знаков в аргументе макрокоманды | 255 |
В табл. 7.2. приведены сведения о типах данных, которые могут иметь поля в таблицах.
| Текстовый | String | Текст, состоящий из любых символов в кодировке Unicode (2 байта на символ) | До 255 символов |
| Поле МЕМО | String | Текст в кодировке Unicode | До 64000 символов |
| Числовой(Байт, Целое, Длинное целое, Одинарное с плавающей точкой, Двойное с плавающей точкой, Код репликации, Действительное) | Byte, Integer,Long,Single,Double | Числовые данные | 1, 2, 4 или 8 байтов. 16 байтов только для кодов репликации (GUID) |
| Дата/времяПолный формат даты. Длинный формат даты. Средний формат даты. Краткий формат даты. Длинный формат времени. Средний формат времени. Краткий формат времени | Date | Даты и время. 31.12.04 23:55:5931 декабря 2004 г.31-дек-0431.12.0423:55:5911:5523:55 | 8 байтов(при активации поля всегда показывает полный формат даты) |
| Денежный | Currency | Значения валют. Денежный тип используется для предотвращения округлений во время вычислений. Предполагает до 15 символов в целой части числа и 4 - в дробной | 8 байтов |
| Счетчик | Автоматическая вставка последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи. | 4 байта. 16 байтов только для кодов репликации (GUID) | |
| Логический | Boolean | Поля, содержащие только одно из двух возможных значений, таких как Да/Нет, Истина/Ложь, Вкл/Выкл. | 1 бит |
| Поле объекта OLE | String | Объекты (например, документы Microsoft Word, электронные таблицы Microsoft Excel, рисунки, звуки и другие двоичные данные), созданные в программах, использующих протокол OLE. Объекты могут быть связанными или внедренными. | До 1 гигабайта (ограничено объемом диска) |
| Гиперссылка | String | Поле, в котором хранятся гиперссылки. Гиперссылка может иметь вид пути UNC, либо URL-адреса | До 64000 символов |
| Мастер подстановок | Создает поле, позволяющее выбрать значение из другой таблицы или из списка значений, используя поле со списком. При выборе данного типа запускается Мастер для определения этого поля | Тот же размер, который имеет первичный ключ, являющийся полем подстановок |
Система Microsoft Access имеет собственные средства для разграничения прав доступа пользователей к базе данных.
Простейшим способом ограничения доступа к базе данных является установка пароля для открытия базы данных (*.mdb). После установки пароля при каждом открытии базы данных будет появляться диалоговое окно, в которое требуется ввести пароль. Этот способ достаточно надежен (Microsoft Access шифрует пароль, поэтому к нему нет доступа при непосредственном чтении файла базы данных), но он действует только при открытии базы данных. После открытия базы все объекты становятся доступными для пользователя (пока не определены другие типы защиты, описанные ниже в этом разделе). Для базы данных, которая совместно используется небольшой группой пользователей или на автономном компьютере, обычно оказывается достаточно установки пароля.
База данных может быть зашифрована. При шифровании базы данных ее файл сжимается и становится недоступным для чтения служебными программами или текстовыми редакторами. Дешифрование базы данных отменяет результаты операции шифрования.
Нельзя использовать установку пароля на базу данных, если предполагается выполнять репликацию базы. Реплицированные базы данных не могут быть синхронизированы, если установлен пароль базы данных.
Защита на уровне пользователей имеет большие возможности по разграничению прав. Этот способ подобен способам, используемым в большинстве сетевых систем.
При запуске Microsoft Access от пользователя требуется идентифицировать себя и ввести пароль. Microsoft Access по умолчанию создает две группы: администраторы (группа Admins) и простые пользователи (группа Users). Допускается определение других групп и пользователей.
Члены группы Admins имеют разрешения на доступ ко всем объектам базы данных. Другим группам и пользователям могут предоставляться разрешения на доступ только к отдельным объектам базы данных. Типовые разрешения на доступ для группы Users могут включать "Чтение данных" и "Обновление данных" для таблиц и запросов, а также "Открытие/запуск" для форм и отчетов.
Проект Microsoft Access (ADP)
Проект Microsoft Access (*.adp) является файлом данных Microsoft Access, обеспечивающим эффективную работу с базами данных Microsoft SQL Server. Используя проект Microsoft Access, можно создавать приложения в архитектуре "клиент/сервер" так же легко, как приложения файлового сервера.Приложение в архитектуре "клиент/сервер" может быть традиционным решением, основанным на формах и отчетах, или решением на базе Интернета, использующим страницы доступа к данным.
Проект Microsoft Access можно подключить к удаленной базе данных Microsoft SQL Server, локальной базе данных Microsoft SQL Server или к локальной установке Microsoft SQL Server 2000 Desktop Engine (MSDE).
Файл проекта не содержит данные или объекты определения данных, такие как таблицы и представления.
В проекте можно создавать и использовать для работы с данными формы, отчеты, запросы, модули, страницы доступа к данным.
Краткие сведения о работе с проектом Microsoft Access будут даны в следующей лекции, которая посвящена системе Microsoft SQL Server.
Разработка экранных форм для работы с базой данных
Экранные формы позволяют организовать наглядную и удобную работу с базой данных, состоящей из большого количества связанных таблиц реляционной базы данных. В этом случае на одном экране можно организовать работу с главной и подчиненными таблицами, осуществлять выбор данных из таблиц-справочников с использованием раскрывающихся списков, использовать режимы поиска и отбора информации, печати необходимых отчетов на принтере и пр.Имеющийся в системе Мастер разработки экранных форм позволяет легко создавать экранные формы нескольких видов (простые - для работы с данными одной таблицы, более сложные - для работы с несколькими таблицами с использованием подчиненных форм). Полученные формы далее, как правило, приходится дополнять и модифицировать в конструкторе экранных форм для реализации всех необходимых условий работы с базой.
Для разработки экранной формы в окне базы данных выбираем объект Формы и на странице форм - режим Создание формы с помощью Мастера. Далее следует ответить на ряд вопросов Мастера:
Полученная экранная форма будет открыта в конструкторе форм, в базе данных на странице Формы появятся две новые - Студенты и Оценки студента. Для более детального отображения в конструкторе подчиненной формы лучше закрыть окно и снова открыть в конструкторе форму Студенты, в этом случае она будет иметь вид, приведенный на рис. 7.10.
Экранные формы позволяют организовать наглядную и удобную работу с базой данных, состоящей из большого количества связанных таблиц реляционной базы данных. В этом случае на одном экране можно организовать работу с главной и подчиненными таблицами, осуществлять выбор данных из таблиц-справочников с использованием раскрывающихся списков, использовать режимы поиска и отбора информации, печати необходимых отчетов на принтере и пр.
Имеющийся в системе Мастер разработки экранных форм позволяет легко создавать экранные формы нескольких видов (простые - для работы с данными одной таблицы, более сложные - для работы с несколькими таблицами с использованием подчиненных форм). Полученные формы далее, как правило, приходится дополнять и модифицировать в конструкторе экранных форм для реализации всех необходимых условий работы с базой.
Для разработки экранной формы в окне базы данных выбираем объект Формы и на странице форм - режим Создание формы с помощью Мастера. Далее следует ответить на ряд вопросов Мастера:
Полученная экранная форма будет открыта в конструкторе форм, в базе данных на странице Формы появятся две новые - Студенты и Оценки студента. Для более детального отображения в конструкторе подчиненной формы лучше закрыть окно и снова открыть в конструкторе форму Студенты, в этом случае она будет иметь вид, приведенный на рис. 7.10.

Рис. 7.10. Экранная форма, созданная с помощью Мастера
На полученной форме не все надписи полностью видны, расположение полей тоже можно улучшить.
Для формы и всех ее элементов можно открыть окно Свойства, щелкнув правой кнопкой мыши на любом объекте и выбрав в контекстном меню слово Свойства (рис. 7.11.). Кроме того, в контекстном меню присутствуют такие важные при оформлении объектов возможности, как "Выровнять" - полезно для выравнивания группы объектов, "Размер", "Цвет:", "Оформление", "Условное форматирование".


Рис. 7.11. Окно свойств для объекта Форма, страницы Макет и Данные
Все свойства в окне разбиты на группы:
Макет - расположение, шрифт, цвет и прочее, связанное с внешним видом объекта;
Данные - в этом разделе важнейшее свойство - Данные или Источник записей - для объектов, связанных с редактированием каких-либо данных;
События - методы, т.е. процедуры (программы), выполняющиеся для объекта при наступлении определенных событий (Загрузка, Открытие, До обновления, После обновления и пр.);
Другие - прочие свойства.
На экранной форме присутствуют элементы (объекты) следующих типов: Надпись - текст на форме, обычно не изменяющийся. Главные свойства этого объекта присутствуют на странице Макет окна свойств (рис. 7.12.).
Поле - поле редактирования, связанное с полем базы данных или переменной. Главное свойство этого объекта - строка Данные на странице Данные окна свойств (рис. 7.13.).

Рис. 7.12. Окно свойств объекта типа Надпись

Рис. 7.13. Окно свойств объекта типа Поле
Подчиненная форма - вложенная форма для таблицы данных, связанной с главной таблицей, на которой могут присутствовать такие же элементы, как и на основной форме.
Поле со списком - сложный элемент, предоставляющий возможность показывать данные справочных таблиц, списков или массивов и заносить выбранные значения в поле другой таблицы (9-й элемент панели, окно свойств, см.
рис. 7.14.).

Рис. 7.14. Окно свойств объекта типа Поле со списком

Рис. 7.15. Панель элементов экранной формы
Кроме того, на форме могут присутствовать и другие объекты, которые можно добавлять, используя кнопки Панели элементов (рис. 7.15.), список типов объектов приведен ниже.

Рис. 7.16. Окно Мастера создания кнопок
Для использования экранной формы нужно запустить ее в работу. Для этого закроем окно конструктора и выберем команду Открыть формы Студенты. Вид формы при работе с базой данных приведен на рис. 7.17.

Рис. 7.17. Работа с базой данных с использованием экранной формы
В данном режиме можно редактировать существующие записи, добавлять новые в список студентов и список оценок для каждого студента. Для удаления записей можно добавить с помощью Мастера кнопку категории Обработка записей с действием Удалить запись на основную форму.
Разработка отчетов
Для разработки печатных форм - отчетов, отражающих информацию базы данных - в системе Access можно использовать режим Создание отчета с помощью Мастера раздела базы Отчеты, с усовершенствованием отчета в дальнейшем в режиме Конструктора отчетов. Отчеты могут быть созданы на основе всей информации, присутствующей в таблицах базы, но чаще для отчетов необходимо отобрать нужную информацию из базы с использованием SQL-запроса и на основе его создать отчет. Важным свойством отчетов является возможность группировки данных и получения итоговых данных для групп и всего отчета.Поставим задачу разработать отчет, в котором показаны оценки всех студентов с группировкой данных по факультетам, курсам, группам.
Для этого выбираем раздел Отчеты и режим Создание отчета с помощью Мастера. На первом шаге Мастера выбираем поля главной таблицы базы (SPISOK), которые мы хотим показать в отчете, и все поля дочерней таблицы оценок (OCENKI) (рис. 7.20.).

Рис. 7.20. Выбор полей для отчета в Мастере отчетов
На втором шаге Выберите вид представления данных - выбираем первый вариант, когда выделена таблица SPISOK.
На третьем шаге задаем группировку данных по факультетам, курсам и группам. Более трех уровней группировки Мастер задать не позволяет (рис. 7.21.).

Рис. 7.21. Группировка данных в отчете
Сортировку на следующем шаге не задаем.
На пятом шаге выбираем вид макета для отчета по левому краю, на следующем - стиль отчета - обычный, далее задаем название отчета Студенты и их оценки и нажимаем кнопку Готово.
Полученный отчет в режиме Конструктора представлен на рис. 7.22.

увеличить изображение
Рис. 7.22. Отчет, созданный с помощью Мастера
В полученном отчете присутствуют объекты трех видов - Поле, которое в отчете будет показывать данные поля таблицы базы или запроса, Надпись - любой текст в отчете, и Линия - элемент оформления.
В Конструкторе отчет разбит на отдельные зоны, информация которых может присутствовать в отчете один раз (Заголовок отчета и Примечание отчета), в начале и в конце каждой страницы (Верхний колонтитул и Нижний колонтитул), в начале и в конце каждой группы (Заголовок группы и Примечание группы, групп может быть много) и для каждой записи таблицы (Область данных).
Зоны Примечания: более правильно было бы назвать Итоги:, т.к. здесь можно поместить поля общих итогов (сумма, среднее и пр.) для группы или всего отчета.
Полученный отчет можно просмотреть на экране, отправить на принтер (например, с использованием соответствующих кнопок на стандартной панели инструментов), в Microsoft Word или Excel (из режима предварительного просмотра).
Вид отчета в режиме предварительного просмотра приведен на рис. 7.23.

Рис. 7.23. Отчет в режиме предварительного просмотра
Созданный Мастером отчет весьма несовершенен и излишне приукрашен жирными линиями, крупным шрифтом. В отчет необходимо добавить названия факультетов, специальностей и предметов и изменить их подписи. Для добавления новых объектов следует использовать "Панель элементов" или окно "Список полей" (главное меню "Вид" - "Список полей"), для модификации - окно свойств объекта и контекстное меню, для настройки параметров страницы (полей и размера бумаги) следует воспользоваться соответствующим пунктом в разделе Файл главного меню системы.
Для использования в отчете данных справочных таблиц их следует включить в Источник записей окна свойств отчета (см. рис. 7.24.). После нажатия на кнопочку с изображением трех точек откроется окно Построителя запросов, которое после добавления нужных таблиц будет иметь вид, показанный на рис. 7.25. Для добавления таблиц в запрос (показаны в верхней части экрана Построителя) можно воспользоваться контекстным меню. После этого нужно добавить 3 поля - NAME_F, NAME_P и NAME_S в список используемых полей в нижней части экрана. Далее следует закрыть окно Построителя запросов с сохранением изменений.

Рис. 7.24. Окно свойств отчета, страница Данные

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

Рис. 7.26. Окно "Сортировка и группировка" отчета
В зоны примечаний поместим вычисляемые поля, которые будут показывать средние оценки для студента, группы, факультета и для всего отчета. При создании вычисляемых полей проще всего скопировать поле BALL из зоны "Область данных" в зону "Примечание группы:", далее перейти в окно свойств этого объекта и в пункте Данные нажать на кнопку с многоточием, после чего откроется окно Построителя выражений, где можно найти в списке функций AVG (среднее) и задать выражение AVG (BALL) (рис. 7.27.).

Рис. 7.27. Создание вычисляемого поля для зоны примечаний отчета
Далее следует поместить в отчет Надпись "средняя оценка студента", после чего скопировать это поле и надпись в другие зоны отчета. Вид отчета после модификации приведен на рис. 7.28.

увеличить изображение
Рис. 7.28. Отчет после его модификации в Конструкторе
Отчет при печатании на бумаге будет выглядеть, как показано на рис. 7.29.

увеличить изображение
Рис. 7.29. Окончательный вариант отчета, напечатанный на принтере
Создание базы данных
Процесс создания базы данных рассмотрим на примере описанной ранее (лекция 3) модели базы данных информационной системы "Контингент студентов университета".В системе Microsoft Access процесс создания базы данных выполняется следующим образом. При запуске системы появляется диалоговое окно для выбора режима работы (рис. 7.1), в котором следует выбрать пункт Новая база данных...

Рис. 7.1. Создание файла
После выбора первого пункта появляется окно для задания пути сохранения и имени новой базы.
Выберем папку на диске для сохранения файла базы данных и зададим имя базы - STUDENTS, нажмем на кнопку Создать, после чего откроется окно базы данных.
Далее необходимо задать структуру таблиц в соответствии с описанной ранее концептуальной моделью. Можно также воспользоваться сгенерированной ранее системой Case Studio - программой создания таблиц базы данных, однако, далее описан режим создания таблиц с помощью Конструктора. Умение использовать этот режим необходимо каждому пользователю для создания новых таблиц и модификации структуры уже существующих.
Выберем пункт Создание таблицы в режиме конструктора (рис. 7.2) и опишем структуру главной таблицы базы данных, т.е. зададим имя, тип, размер каждого поля таблицы, а также первичный ключ (если необходимо), индексированные поля и подпись (рис. 7.3). Имена полей лучше писать латинскими буквами, в одно короткое слово - для удобства использования их в запросах и программах, работающих с базой данных; задание подписей для полей облегчает разработку экранных форм и отчетов.

Рис. 7.2. Окно базы данных

Рис. 7.3. Описание структуры таблицы в конструкторе
Структура таблицы SPISOK приведена в табл. 7.3.
| NZ | Текстовый | 8 | Да (Совпадения не допускаются) | № зачетки |
| FIO | Текстовый | 45 | Фамилия, имя, отчество | |
| DATA_P | Дата/время | Краткий формат даты | Дата поступления | |
| N_FCLT | Числовой | Байт | Да (Совпадения допускаются) | Факультет |
| N_SPECT | Текстовый | 7 | Да (Совпадения допускаются) | Специальность |
| KURS | Числовой | Байт | Курс | |
| N_GRUP | Текстовый | 10 | Группа | |
| N_PASP | Текстовый | 10 | Номер паспорта |
Для поля NZ следует задать свойство "Ключевое поле", т.к. номер зачетки - уникальный для каждого студента и однозначно его идентифицирует в таблице базы. По окончании описания структуры таблицы даем команду Сохранить (на стандартной панели инструментов, в меню - раздел Файл, или при закрытии окна конструктора) и задаем название таблицы - SPISOK.
Аналогичным образом создаем в базе данных справочник факультетов с именем файла FCLT, структура его приведена в табл. 7.4.
| N_FCLT | Числовой | Байт | Да (Совпадения не допускаются) | Номер факультета |
| NAME_F | Текстовый | 120 | Название факультета |
| NZ | Текстовый | 7 | Да (Совпадения допускаются) | Номер зачетки |
| SEMESTR | Числовой | Байт | Семестр | |
| N_PREDM | Числовой | Целое | Да (Совпадения допускаются) | Предмет |
| BALL | Текстовый | 1 | Оценка | |
| DATA_B | Дата/время | Краткий формат | Дата | |
| PREPOD | Текстовый | 45 | Преподаватель |
| N_PREDM | Числовой | Целое | Да (Совпадения не допускаются) | Номер предмета |
| NAME_P | Текстовый | 120 | Название предмета |

Рис. 7.4. Схема базы данных

Рис. 7.5. Задание условий соблюдения ссылочной целостности данных
Стандартный режим работы с таблицами
Заполнение базы данных информацией следует начинать со справочников - иначе при заполнении главных таблиц возникнут конфликты сохранения ссылочной целостности базы. Например, если в справочнике факультетов не будет номера факультета, указанного для студента, появится сообщение "Введенное значение не подходит для данного поля" и Вы не сможете сохранить данные, пока не укажете правильное значение.Для работы с информацией таблицы базы данных (добавление, редактирование и удаление записей) следует выбрать ее в разделе объектов базы данных "Таблицы" (см. рис. 7.6.) и двойным щелчком мыши открыть.

Рис. 7.6. База данных
Таблица откроется в стандартном режиме работы с информацией, как показано на рис. 7.7.

Рис. 7.7. Стандартный режим работы с таблицей базы данных
В таком режиме каждая запись таблицы базы данных представлена как строка, состоящая из столбцов - полей, над которыми показаны подписи полей или, при их отсутствии, имена полей. В нижней части таблицы присутствует пустая запись с символом * в левой колонке - это несуществующая запись, которая добавляется в таблицу, как только в ней появляется какая-либо информация. На нижней рамке окна находятся кнопки для перемещения по таблице, номер текущей записи и информация об общем количестве записей в таблице. Колонка слева с символом + имеется в наличии, если у таблицы есть связь от одной записи данной таблицы ко многим записям связанной с ней таблицы. В данном случае при щелчке мышью на плюсе откроется как подтаблица - список студентов для соответствующего факультета. Настройка подтаблицы присутствует в главном меню в разделе Вставка.
В системе Microsoft Access существуют также дополнительные возможности использования в таблицах режима "Подстановка" для показа и выбора данных из раскрывающихся списков ("тип источника строк" - таблица или запрос, список значений или список полей). Этот режим можно создать с помощью Мастера, если выбрать тип поля "Мастер подстановок" или описать самому на странице "Подстановка".
В примере этот режим задан для поля N_FCLT таблицы Spisok (см. рис. 7.8.). В дальнейшем для поля с описанными свойствами раздела "Подстановка" на экранной форме будет автоматически создаваться объект типа "Поле со списком".

Рис. 7.8. Параметры страницы "Подстановка" в Конструкторе
Вид таблицы Spisok с использованием поля со списком для поля N_FCLT показан на рис. 7.9.

увеличить изображение
Рис. 7.9. Таблица с использованием режима "Подстановка"
При работе с таблицей можно задать сортировку записей по одному из полей и фильтр для показа данных, соответствующих заданному условию (см. раздел меню Записи).
После окончания добавления, редактирования или удаления данных следует дать команду Сохранить, или при закрытии окна таблицы выбрать в появившемся окне команду, сохранять или нет изменения.
Страницы доступа к данным
Страницы доступа к данным представляют специальный тип Web-страниц, предназначенный для просмотра и работы через Интернет или интрасеть с данными, хранящимися в базах данных Microsoft Access или в базах данных Microsoft SQL Server. Страница доступа к данным может также включать данные из других источников, например, Microsoft Excel.Использование страниц доступа для работы с данными аналогично использованию экранных форм: пользователь имеет возможность просматривать, редактировать, добавлять и удалять записи в таблицах базы данных. Однако страницу можно использовать и за пределами системы Microsoft Access, предоставляя пользователям возможность обновлять или просматривать данные через Интернет или интрасеть с использованием браузера Microsoft Internet Explorer 5.01 с пакетом SP2 или более поздних версий. Страницы могут распространяться в электронном виде с помощью электронной почты; получатели будут видеть текущие данные при каждом открытии сообщения.
На рис. 7.35. показана страница доступа к данным "Оценки студентов", разработанная в системе Microsoft Access с помощью Конструктора. Для переходов между записями, а также для добавления, удаления, сохранения, сортировки и отбора записей и для вызова справки предназначен стандартный набор кнопок.

Рис. 7.35. Страница доступа к данным в режиме работы с информацией базы
В Конструкторе страница доступа состоит из групп, которые подразделяются на разделы (Section): подпись, верхний колонтитул, нижний колонтитул, кнопки перехода (см. рис. 7.36.).

Рис. 7.36. Страница доступа к данным в Конструкторе
Каждый уровень группировки на странице доступа к данным имеет источник записей. Имя источника записей отображается в строке заголовка каждого раздела для данного уровня группировки.
Страница представляет собой отдельный файл, хранящийся за пределами Access. При создании этого файла Microsoft Access добавляет его ярлык в окно базы данных. Разработка страниц доступа к данным аналогична разработке форм и отчетов: используется список полей, панель элементов и т.д. Тем не менее, приемы разработки страниц доступа к данным имеют ряд существенных отличий от разработки форм и отчетов.
На страницах не допускается изменение полей группировки и вычисляемых полей. Если не удается установить курсор ни в одно поле на странице, страница не поддерживает изменение записей.
Использование Microsoft Access для работы с базой данных системы Microsoft SQL Server
В базе данных Microsoft Access можно установить связь с таблицами базы данных системы SQL Server. Для этого следует выбрать команду Связь с таблицами: (в контекстном меню базы) и создать новое соединение с базой данных системы SQL Server (или выбрать существующее) с выбором драйвера SQL Server.Для этого выбираем для связи "тип файлов" - "Базы данных ODBC" и в появившемся окне выбираем команду "New:". В следующем окне "Create New data Source" выбираем драйвер "SQL Server" и задаем имя соединения - Students_SQL. После этого в окне "Create a New Data Source to SQL Server" задаем имя SQL-сервера (для установки по умолчанию это имя local и выбираем из списка имя базы данных, с которой устанавливается соединение - Students.
В последнем окне SQL Server ODBC Data Source Test должны получить сообщение TESTS COMPLETED SUCCESSFULLY!
Далее можно выбрать таблицы базы SQL Server для использования в Microsoft Access (рис. 8.26).

Рис. 8.26. Окно выбора таблиц базы данных
В результате в списке таблиц базы Microsoft Access мы увидим связь с выбранными таблицами базы Microsoft SQL Server. При этом существует возможность редактирования, добавления и удаления информации в этих таблицах, после команды Сохранить данные переписываются в базу SQL Server.
Работа с данными системы Microsoft SQL Server может быть организована с использованием проекта Microsoft Access.
Проект Microsoft Access (*.adp) представляет собой новый тип файлов Access, предоставляющих эффективный, естественный доступ к базам данных Microsoft SQL Server с помощью архитектуры компонентов OLE DB. В архитектуре OLE DB приложения, получающие доступ к данным, называют потребителями данных (например, Microsoft Access 2000 или Microsoft Visual Basic 6.0), а программы, обеспечивающие внутренний доступ к данным, называют средствами доступа к базам данных (например, Microsoft OLE DB Provider для SQL Server или Microsoft Jet 4.0 OLE DB Provider).
С помощью проекта Access можно легко создать приложение типа "клиент-сервер". Для этого выбираем команду "Новый проект с имеющимися данными" и выбираем связь с базой данных Students на SQL-сервере (см. рис. 8.27).

Рис. 8.27. Окно задания связи с базой данных для нового проекта Microsoft Access
Полученное окно проекта (рис. 8.28) внешне почти ничем не отличается от окна базы данных Microsoft Access. В окне присутствует новый раздел - "Схемы баз данных", в окне Конструктора таблиц используются типы данных системы SQL Server, схема базы данных имеет тот же вид, что и в системе SQL Server.

Рис. 8.28. Окно проекта Microsoft Access
Работа с проектом Microsoft Access очень похожа на работу с базой данных Access. Процесс создания форм, отчетов, страниц доступа к данным, макросов и модулей одинаков. Подключившись к базе данных SQL Server, можно просматривать, создавать, изменять и удалять таблицы, представления, сохраненные процедуры и схемы баз данных. В проекте можно применять Мастер для разработки форм, отчетов и Web-страниц доступа к данным.
Проект Microsoft Access использует MSDE (Microsoft Data Engine) - новую технологию, обеспечивающую совместимость локального хранения данных с Microsoft SQL Server. MSDE можно рассматривать как ядро обработки данных в архитектуре "клиент-сервер", альтернативное ядру базы данных Microsoft Jet для файлового сервера. Технология MSDE разработана и оптимизирована для применения на малых компьютерах, таких как рабочие станции пользователей или малые серверы рабочих групп.
Для экспорта данных и объектов Microsoft Access в формат SQL Server может быть использован мастер преобразования в формат SQL Server. Мастер преобразует базу данных Microsoft Access (.mdb) в новую или существующую базу данных Microsoft SQL Server либо в новый проект Microsoft Access (.adp) путем преобразования данных, описаний данных и переноса объектов базы данных.
Использование Visual FoxPro для работы с базой данных системы Microsoft SQL Server
В Visual FoxPro 8.0 и 9.0 существуют два способа установления связи и выполнения обмена данными с системой Microsoft SQL Server:
увеличить изображение
Рис. 8.29. Установление связи с базой данных SQL Server в проекте Visual FoxPro

увеличить изображение
Рис. 8.30. Задание параметров обновления данных удаленного представления для базы системы SQL Server

Рис. 8.31. Создание объекта CursorAdapter для связи с базой SQL сервера
Далее с созданными временными таблицами можно работать как с обычными таблицами баз данных Visual FoxPro в режиме оптимистической буферизации данных.
Общая характеристика системы
Microsoft SQL Server - одна из наиболее мощных систем работы с базами данных в архитектуре "клиент-сервер". Особенность системы - работа сервера только в операционных системах ряда Microsoft Windows NT - NT Server 4.0, 2000 Server, Server 2003, при этом клиентская часть может взаимо-действовать с сервером из Microsoft Windows 98 и других операционных систем. Рекомендуемая файловая система для SQL Server - NTFS, хотя возможна работа и в системе FAT.В своем составе система имеет средства создания баз данных, работы с информацией баз данных, перенесения данных из других систем и в другие системы, резервного копирования и восстановления данных, развитую систему транзакций, систему репликации данных, реляционную подсистему для анализа, оптимизации и выполнения запросов клиентов, систему безопасности для управления правами доступа к объектам базы данных и пр. (см. рис. 8.1). Система не содержит средств разработки клиентских приложений. В таблицах 8.1-8.3 приведены некоторые максимальные возможности системы.

Рис. 8.1. Основные компоненты в архитектуре системы
| Размер базы данных | 1 048 516 TB |
| Количество объектов в базе данных | 2 147 483 647 |
| Количество экземпляров сервера на одном компьютере | 16 |
| Количество баз данных в одном экземпляре сервера | 32767 |
| Количество файлов в базе данных | 32767 |
| Количество таблиц в базе данных | ограничено количеством объектов в базе |
| Количество полей в таблице базы | 1024 |
| Размер файла данных | 32 TB |
| Длина идентификаторов | 128 символов |
| Уровень вложенных хранимых процедур | 32 |
| Уровень вложенных запросов | 32 |
| Количество некластерных индексов для одной таблицы базы | 249 |
| Количество полей в одном индексе | 16 |
| Количество байт в одном индексе | 800 |
| Количество таблиц в одном запросе | 256 |
| Количество байт в одной строке таблицы | 8060 |
| Microsoft Windows 2000 DataCenter | 32 | 4 | 2 | 32 | 3 | - | 32 |
| Windows 2000 Advanced Server | 8 | 4 | 2 | 8 | 2 | - | 8 |
| Windows 2000 Server | 4 | 4 | 2 | 4 | 2 | - | 4 |
| Windows 2000 Professional | - | - | 2 | 2 | 2 | - | 2 |
| Microsoft Windows NT®4.0 Server, Enterprise Edition | 8 | 8 | 2 | 8 | 2 | - | 8 |
| Windows NT 4.0 Server | 4 | 4 | 2 | 4 | 2 | - | 4 |
| Windows NT 4.0 Workstation | - | - | 2 | 2 | 2 | - | 2 |
| Microsoft Windows 98 | - | - | 1 | Use Desktop Engine | 1 | - | - |
| Windows CE | - | - | - | - | - | 1 | - |
| Windows 2000 DataCenter | 64 | 2 | 2 | 64 | 2 | - | 64 |
| Windows 2000 Advanced Server | 8 | 2 | 2 | 8 | 2 | - | 8 |
| Windows 2000 Server | 4 | 2 | 2 | 4 | 2 | - | 4 |
| Windows 2000 Professional | - | - | 2 | 2 | 2 | - | 2 |
| Windows NT 4.0 Server, Enterprise Edition | 3 | 2 | 2 | 3 | 2 | - | 3 |
| Windows NT 4.0 Server | 2 | 2 | 2 | 2 | 2 | - | 2 |
| Windows NT 4.0 Workstation | - | - | 2 | 2 | 2 | - | 2 |
Работа с информацией баз данных в программе Enterprise Manager
Для добавления новых записей в таблицы, редактирования и удаления информации можно использовать команду Open table для выбранной таблицы (рис. 8.23).
увеличить изображение
Рис. 8.23. Выбор режима работы
При этом можно представить в окне таблицы все данные или отобрать необходимые данные с заданием условий в запросе (рис. 8.24).

Рис. 8.24. Окно конструктора запросов
Разработка клиентских приложений
Основной язык работы с базой данных в системе Microsoft® SQL Server™ 2000 - Transact-SQL.Программы на этом языке генерируют такие системы, как Microsoft Visual C++®, Microsoft Visual Basic®, Microsoft Visual J++® и другие, использующие при разработке клиентских приложений программный интерфейс общего назначения (Application Programming Interface - API) ADO, OLE DB или ODBC:
По архитектуре ADO - интерфейс прикладного уровня, который использует OLE DB, библиотеку интерфейсов COM. Использование ADO ограждает прикладного разработчика от потребности программирования COM интерфейсов.
ActiveX® - это набор технологий, позволяющий компонентам программного обеспечения взаимодействовать друг с другом в сетевой среде, независимо от использовавшихся для их создания языков программирования.
OLE - связывание и внедрение объектов.
COM - технология Windows - Component Object Model.
Компоненты системы SQL Server, необходимые большинству приложений, поддерживают ADO при использовании Microsoft OLE DB Provider for SQL Server.
При разработке приложений в системе Microsoft Visual Studio .NET используется объект доступа к данным ADO .NET, предоставляющий новые возможности по работе в режиме отрыва от источника данных (соединение только на время получения и пересылки данных) [7].
OLE DB Provider for SQL Server использует специфичные свойства провайдера, интерфейсы и методы компонентов SQL Server, не включенные в OLE DB-спецификации. Большинство этих определенных провайдером компонентов не доступно через ADO.
SQL Server устанавливает свой драйвер для работы приложений с его базами.
Второй язык работы с базой данных в системе Microsoft® SQL Server™ 2000 - Xpath - язык, описанный в стандарте W3C (World Wide Web Consortium), использует XML-формат документов. Интерфейс взаимодействия с системой SQL Server - ADO API, OLE DB API.
Схема взаимодействия клиентских компонентов и сервера показана на рис. 8.25.

Рис. 8.25. Схема взаимодействия клиентских компонентов с сервером
Работу с базой данных можно также организовать с использованием Microsoft Access или Visual FoxPro с использованием ODBC (драйвер SQL Server).
Создание базы данных
Для создания новой базы данных пользователь должен иметь права администратора или роль Database Creators.Как и многие другие операции, создание базы данных проще всего выполнить с использованием программы SQL Server Enterprise Manager.
Можно также воспользоваться программой создания базы данных, написанной на языке Transact-SQL, которую можно запустить из программы SQL Query Analyzer. Программа создания базы данных и ее таблиц может быть сгенерирована с использованием средств моделирования баз данных, например, Case Studio, как описывалось в лекции 3.
Создание базы данных в программе Enterprise Manager выполняется следующим образом. В окне этой программы (см. рис. 8.17) в папке Databases следует выбрать в меню окна, контекстном меню или на панели инструментов команду New. Можно также воспользоваться мастером создания баз данных, вызываемым и пункте меню Tools окна консоли сервера.
В любом случае далее вам нужно задать имя базы данных, имена файлов данных и журнала транзакций и их начальный размер, величину автоматического приращения размера этих файлов.

увеличить изображение
Рис. 8.17. Создание новой базы данных
В результате будет создана новая база по шаблону базы model. В ней будут присутствовать все группы объектов этого шаблона:
Создание таблиц базы данных
В программе Enterprise Manager в папке Table базы данных выбрать команду New (рис. 8.18).
Рис. 8.18. Создание новой таблицы в базе данных
В появившемся окне с названием New Table in <имя базы> оn <имя SQL сервера> описать структуру таблицы, т.е. имена колонок - Column Name, тип данных в колонке - Data Type, длину данных - Length и возможность существования не заполненного информацией поля - Allow Nulls (рис. 8.19).

Рис. 8.19. Описание структуры новой таблицы
После команды Сохранить нужно задать имя таблицы, и она появится в списке таблиц базы.
Для модификации ее структуры в дальнейшем можно выбрать команду Design Table, после чего снова откроется окно описания структуры таблицы.
Для создания индексов в окне Design Table следует выбрать кнопку панели инструментов Manage Indexes/Keys, после чего откроется окно свойств таблицы Properties, где на третьей странице нужно описать индексы, которые могут быть уникальными или нет, кластерными (физический порядок в таблице на диске соответствует индексу) или нет (рис. 8.20).

Рис. 8.20. Описание индексов таблицы
У каждой таблицы должен существовать уникальный индекс, чтобы была возможность обновления информации после модификации таблицы.
После создания всех таблиц базы, в том же окне свойств необходимо создать связи между таблицами (на второй странице окна Properties для таблиц, имеющих связи с другими таблицами), затем в папке Diagrams базы можно создать графическое представление связей между таблицами (рис. 8.21).

увеличить изображение
Рис. 8.21. Схема базы данных
Для связей можно задать условия соблюдения ссылочной целостности (см. рис. 8.22). Эти же условия можно задать и при работе в окне Design Table (рис. 8.20).

Рис. 8.22. Окно свойств связи для таблицы
Типы данных системы
Для правильного проектирования баз данных необходимо знание типов данных, которые могут использоваться для полей таблиц в базе. В табл. 8.4. приведены типы данных в системе Microsoft SQL Server с разбивкой их на группы по видам.| binary [ ( n ) ] | максимальная длина 8 000 байт (n) |
| varbinary [ ( n ) ] | данные переменной длины, максимальная длина 8 000 байт (n) |
| image | максимальная длина 2 147 483 647 байт |
| bit | тип данных, который принимает значения 1 или 0 |
| сhar [(n)] | максимальная длина 8 000 символов (n) |
| varchar [(n)] | тип переменной длины, максимально 8 000 символов (n) |
| text | максимальная длина 1 073 741 823 символов |
| nchar (n) | максимальная длина 4 000 символов (n) |
| nvarchar (n) | переменной длины в кодировке Unicode максимальная длина 4 000 символов (n) |
| ntext | максимальная длина 1 073 741 823 символов |
| bigint | диапазон от -922 337 203 685 4775808 до 922 337 203 685 4775807 |
| Int | диапазон от -2 147 483 648 до 2 147 483 647 |
| smallint | диапазон от - 32 768 до 32 767 |
| tinyint | диапазон от 0 до 255 |
| decimal[(p[, s])] | диапазон от -1038-1 до 1038-1 с задание фиксированного количества знаков (p - всего и s -дробной части), максимальное общее количество знаков 38 |
| numeric | то же, что и decimal |
| float [ ( n ) ] | диапазон от +2.29*10-308 до +1.79*10308 |
| real | числа с 7-значной точностью в диапазоне от +1.18*10-38 до +3.40*1038. |
| datetime | диапазон от 1.01.1753 до 31.12.9999 с точностью 3.33 мс |
| smalldatetime | диапазон от 1.01.1900 до 6.06.2079 с точностью 1 мин. |
| money | диапазон от -7 203 685 477.5808 до +922 337 203 685 477.5807 |
| smallmoney | диапазон от -214 748.3648 до +214 748.3647 |
| timestamp | счетчик, автоматически увеличивающийся, имеющий уникальное значение для базы данных (тип binary(8) или varbinary(8)) |
| uniqueidentifier | тип, который содержит уникальный идентификационный номер (GUID), сохраняемый как 16-битная двоичная строка |
| sql_variant | тип, который сохраняет значения различных типов, кроме text, ntext, timestamp и sql_variant. |
| sysname | тип - синоним nvarchar , используется для ссылок на имена объектов базы данных |
Установка системы
Установка системы Microsoft SQL Server выполняется с дистрибутивного диска запуском файла AUTORUN.EXE (который, в свою очередь, запускает программу \Sql\x86\setup\setupsql.exe). При этом начинает работать Мастер установки, который пошагово предлагает вам выбрать параметры установки системы.Первый шаг (рис. 8.2) - выбор компьютера для установки:

Рис. 8.2. Шаг 1 мастера установки системы
Следующей шаг - выбор вида инсталляции (рис. 8.3.

Рис. 8.3. Выбор вида инсталляции "сервер"
Возможные варианты:
Далее программа установки попросит ввести имя пользователя и название организации, а также предложит принять лицензионное соглашение. После этого откроется окно Installation Definition. Оно содержит три варианта установки программного обеспечения (рис. 8.4):

Рис. 8.4. Выбор варианта установки программных средств
Далее следует задать установку по умолчанию или имя для именованного сервера (рис. 8.5).

Рис. 8.5. Задание имени сервера
Далее выбирается вариант установки: типичная, минимальная или установка пользователя (с возможностью выбора компонентов для установки) и каталог на диске компьютера для установки (рис. 8.6).

Рис. 8.6. Выбор варианта установки сервера
При выборе установки пользователя будет показано окно со списком компонентов системы и составом каждого компонента (рис. 8.7).

Рис. 8.7. Выбор компонентов для установки
Далее необходимо задать учетные записи для запуска служб SQL Server, это может быть локальный пользователь или пользователь, зарегистрированный в домене сети и для работы с SQL Server (рис. 8.8).

Рис. 8.8. Задание учетной записи для запуска служб сервера
Далее выбирается система аутентификации Windows или SQL Server (рис. 8.9).

Рис. 8.9. Задание метода аутентификации
Следующее окно - задание кодовой страницы и параметров сортировки данных. Здесь можно задать параметры, установленные на компьютере или отдельно заданные для системы SQL Server (рис. 8.10).

Рис. 8.10. Задание кодовой страницы и параметров сортировки данных
Следующее окно - задание используемых сервером сетевых библиотек (рис. 8.11).

Рис. 8.11. Задание используемых сервером сетевых библиотек
Далее следует задать тип клиентских лицензий и их количество (рис. 8.12).

Рис. 8.12. Выбор типа лицензирования
После этого начинается копирование файлов, и установка завершается созданием программной группы в меню Windows для работы с программами системы SQL Server.
Одно из важных новшеств системы SQL Server 2000 - возможность установки на одном компьютере нескольких экземпляров SQL Server. Экземпляр SQL Server, который устанавливается первым, называется стандартным или используемым по умолчанию; все остальные экземпляры, установленные на том же компьютере, называются именованными. Для каждого именованного экземпляра SQL Server может быть определен собственный набор баз данных и пользователей. Если на разных компьютерах установить экземпляры SQL Server с одинаковыми именами, их можно объединить в единый виртуальный сервер.
После инсталляции в группе программ Microsoft SQL Server для версии Developer Edition присутствуют пункты, показанные на рис. 8.13.

Рис. 8.13. Группа программ в меню Windows после установки системы
Основные компоненты системы SQL Server реализуются как службы (Services) Windows. В программе SQL Server Service Manager можно управлять запуском и остановом служб, связанных с установленными компонентами системы (рис. 8.14). Ярлык этой программы появляется в области уведомлений панели задач Windows и выдает индикацию о запуске главной службы - SQL ServerAgent.

Рис. 8.14. Программа Service Manager
В состав системы SQL Server входят пять служб, для которых можно задать автоматический или ручной запуск при загрузке Windows (табл. 8.5).
| MSSQLServer | Основное ядро SQL Server, реализует функции сервера баз данных |
| SQLServerAgent | Выполняет административные функции, отвечая за плановое выполнение заданий и поддержку операторов. SQL Server может работать без этой службы, но при этом ограничиваются его возможности |
| MS DTC (Microsoft Distributed Transaction Coordinator) | Необходима только в том случае, если в системе выполняются распределенные транзакции. Если в ней нет необходимости, можно ее не устанавливать |
| Microsoft Search (MS Search) | Поддерживает полнотекстовый поиск. Она генерирует каталоги и полнотекстовые индексы, а также выполняет сам поиск. Если в ней нет необходимости, можно ее не устанавливать |
| MSSQLServerOLAPService | Специальная служба, представляющая дополнительный компонент SQL Server - Microsoft SQL Server 2000 Analysis Services (сервер для оперативной аналитической обработки данных - OLAP) |
При использовании системы аутентификации Windows NT, запроса пароля при подключении не последует. Если используется система аутентификации SQL Server, Enterprise Manager спросит, следует ли выполнять автоматическое подключение или вы хотите, чтобы имя и пароль запрашивались у вас при каждом подключении.
После регистрации сервера для подключения к нему достаточно щелкнуть на значке "+" слева от имени сервера. Если подключение будет выполнено успешно, красный значок на пиктограмме сервера сменится на зеленый.

увеличить изображение
Рис. 8.15. Программа Enterprise Manager
Развернув список баз данных сервера в Enterprise Manager, мы увидим системные и установленные по умолчанию учебные базы данных.
Это следующие шесть баз данных:
Базы данных Northwind и Pubs - это учебные базы данных SQL Server, которые можно не устанавливать. Базы данных master, model, msdb, tempdb являются системными и необходимы для работы SQL Server. В программе Enterprise Manager следует просмотреть системные учетные записи, созданные в ходе установки. Для этого нужно открыть папку Logins, которая расположена в папке Security (рис. 8.16).

увеличить изображение
Рис. 8.16. Учетные записи пользователей в программе Enterprise Manager
На сервере должны быть определены три учетные записи:
Эти учетные записи генерируются в процессе установки SQL Server и играют очень важную роль.
Группа BUILTIN\Administrators создается исключительно при установке SQL Server в Windows NT Server или Windows NT Server Enterprise Edition, причем только при использовании системы аутентификации Windows NT. В ней представлены все члены встроенной группы Windows NT Administrators, имеющие административные разрешения на доступ к серверу.
Учетная запись sa предназначена для управления сервером. Она создается при любой установке SQL Server, поскольку без нее подключение к серверу невозможно. По умолчанию эта запись не имеет пароля. Рекомендуется сразу же задать для нее пароль и регулярно его менять. У этой учетной записи имеются абсолютно все возможные разрешения на доступ к SQL Server и его объектам, и во всех базах данных она по умолчанию получает псевдоним dbo.
При установке Desktop-версии SQL Server в Windows 9.x создается только учетная запись sa.
Базы данных: Разработка - Управление - Excel
- Базы данных
- Разработка баз данных
- СУБД и базы данных
- Управление базами данных
- Классика баз данных
- Софт для создания базы данных
- SQL
- Access
- FoxProо
- Расширенная оптимизация подзапросов в Oracle
- Informix
- Линтер
- Postgres
- СУБД DB2
- InterBase
- Excel
- Таблицы Excel
- Справка Excel
- Программирование в Excel
- Деньги в Excel
- Задачи Excel






























