Основы работы с базами данных

Некоторые термины и определения, используемые при работе с базами данных

Используемая терминология различна в теории реляционных баз данных, на стадии проектирования концептуальной модели и при практической работе с физической моделью и с базой данных, как это показано далее. Приведенные термины очень важны, однако для начинающих изучать данный предмет могут оказаться сложными для понимания. К этим формулировкам рекомендуется периодически возвращаться (после изучения следующих разделов курса) для их четкого усвоения. Основная часть первоисточников по теории баз данных, а также средства разработчиков используют английскую терминологию, поэтому для большинства русских терминов приведены соответствующие английские значения.
База данных (БД, 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).

Таблица 1.1. Объем российского рынка интегрированных систем управления предприятием в 2004 г.Название компанииДоля (%)
SAP40,6
Oracle22,8
Microsoft10,9
Galaktika8,2
1C4,6
Epicor-Scala3,7
BAAN2,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.  Каскадная схема жизненного цикла ИС

    Правил Кодда

  • Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности.
  • Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах.
  • Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца
  • Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов.
  • Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных.
  • Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции.
  • Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему.
  • Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление
  • Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных.
  • Логическая независимость данных - на программы-приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц.
  • Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти.
  • Независимость распределения - на программы-приложения и специальные программы логически не влияет, первый раз используются данные или повторно.
  • Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня


  • Кодд предложил применение реляционной алгебры в СУРБД, для расчленения данных в связанные наборы. Он организовал свою систему БД вокруг концепции, основанной на наборах данных.
    В реляционной модели данные разбиваются на наборы, которые составляют табличную структуру. Эта структура таблиц состоит из индивидуальных элементов данных, называемых полями. Одиночный набор или группа полей известна как запись.
    Модель данных, или концептуальное описание предметной области - самый абстрактный уровень проектирования баз данных.
    С точки зрения теории реляционных БД, основные принципы реляционной модели на концептуальном уровне можно сформулировать следующим образом:
  • все данные представляются в виде упорядоченной структуры, определенной в виде строк и столбцов и называемой отношением;
  • все значения являются скалярами. Это означает, что для любой строки и столбца любого отношения существует одно и только одно значение;
  • все операции выполняются над целым отношением, и результатом их выполнения также является целое отношение. Этот принцип называется замыканием

  • Формулируя принципы реляционной модели, доктор Кодд выбрал термин "отношение" (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 вида:

  • Системы управления базами данных в буквальном смысле этого термина, для которых работа с базами возможна только после запуска в работу этой системы без возможности создания автономных программ, работающих с базами. К этим системам относятся: Access, Paradoх, dBase.
  • Системы, имеющие как средства для работы с базами данных, так и возможности разработки исполняемых в операционной системе пользовательских программ (приложений), т. е. средства разработчика программ - FoхPro.
  • Системы для разработки пользовательских программ для работы с базами данных - Clipper, Clarion.


  • Все подобные СУБД имеют в своем составе средства для:

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



  • Важными факторами, определяющими выбор СУБД, являются:

  • Формат базы данных, обеспечивающий возможность обмена информацией с другими приложениями операционной системы. Одним из самых распространенных форматов является dbf-формат, с которым работают dBase, FoхBase, FoхPro, Visual FoхPro, Clipper. Его "понимают" все приложения MS Office. Данные из этих баз можно переносить в Word, Eхcel, Access. Свои собственные форматы данных имеют Clarion, Paradoх, Access.
  • Обеспечение секретности и конфиденциальности данных - имеют системы, не ориентированные на разработчика программ: Access, Paradoх. Однако этот фактор может быть реализован при хранении данных на выделенном сервере, где права различных пользователей легко разграничить.


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

    Последние версии СУБД, разработанные для работы в 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, является логической схемой базы данных для проектируемой системы
    Основными объектами концептуальной модели являются сущности и связи.
    Сущность - некоторый обособленный объект или событие моделируемой системы, имеющий определенный набор свойств - атрибутов. Отдельный элемент этого множества называется "экземпляром сущности". Сущность может обладать одним или несколькими атрибутами, которые однозначно идентифицируют каждый образец сущности, и может обладать любым количеством связей с другими сущностями.
    Правила для атрибутов сущности:
  • Каждый атрибут должен иметь уникальное имя.
  • Сущность может обладать любым количеством атрибутов.
  • Сущность может обладать любым количеством наследуемых атрибутов, но наследуемый атрибут должен быть частью первичного ключа сущности-родителя.
  • Для каждого экземпляра сущности должно существовать значение каждого его атрибута (правило необращения в нуль - Not Null).
  • Ни один из экземпляров сущности не может обладать более чем одним значением для ее атрибута.

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

    Стандарт IDEF1X описывает способы изображения двух типов сущностей - независимой и зависимой, и связей - идентифицирующих и неидентифицирующих (см. рис. 3.1).

    Использование методологии IDEF1X для разработки концептуальной модели данных
    увеличить изображение
    Рис. 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).

    Использование системы CASE Studio для проектирования концептуальной и физической моделей базы данных
    увеличить изображение
    Рис. 3.2.  Простейший вид ER-диаграммы в системе CASE Studio

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

    Использование системы CASE Studio для проектирования концептуальной и физической моделей базы данных
    Рис. 3.3.  Окно описания свойств связи

    Использование системы CASE Studio для проектирования концептуальной и физической моделей базы данных
    Рис. 3.4.  Окно описания свойств сущности и таблицы

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

    Использование системы CASE Studio для проектирования концептуальной и физической моделей базы данных
    Рис. 3.5.  Меню задания режима показа модели

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

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

    Использование системы CASE Studio для проектирования концептуальной и физической моделей базы данных
    увеличить изображение
    Рис. 3.7.  Физическая модель базы данных

    Далее можно описать права групп пользователей и права отдельных пользователей (меню системы пункт Model - Users Roles и Model - Users), если эту информацию нужно использовать при создании базы данных.

    На основе описания физической модели был сгенерирован текст программ для создания базы данных в СУБД Oracle (в меню системы пункт Model - Script Generation) и, после конвертации модели, - для Microsoft Access.

    Концептуальная модель базы данных

    На концептуальном уровне данные информационной системы состоят из двух основных сущностей: "Студент" и "Успеваемость".
    Минимальный состав атрибутов и их описание для сущности "Студент" представлены в табл. 3.1.

    Таблица 3.1. Атрибуты сущности "Студент"Имя атрибутаОписание, особенности использования
    Номер зачеткиПервичный ключ - уникальный номер, однозначно идентифицирующий студента университета
    Фамилия, имя, отчествоЯвляется простым с точки зрения экземпляра сущности, при необходимости из общего поля можно выделить составляющие его фамилию, имя и отчество или фамилию и инициалы, однако на практике часто этот атрибут разделяют на 3 отдельных; первый вариант является более экономичным по необходимой общей ширине поля таблицы
    Дата поступления в университетВ нашей стране наиболее часто используется формат работы с датой в виде ДД.ММ.ГГ, что совпадает с немецким (German) форматом дат. Количество цифр года: либо две - для новых систем, поддерживающих заданный в Microsoft Windows годичный интервал (Панель управления - Язык и стандарты - Дата - "При вводе двух цифр года воспринимать их как год между:"), или для систем, в которых аналогичный интервал может быть задан в программе, - либо 4 цифры
    Факультет (№ факультета)Может быть сложным (кроме кода и названия, может содержать и другие сведения); даже в том случае, если для сущности "Студент" мы хотим сохранять название факультета, оно должно быть представлено в одинаковом виде для каждого факультета, поэтому, в соответствии с принципами нормализации баз данных, этот атрибут следует представить в виде номера, являющегося внешним ключом для новой сущности - "Факультет", в которой каждому номеру, являющемуся первичным ключом, будут соответствовать название и прочие атрибуты этой сущности
    Специальность(код специальности)Может быть сложным, кроме того, необходимо использовать справочник министерства с утвержденными кодами специальностей, поэтому данный атрибут должен хранить код специальности - внешний ключ для первичного ключа новой сущности "Специальность"
    КурсЧисло от 1 до 5
    Номер группыТрехзначное число
    Номер паспортаСостав и вид паспортных данных определяется требованиями бухгалтерской отчетности перед налоговыми органами, фондами социального страхования и пенсионным фондом
    ...Прочие атрибуты, которых может быть достаточно много


    В табл. 3.2-3.5 представлены атрибуты сущностей "Успеваемость", "Факультет", "Специальность", "Предмет".

    Таблица 3.2. Атрибуты сущности "Успеваемость"Имя атрибутаОписание, особенности использования
    Номер зачеткиВнешний ключ (к сущности "Студент")
    Номер семестраЧисло от 1 до 10
    Предмет (№ предмета) Может быть сложным, его следует заменить на его номер (внешний ключ) и связать с новой сущностью "Предмет", состоящий, как минимум, из атрибутов "номер предмета" (первичный ключ) и "название предмета"
    ОценкаМожет быть представлена цифрами от 0 до 5 или 1 буквой: например "н" - неявка
    Дата получения оценкиФормат даты обычно ДД.ММ.ГГ
    Фамилия преподавателяЭто поле может быть связано с сущностью "Преподаватель". В данном учебном примере ограничимся простым атрибутом
    ...Могут быть добавлены и другие атрибуты, например, номер экзаменационной ведомости
    Таблица 3.3. Атрибуты сущности "Факультет"Имя атрибутаОписание, особенности использования
    Номер факультетаПервичный ключ
    Название факультетаМожет быть достаточно длинным, но не более 255 символов
    ...Могут быть добавлены и другие атрибуты, например, декан, номер комнаты деканата и т.д.
    Таблица 3.4. Атрибуты сущности "Специальность"Имя атрибутаОписание, особенности использования
    Код специальностиПервичный ключ - значение из справочника министерства
    Название специальностиЗначение из справочника министерства
    ...Могут быть добавлены и другие атрибуты
    Таблица 3.5. Атрибуты сущности "Предмет"Имя атрибутаОписание, особенности использования
    № предметаПервичный ключ
    Название предметаОбщий справочник университета
    ...Могут быть добавлены и другие атрибуты
    В физической модели каждой сущности будет соответствовать таблица базы данных, а каждому атрибуту - поле таблицы. Имена таблиц и полей лучше задавать с использованием латинских букв и достаточно короткими для удобства использования при программировании и для совместимости с системами, не использующими кириллицу.


    Состав данных и связи в концептуальной и физической моделях показаны в табл. 3.6 и табл. 3.7.

    Таблица 3.6. Состав базы данных информационной системы
    № п/пСущности концептуальной моделиТаблицы физической модели
    НазваниеИнформация
    1."Студент""SPISOK""Список студентов"
    2."Успеваемость""OCENKI""Оценки студентов"
    3."Факультет""FCLT"Справочник факультетов
    4."Специальность""SPECT"Справочник специальностей
    5."Предмет""PREDMET"Справочник предметов
    Таблица 3.7. Связи между объектами базы данных информационной системы№ п/пКонцептуальная модельФизическая модель
    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 - форма с построчным расположением полей.
    Существует много разных способов открыть окно таблицы базы данных для редактирования в одном из этих режимов, в том числе:
  • в открытом окне модификации структуры базы (Database Designer) щелкнуть правой кнопкой мыши на таблице и выбрать команду Browse;
  • щелкнуть мышкой на значке Open стандартной панели инструментов, задать тип файла Table, выбрать нужную таблицу и дать команду Browse в окне Command или в пункте меню View;
  • открыть окно Data session (из пункта главного меню Window), в нем открыть нужные таблицы (кнопка Open), затем выбрать нужную Вам открытую таблицу и нажать на кнопку Browse;
  • создать проект, добавить в него базу данных (внешняя) и в окне проекта выбрать для нужной таблицы команду Browse (полезно сразу создать проект, тогда не нужно будет искать файлы разрабатываемой системы на диске, все файлы можно создавать в окне проекта с указанием, где они будут располагаться на диске);
  • написать в окне Command команду USE ?, выбрать таблицу и написать команду BROWSE.

  • После вариантов 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 - форма с построчным расположением полей.
    Существует много разных способов открыть окно таблицы базы данных для редактирования в одном из этих режимов, в том числе:
  • в открытом окне модификации структуры базы (Database Designer) щелкнуть правой кнопкой мыши на таблице и выбрать команду Browse;
  • щелкнуть мышкой на значке Open стандартной панели инструментов, задать тип файла Table, выбрать нужную таблицу и дать команду Browse в окне Command или в пункте меню View;
  • открыть окно Data session (из пункта главного меню Window), в нем открыть нужные таблицы (кнопка Open), затем выбрать нужную Вам открытую таблицу и нажать на кнопку Browse;
  • создать проект, добавить в него базу данных (внешняя) и в окне проекта выбрать для нужной таблицы команду Browse (полезно сразу создать проект, тогда не нужно будет искать файлы разрабатываемой системы на диске, все файлы можно создавать в окне проекта с указанием, где они будут располагаться на диске);
  • написать в окне Command команду USE ?, выбрать таблицу и написать команду BROWSE.

  • После вариантов 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:).
    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 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.
    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 4.13.  Стандартный режим Edit работы с таблицей
    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 4.14.  Стандартный режим с разделением окна на 2 части
    Возможен показ таблицы с разделением ее на 2 части, одна из которых будет в режиме Browse, другая - в режиме Edit (рис. 4.14).
    Режим сохранения добавленных, измененных и удаленных данных зависит от того, используется или нет буферизация данных. Изменить режим можно в свойствах рабочей зоны (Properties для выбранной таблицы в меню или в окне Data Session), окно описания свойств показано на рис. 4.15
    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 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).
    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 4.16.  Работа с таблицами, между которыми установлена связь
    Для разрабатываемой информационной системы следует занести в стандартном режиме работы с таблицами информацию в справочники - таблицы табл. 4.4, табл. 4.5 и табл. 4.7. Список студентов и список их оценок лучше заполнять с использованием экранной формы, которая будет создана далее. Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы <


    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 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.

    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 4.13.  Стандартный режим Edit работы с таблицей

    Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
    Рис. 4.14.  Стандартный режим с разделением окна на 2 части

    Возможен показ таблицы с разделением ее на 2 части, одна из которых будет в режиме Browse, другая - в режиме Edit (рис. 4.14).

    Настройка системы

    Перед использованием системы VFP необходимо выполнить некоторые настройки для удобства использования. Для этого в меню Tools следует вызвать команду Options, после чего появится многостраничная экранная форма для задания параметров настройки с аналогичным названием (рис. 4.1).
    Настройка системы
    Рис. 4.1.  Окно настройки параметров системы Visual FoxPro
    Наиболее существенными являются настройки:
  • на странице Regional - Date Format - German (дд.мм.гггг) и пр.;
  • страница Debug - можно задать расположение отладочных окон (всего их 7 - Trace, Watch и др.) в отдельном окне в Windows или в главном окне VFP и пр.;
  • страница Editor - можно задать цветовое выделение синтаксиса и прочие параметры окон с текстом программ;
  • страница Data - можно определить, как будут открываться по умолчанию базы и таблицы: эксклюзивно (Open Exclusive) или нет, с использованием одного из возможных режимов буферизации данных (buffering) или нет, будем ли мы видеть помеченные для удаления записи (Ignore deleted records) и многое другое;
  • страница File Locations - следует задать Default Directory - папку по умолчанию, которая будет открываться в командах Open и Save, а также использование и расположение файла сохранения конфигураций (ресурсного файла) foxuser.dbf;
  • страница Forms - следует задать максимальный размер экранных форм - Maximum design area - обычно 800х600 и т.д.

  • Все заданные параметры будут сохранены в файле 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.

    Таблица 4.1. Основные максимальные возможности системы Visual FoxProНаименование предельной величиныПредельная величина
    Количество записей в файле таблицы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 килобайта
    Размер процедур в файлене ограничен
    Количество вложенных DO128
    Количество вложенных READ5
    Количество передаваемых параметров27
    Количество транзакций5
    Количество объектов в отчетене ограничено
    Длина описания отчета20 дюймов
    Количество уровней группировки74
    Длина символьных переменных в отчете255
    Количество открытых окон (всех типов)не ограничено
    Количество открытых окон BROWSE255
    Количество символов в символьной строке или переменной памяти16 777 184
    Количество символов в командной строке8192
    Количество открытых файловвозможности ОС
    Количество нажатий клавиш в макро1024
    Количество полей в одном запросе SQL255

    Таблица 4.2. Типы данных в системе Visual FoxProТипОписаниеРазмерДиапазонBlobCharacterCurrencyDateDateTimeLogicalNumericVarbinaryVariant
    Двоичные данные неограниченной длины. Значения сохраняются в 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 или False1 байт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Тип поляОписаниеРазмерДиапазонCharacter BinaryТекст, состоящий из символов. Кодовая страница не учитывается1 байт на символ, до 254 символовЛюбые символыDoubleДействительные числа удвоенной значимости8 байт+4.94065645841247E-324 до +8.9884656743115E307FloatТо же самое, что и Numeric8 байт в памяти; от 1 до 20 байт в *.dbf- .9999999999E+19 до .9999999999E+20GeneralСсылка на OLE-объект. Значения сохраняются в memo (.fpt) файле4 байт в *.dbfОграничен доступной памятьюIntegerЦелое числовое значение4 байта-2147483647 до 2147483647Integer AutoincЦелое значение, автоматически изменяющееся. Только для чтения (read-only)4 байтаОпределяется значениями Next и StepMemoСимвольный текст. Значения сохраняются в memo (.fpt) файле4 байтa в *.dbfОграничен доступной памятьюMemo BinaryТо же, что Memo. Кодовая страница не учитывается4 байтa в *.dbfОграничен доступной памятьюVarcharСимвольный текст. Varchar подобен Character, но не резервируется место для концевых пробелов1 байт на символ, всего до 254 символовЛюбые символыVarchar BinaryТип Varchar, кодовая страница не учитывается1 байт на символ, всего до 254 символовЛюбые символы Некоторые достоинства системы:

  • Широко известный формат таблиц баз данных, что позволяет легко организовать обмен информацией с другими приложениями Microsoft Windows.
  • Современная организация реляционных баз данных, позволяющая хранить информацию о таблицах базы, их свойствах, индексах и связях, задавать условия соблюдения ссылочной целостности, создавать локальные и удаленные представления (Views), связи с серверами, хранимые процедуры, исполняемые при наступлении более 50 различных видов событий (VFP 7.0-9.0).
  • Высокая скорость работы с большими базами данных.
  • Высокая наглядность работы с базами данных: многофункциональное окно Data session позволяет видеть список открытых таблиц баз данных, их связи, фильтры, порядок по индексам, режимы буферизации, переходить к режимам модификации структуры, к работе с информацией таблиц и пр.
  • Высокая скорость разработки приложений с использованием Мастеров (Wizard), Конструкторов (Designer), Построителей (Builder), режим подсказок IntelliSense при написании текста программ, системы отладки и тестирования программ.
  • Собственный объектно-ориентированный язык работы с базами данных, основу которого составляет широко известное ядро xBase.


    Наличие в составе системы значительного количества библиотек стандартных классов с доступным для модификации исходным текстом. Возможность использования библиотек других приложений Windows (ActiveX).
  • Возможность разработки приложений, работающих по технологии "клиент-сервер" с данными, размещенными на серверах баз данных Oracle и Microsoft SQL Server и с другими приложениями Microsoft Windows с использованием ODBC и OLE
  • Возможность разработки Интернет-приложений для работы с базами данных и работы с Web-сервисами. Создание и работа с COM и COM+ компонентами (Component Object Model).
  • Возможность разработки проекта для работы с базами данных с компиляцией его в программу, исполняемую в VFP (*.app), в операционной системе Microsoft Windows (*.exe или *.dll) или в Интернет-браузере (*.app).
  • В дистрибутиве системы присутствует большая библиотека примеров, что облегчает освоение всех ее возможностей.


  • Система 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 отсутствует, подписью будет имя поля).

    Таблица 4.3. Структура таблицы Spisok.dbfNameTypeWidthDecimalIndexCaption
    NzC7A,PНомер зачетки
    FioC45Фамилия, имя, отчество
    data_pD8Дата поступления
    n_fcltN2AФакультет
    n_spectC7AСпециальность
    kursN1Курс
    n_grupС10Группа
    n_paspС10Номер паспорта
    Далее создаем следующую таблицу в базе - справочник факультетов с именем файла Fclt.dbf. Для этого следует снова поместить курсор на пустое место окна Database Designer, щелкнуть правой кнопкой мыши и в контекстном меню выбрать команду New table. В окне Table Designer описываем структуру таблицы (табл. 4.4).

    табл. 4.4

    Таблица 4.4. Структура таблицы Fclt.dbfNameTypeWidthDecimalIndexCaption
    n_fcltN2A,PНомер факультета
    name_fC120Название факультета
    Название ключевого поля справочника, его тип и ширину желательно оставить такими же, как и в главной таблице, для облегчения установления связей при разработке экранных форм и отчетов с помощью Мастера.

    Точно так же создаем в базе данных следующие таблицы и индексы для табл. 4.5, табл. 4.6, табл. 4.7.

    Таблица 4.5. Структура таблицы Spect.dbfNameTypeWidthDecimalIndexCaption
    n_spectC7A,PКод специальности
    name_sC120Название специальности
    Таблица 4.6. Структура таблицы Ocenki.dbfNameTypeWidthDecimalIndexCaption
    nzC7AНомер зачетки
    semestrN1Семестр
    n_predmN2AПредмет
    ballС1Оценка
    data_bD8Дата
    prepodC45Преподаватель
    Таблица 4.7. Структура таблицы Predmets.dbfNameTypeWidthDecimalIndexCaption
    n_predmN2A,PНомер предмета
    name_pС120Название предмета
    <


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

    Создание базы данных
    Рис. 4.10.  Окно базы данных STUDENTS

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

    Создание базы данных
    Рис. 4.11.  Задание условий соблюдения ссылочной целостности

    Типы файлов, которые использует система

    Особенность системы - использование значительного количества файлов с различными расширениями для работы с различными типами объектов, но по сути формат многих из них - dbf с мемо-полями.
    В табл. 4.4 приведен список основных типов файлов. Знание всех типов файлов необходимо каждому программисту, работающему с системой.

    Таблица 4.4. Список расширений для различных типов файлов VFPОсновной файлMemo поляИндексыСкомпилированный файлТип файла
    .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:

  • ControlSourse - если для колонки было задано ocenki.n_predm и BoundTo = .T., это свойство автоматически становится таким же, как свойство колонки, т.е. ocenki.n_predm;
  • RowSourseType 6 - Fields;
  • RowSourse predmets.n_predm, name_p;
  • ColumnCount 2;
  • ColumnWidths 20, 180;
  • BorderStyle 0 - None;
  • SpecialEffect 1 - Plain.


  • Для показа названия предмета в таблице добавим количество колонок (для объекта 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.  Экранная форма с командными кнопками
    При работе с экранными формами существует два принципиально разных подхода:
  • Стиль, принятый в системе FoxPro - на главной экранной форме представлена информация одной записи главной таблицы и связанные с ней данные; полный список записей можно увидеть, нажав кнопку Поиск на этой форме (см. пример рис. 5.3).
  • Стиль, основанный на показе таблицы данных - главный экран содержит список (не редактируемых в строке) записей главной таблицы, из него можно перейти на другой экран для редактирования одной записи (см. пример рис. 5.1).

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

    Объекты экранных форм и их основные свойства

    На экранной форме (объект базового класса 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

    Таблица 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Невидимый объект
    < Свойства формы и всех ее объектов можно просматривать и изменять в окне Properties (рис. 5.11). Если это окно отсутствует, его можно открыть, щелкнув правой кнопкой мыши на любом объекте и выбрав в контекстном меню слово Properties.

    Объекты экранных форм и их основные свойства
    Рис. 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. приведено назначение стандартных кнопок экранной формы.

    Таблица 5.2. Назначение кнопок базового класса pictbtns библиотеки wizbtns.vcx№НазначениеToolTipTextStatusBarText
    1.Перейти к первой записиTop recordGo to top of table
    2.Перейти к предыдущей записиPrevious recordSkip to previous record
    3.Перейти к следующей записиNext recordSkip to next record
    4.Перейти к последней записиBottom recordGo to bottom of table
    5.Поиск записейFind recordsSearch for records
    6.Напечатать отчетPrint reportPrint to report
    7.Добавить/сохранить записьAdd/Save recordAdd new record/Save edits
    8.Редактировать/отменить измененияEdit/Revert recordEdit existing record/Revert edits
    9.Удалить записьDelete recordDelete existing record
    10.Выйти из формыExit formExit 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

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

  • запускаем в работу экранную форму;
  • нажимаем кнопку 7 - "Добавить запись", выбираем, что будем добавлять - нового студента (главная таблица) или оценку студента (дочерняя таблица); в последнем случае значение ключевого поля в дочернюю таблицу заносится автоматически;
  • выполняем ввод новых данных;
  • нажимаем кнопку 7, которая изменила картинку и превратилась в команду "Сохранить запись";
  • при необходимости повторяем все со второго пункта.


  • Команды для работы с базами данных, таблицами, индексами, связями

  • Создать базу CREATE DATABASE [DatabaseName | ?]
  • Создать таблицу базы данных (SQL-команда) CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE] [CODEPAGE = nCodePage] ( FieldName1 FieldType [( nFieldWidth [, nPrecision] )] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE [COLLATE cCollateSequence]] [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] [, FieldName2... ] [, PRIMARY KEY eExpression2 TAG TagName2 |, UNIQUE eExpression3 TAG TagName3 [COLLATE cCollateSequence]] [, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] [COLLATE cCollateSequence] REFERENCES TableName3 [TAG TagName5]] [, CHECK lExpression2 [ERROR cMessageText2]] ) | FROM ARRAY ArrayName
  • Открыть базу данных, представление (View) или таблицу базы USE [[DatabaseName!]Table | SQLViewName | ?] [IN nWorkArea | cTableAlias] [ONLINE] [ADMIN] [AGAIN] [NOREQUERY [nDataSessionNumber]] [NODATA] [INDEX IndexFileList | ? [ORDER [nIndexNumber | IDXFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]]]] [ALIAS cTableAlias] [EXCLUSIVE] [SHARED] [NOUPDATE] [CONNSTRING cConnectionString | (m.nStatementHandle) ] Функция ALIAS([nWorkArea]) возвращает алиас для текущей или заданной рабочей зоны.
  • Выбрать свободную рабочую зону (0), заданную рабочую зону или выбрать таблицу SELECT([ 0 | 1 | cTableAlias ]) SELECT(0) - возвращает номер выбранной рабочей зоны SELECT(1) - возвращает наибольший номер свободной зоны SELECT 0 - выбор свободной зоны с наименьшим номером
  • Создать индексный файл INDEX ON eExpression TO IDXFileName | TAG TagName [COLLATE cCollateSequence] [OF CDXFileName] [FOR lExpression] [COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE] [BINARY]
  • Открыть индекс SET INDEX TO [IndexFileList | ? ] ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [ADDITIVE]
  • Установить порядок по индексу SET ORDER TO [nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [IN nWorkArea | cTableAlias][ASCENDING | DESCENDING]]
  • Установить связь между таблицами SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1 [, eExpression2 INTO nWorkArea2 | cTableAlias2 ] [IN nWorkArea | cTableAlias] [ADDITIVE]]
  • Установить множественную связь между таблицами (используется при формировании отчетов) SET SKIP TO [TableAlias1 [, TableAlias2] ...]


  • Команды перемещения по таблице, поиска и отбора данных

  • Перейти к записи... GO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias] GO TOP | BOTTOM [IN nWorkArea | IN cTableAlias] (вместо GO можно использовать GOTO)
  • Переместиться по таблице (вперед или назад) SKIP [nRecords] [IN nWorkArea | cTableAlias]

    Для nRecords>0 - перемещение далее по таблице, для nRecords<0 - назад к предыдущим записям.

    Функция BOF() возвращает .T., если текущая запись - первая и Вы пытаетесь выполнить команду SKIP -1, аналогично для последней записи - EOF()=.T.

  • Поиск для заданного логического условия LOCATE [FOR lExpression1] [Scope] [WHILE] [NOOPTIMIZE]

    (Найти следующую запись, соответствующую условию - команда CONTINUE)

  • Поиск по значению индекса SEEK eExpression ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [IN nWorkArea | cTableAlias]
  • Установить фильтр SET FILTER TO [lExpression] [IN nWorkArea | cTableAlias]
  • Выполнить запрос (SQL-команда) SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] Select_List_Item [, ...] FROM [FORCE] Table_List_Item [, ...] [[JoinType] JOIN DatabaseName!]Table[[AS] Local_Alias] [ON JoinCondition [AND | OR [JoinCondition | FilterCondition] ...] [WITH (BUFFERING = lExpr)] [WHERE JoinCondition | FilterCondition [AND | OR JoinCondition | FilterCondition] ...] [GROUP BY Column_List_Item [, ...]] [HAVING FilterCondition [AND | OR ...]] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, ...]] [INTO StorageDestination | TO DisplayDestination] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT]

    В качестве StorageDestination можно использовать одно из следующих предложений:

  • ARRAY ArrayName - в массив переменных памяти;
  • CURSOR CursorName - в курсор;
  • DBF TableName | TABLE TableName - в таблицу.


  • В качестве DisplayDestination можно использовать одно из следующих предложений:

  • FILE FileName [ADDITIVE] - ASCII текстовый файл;
  • PRINTER [PROMPT] - вывод на принтер;
  • SCREEN - в главное окно системы VFP.



  • Команды для добавления, модификации и удаления данных

  • Открыть окно для работы в табличном формате с таблицей базы данных: BROWSE [FIELDS FieldList] [FONT cFontName [, nFontSize]] [STYLE cFontStyle] [FOR lExpression1 [REST]] [FORMAT] [FREEZE FieldName] [KEY eExpression1 [, eExpression2]] [LAST | NOINIT] [LOCK nNumberOfFields] [LPARTITION] [NAME ObjectName] [NOAPPEND] [NOCAPTIONS] [NODELETE] [NOEDIT | NOMODIFY] [NOLGRID] [NORGRID] [NOLINK] [NOMENU] [NOOPTIMIZE] [NOREFRESH] [NORMAL] [NOWAIT] [PARTITION nColumnNumber [LEDIT] [REDIT]] [PREFERENCE PreferenceName] [SAVE] [TIMEOUT nSeconds] [TITLE cTitleText] [VALID [:F] lExpression2 [ERROR cMessageText]] [WHEN lExpression3] [WIDTH nFieldWidth] [WINDOW WindowName1] [IN [WINDOW] WindowName2 | IN SCREEN] [COLOR SCHEME nSchemeNumber]

    При описании полей (в параметре FIELDS) список может содержать следующие параметры:

    FieldName (имя поля) [:R] (только чтение) [:nColWidth] (ширина поля) [:V = lExpr1 [:F] [:E = cTxt]] (функция, выполняемая при выходе из поля) [:P = cFormatCodes] (формат) [:B = eMin, eMax [:F]] (диапазон данных) [:H = cHeadingText] (заголовок) [:W = lExpr2] (функция,выполняемая перед входом в поле)

    Близкий синтаксис имеют команды EDIT и CHANGE для работы с таблицей при построчном расположении полей.

  • Добавление записей APPEND [BLANK] [IN nWorkArea | cTableAlias] [NOMENU] APPEND FROM FileName | ? [FIELDS FieldList] [FOR lExpression][[TYPE] [DELIMITED [WITH Delimiter | WITH BLANK | WITH TAB | WITH CHARACTER Delimiter] | DIF | FW2 | MOD | PDOX | RPD | SDF | SYLK | WK1 |WK3 | WKS | WR1 | WRK | CSV | XLS | XL5 [SHEET cSheetName]| XL8 [SHEET cSheetName]]] [AS nCodePage]

    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 ...]
  • Занести данные в поля таблицы REPLACE FieldName1 WITH eExpression1 [ADDITIVE] [, FieldName2 WITH eExpression2 [ADDITIVE]] ...[Scope][FOR lExpression1][WHILE lExpression2] [IN nWorkArea | cTableAlias][NOOPTIMIZE]
  • Копировать данные текущей записи в массив переменных SCATTER [FIELDS FieldNameList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO] TO ArrayName | TO ArrayName BLANK | MEMVAR | MEMVAR BLANK | NAME ObjectName [BLANK]


    параметр MEMVAR означает - используются переменные с теми же именами, что и имена полей записи; имя переменной в программе следует писать как m.<имя поля>).

  • Копировать данные из массива переменных в текущую запись GATHER FROM ArrayName | MEMVAR | NAME ObjectName [FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO]
  • Копирование данных таблицы в массив COPY TO ARRAY ArrayName [FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [Scope] [FOR lExpr1a] [WHILE lExpression2] [NOOPTIMIZE]
  • Выполнить обновление данных (SQL-команда) UPDATE Target SET Column_Name1 = eExpression1 [, Column_Name2 = eExpression2 ...] [FROM [FORCE] Table_List_Item [[, ...] | [JOIN [ Table_List_Item]]] WHERE FilterCondition1 [AND | OR FilterCondition2 ...]

    Здесь Target - таблица (table), курсор (cursor) или их алиас или файл для обновления.

  • Пометить записи таблицы для удаления записи DELETE [Scope] [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias] [NOOPTIMIZE]
  • Удалить помеченные для удаления записи из файла PACK [MEMO | DBF] [Tablename ] [IN nWorkarea | cTableAlias]
  • Выполнить удаление записей (SQL-команда) DELETE [Target] FROM [FORCE] Table_List [[, Table_List ...] | [JOIN [ Table_List]]] [WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]


  • Команды вычислений по данным таблиц

  • CALCULATE eExpressionList [Scope] [FOR lExpression1] [WHILE lExpression2][TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE] [IN nWorkArea | cTableAlias]

    где для 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.).

    Отбор данных из базы с использованием SQL-запросов
    Рис. 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-программы количество условий не ограничено.

    Отбор данных из базы с использованием 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.

    Отбор данных из базы с использованием SQL-запросов
    увеличить изображение
    Рис. 6.14.  Конструктор запросов

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

    Отбор данных из базы с использованием SQL-запросов
    увеличить изображение
    Рис. 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.).

    Отбор данных из базы с использованием SQL-запросов
    Рис. 6.16.  Результаты отбора данных по запросу

    Более сложный вариант - запрос с группировкой данных и расчетом групповых итогов. Поставим задачу показать средний балл для студенческих групп по экзаменационным оценкам для факультета № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1. Сделать это можно путем модификации в Конструкторе предыдущего запроса.

    Далее уберем лишние поля на странице Fields. При группировке данных допускается отображение только сгруппированных или итоговых данных, таких как следующие:

  • значения столбцов группировки (входящих в предложение GROUP BY);
  • расчетные значения для групп, такие, как SUM(°), AVG(°) и пр.


  • Не допускается отображение значений отдельных строк таблицы.

    Оставим в списке полей только поле группировки - 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.

    Отбор данных из базы с использованием SQL-запросов
    Рис. 6.17.  Отбор данных по запросу с группировкой

    Результаты отбора данных могут быть показаны в виде диаграммы (объект Microsoft Graph). Для этого можно воспользоваться мастером построения диаграмм в VFP - в меню системы Tools - Wizards - All Wizards:, далее в окне полного списка Мастеров выбрать GraphWizard (см.


    табл. "Полный список Wizard-ов в VFP 9.0"). Результат построения столбчатой диаграммы показан на рис. 6.18. (после дополнительного редактирования объекта в системе VFP).

    "Полный список Wizard-ов в VFP 9.0"
    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
    Отбор данных из базы с использованием SQL-запросов
    Рис. 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.

    Отбор данных из базы с использованием SQL-запросов
    Рис. 6.19.  Отбор данных по запросу с группировкой

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


    Страница 3 мастера с заданием этих параметров показана на рис. 6.20.

    Отбор данных из базы с использованием SQL-запросов
    Рис. 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.

    Отбор данных из базы с использованием SQL-запросов
    Рис. 6.21.  Данные перекрестного запроса

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

    Отбор данных из базы с использованием SQL-запросов
    Рис. 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.  Контекстное меню

  • Paste - вставить;
  • Run Report: - напечатать отчет на принтере;
  • Print Preview - предварительный просмотр отчета на экране и печать на принтере;
  • Data Environment: - окно данных, связанных с отчетом;
  • Optional Bands: - страница свойств зон Title, Summary и Detail в окне свойств отчета;
  • Data Grouping: - страница группировки данных в окне свойств отчета;
  • Variables: - страница переменных в окне свойств отчета;
  • Properties: - окно свойств отчета.



  • Для использования в отчете названий факультетов, специальностей и предметов необходимо открыть окно 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, нужно сделать следующее:

  • в окне проекта выбираем раздел Code - Programs (программные файлы), нажимаем New:, в чистом окне программы пишем 2 строки: do form spisok; read events

    сохраняем файл в своей папке с названием program1 или с другим названием и указываем в проекте, что это головная программа (правый клик на файле и выбрать команду Set Main);
  • открываем форму Spisok и окно свойств, в окно события формы Destroy Event вписываем фразу: clear events (чтобы после закрытия формы завершался процесс обработки событий и завершалась работа программы) - рис. 6.25.


  • Разработка проекта и исполняемой программы
    Рис. 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.

    Таблица 7.1. Спецификации системы Microsoft Office Access 2003АтрибутМаксимальное значениеБаза данныхТаблицаЗапросФорма и отчетМакрос
    Размер файла базы данных (*.mdb)2 Гбайт за вычетом места, необходимого системным объектам
    Число объектов в базе данных32 768
    Модули (включая формы и отчеты), свойство Наличие модуля (HasModule) которых имеет значение True)1 000
    Число знаков в имени объекта64
    Число знаков в пароле14
    Число знаков в имени пользователя или имени группы20
    Число одновременно работающих пользователей255
    Число знаков в имени таблицы64
    Число знаков в имени поля64
    Число полей в таблице255
    Число открытых таблиц2048 (фактическое число может быть меньше из-за внутренних таблиц, открываемых Microsoft Access)
    Размер таблицы2 Гбайт за вычетом места, необходимого системным объектам
    Число знаков в текстовом поле255
    Число знаков в поле MEMO65 535 при вводе данных через интерфейс пользователя;1 Гбайт для хранения знаков при программном вводе данных
    Размер поля объекта OLE1 Гбайт
    Число индексов в таблице32
    Число полей в индексе10
    Число знаков в сообщении об ошибке255
    Число знаков в условии на значение записи2048
    Число знаков в описании таблицы или поля255
    Число знаков в записи (кроме полей MEMO и полей объектов OLE)2000
    Число знаков в значении свойства поля255
    Число установленных связей32 на одну таблицу за вычетом числа индексов, находящихся в таблице для полей или сочетаний полей, которые не участвуют в связях
    Число таблиц в запросе32
    Число полей в наборе записей255
    Размер набора записей1 Гбайт
    Предел сортировки255 знаков в одном или нескольких полях
    Число уровней вложения запросов50
    Число знаков в ячейке на бланке запроса1024
    Число знаков для параметра в запросе с параметрами255
    Число операторов AND в предложении WHERE или HAVING99
    Число знаков в инструкции 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. приведены сведения о типах данных, которые могут иметь поля в таблицах.

    Таблица 7.2. Типы данных системыТип данных полейТип данных в VBAИспользованиеРазмер
    Текстовый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:558 байтов(при активации поля всегда показывает полный формат даты)
    ДенежныйCurrencyЗначения валют. Денежный тип используется для предотвращения округлений во время вычислений. Предполагает до 15 символов в целой части числа и 4 - в дробной8 байтов
    СчетчикАвтоматическая вставка последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи.4 байта. 16 байтов только для кодов репликации (GUID)
    ЛогическийBooleanПоля, содержащие только одно из двух возможных значений, таких как Да/Нет, Истина/Ложь, Вкл/Выкл.1 бит
    Поле объекта OLEStringОбъекты (например, документы 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.

    Разработка экранных форм для работы с базой данных

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

  • Полученная экранная форма будет открыта в конструкторе форм, в базе данных на странице Формы появятся две новые - Студенты и Оценки студента. Для более детального отображения в конструкторе подчиненной формы лучше закрыть окно и снова открыть в конструкторе форму Студенты, в этом случае она будет иметь вид, приведенный на рис. 7.10.

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

  • Полученная экранная форма будет открыта в конструкторе форм, в базе данных на странице Формы появятся две новые - Студенты и Оценки студента. Для более детального отображения в конструкторе подчиненной формы лучше закрыть окно и снова открыть в конструкторе форму Студенты, в этом случае она будет иметь вид, приведенный на рис. 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.), список типов объектов приведен ниже.

  • Группа переключателей, Выключатель, Переключатель, Кнопка - кнопки и группы кнопок разного вида, связанные с выполнением определенных процедур (5-7 и 11 кнопки на Панели). При выборе объекта Кнопка запускается Мастер, который предложит вам набор стандартных кнопок перехода по записям таблицы, обработки записей (восстановить, дублировать, печатать и пр.), работы с формой, с отчетами (печатать, просмотреть, отправить в файл или по почте), работы с приложениями и разное. Кнопки можно создать с помощью Мастера, при этом программный код, связанный с их действием, уже будет присутствовать (рис. 7.16.).

    Разработка экранных форм для работы с базой данных
    Рис. 7.16.  Окно Мастера создания кнопок

  • Флажок - поле, связанное обычно с полем таблицы логического типа, в котором стоит галочка или нет (6-й элемент Панели).
  • Список - список данных для выбора одного из значений (10).
  • Рисунок - вставка рисунка в форму (12).
  • Свободная рамка объекта - любой объект Windows-приложений, редактирование которого будет возможно вызовом соответствующего приложения (13).
  • Присоединенная рамка объекта - для работы с полями таблиц типа "поле объекта OLE" (14).
  • Набор вкладок - многостраничная форма (16).
  • Линия, Прямоугольник - элементы оформления (18, 19).


  • Для использования экранной формы нужно запустить ее в работу. Для этого закроем окно конструктора и выберем команду Открыть формы Студенты. Вид формы при работе с базой данных приведен на рис. 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 способа:

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


  • Третий способ имеет преимущество - при копировании сохраняются свойства раздела "Макет", заданные для полей данного отчета (шрифт, его размер, насыщенность и пр.).

    Кроме того, в окне "Сортировка и группировка" (его можно открыть из контекстного меню или пункта "Вид" главного меню) зададим наличие Примечаний для всех групп (см. рис. 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.

    Таблица 7.3. Структура таблицы SPISOKИмя поляТип данныхРазмер поляИндексированное полеПодпись
    NZТекстовый8Да (Совпадения не допускаются)№ зачетки
    FIOТекстовый45Фамилия, имя, отчество
    DATA_PДата/времяКраткий формат датыДата поступления
    N_FCLTЧисловойБайтДа (Совпадения допускаются)Факультет
    N_SPECTТекстовый7Да (Совпадения допускаются)Специальность
    KURSЧисловойБайтКурс
    N_GRUPТекстовый10Группа
    N_PASPТекстовый10Номер паспорта


    Для поля NZ следует задать свойство "Ключевое поле", т.к. номер зачетки - уникальный для каждого студента и однозначно его идентифицирует в таблице базы. По окончании описания структуры таблицы даем команду Сохранить (на стандартной панели инструментов, в меню - раздел Файл, или при закрытии окна конструктора) и задаем название таблицы - SPISOK.

    Аналогичным образом создаем в базе данных справочник факультетов с именем файла FCLT, структура его приведена в табл. 7.4.

    Таблица 7.4. Структура таблицы FCLTИмя поляТип данныхРазмер поляИндексированное полеПодпись
    N_FCLTЧисловойБайтДа (Совпадения не допускаются)Номер факультета
    NAME_FТекстовый120Название факультета
    Таблица 7.6. Структура таблицы OCENKIИмя поляТип данныхРазмер поляИндексированное полеПодпись
    NZТекстовый7Да (Совпадения допускаются)Номер зачетки
    SEMESTRЧисловойБайтСеместр
    N_PREDMЧисловойЦелоеДа (Совпадения допускаются)Предмет
    BALLТекстовый1Оценка
    DATA_BДата/времяКраткий форматДата
    PREPODТекстовый45Преподаватель
    Таблица 7.7. Структура таблицы PREDMETSИмя поляТип данныхРазмер поляИндексированное полеПодпись
    N_PREDMЧисловойЦелоеДа (Совпадения не допускаются)Номер предмета
    NAME_PТекстовый120Название предмета
    Далее задаем связи Один ко многим между таблицами в базе, открыв окно Схема данных (выбрав эту команду в контекстном меню для окна базы данных) и перетаскивая название поля первичного ключа к аналогичному полю другой таблицы (см. рис. 7.4.). При этом задаем в окне Изменение связей (см. рис. 7.5.) условия соблюдения ссылочной целостности данных: каскадное обновление связанных полей и каскадное удаление связанных записей.

    Создание базы данных
    Рис. 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).
    Использование Microsoft Access для работы с базой данных системы Microsoft SQL Server
    Рис. 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).

    Использование Microsoft Access для работы с базой данных системы Microsoft SQL Server
    Рис. 8.27.  Окно задания связи с базой данных для нового проекта Microsoft Access

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

    Использование Microsoft Access для работы с базой данных системы Microsoft 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:
  • Создать объект Connection в проекте VFP в составе базы данных (рис. 8.29), затем удаленное представление (Remote View) с заданным параметром обновления данных (Send SQL Updates) - рис. 8.30.
    Использование Visual FoxPro для работы с базой данных системы Microsoft SQL Server
    увеличить изображение
    Рис. 8.29.  Установление связи с базой данных SQL Server в проекте Visual FoxPro
    Использование Visual FoxPro для работы с базой данных системы Microsoft SQL Server
    увеличить изображение
    Рис. 8.30.  Задание параметров обновления данных удаленного представления для базы системы SQL Server
  • Добавить в Data Environment экранной формы объект CursorAdapter для связи с базой SQL Server (рис. 8.31) и описать его основные свойства с помощью Построителя объектов (Builder). Предварительно необходимо в системе Windows в программе ODBC Data Source Administrator добавить новую строку в User DSN - "SQL_Students" с драйвером SQL Server, сервером (local) и базой данных "Students" для использования описания этого соединения в объекте CursorAdapter. На первой странице построителя следует задать связь через ODBC для созданного файла DSN "SQL_Students", на второй странице - с помощью кнопки Build: (см. рис. 8.31) выбрать нужную таблицу и ее поля, на третьей странице можно задать режим автоматического или командного обновления для всех полей и индексов таблицы.
    Использование Visual FoxPro для работы с базой данных системы Microsoft 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.  Основные компоненты в архитектуре системы

    Таблица 8.1. Максимальные параметры баз данныхНаименованиеВеличина
    Размер базы данных1 048 516 TB
    Количество объектов в базе данных2 147 483 647
    Количество экземпляров сервера на одном компьютере16
    Количество баз данных в одном экземпляре сервера32767
    Количество файлов в базе данных32767
    Количество таблиц в базе данныхограничено количеством объектов в базе
    Количество полей в таблице базы1024
    Размер файла данных32 TB
    Длина идентификаторов128 символов
    Уровень вложенных хранимых процедур32
    Уровень вложенных запросов32
    Количество некластерных индексов для одной таблицы базы249
    Количество полей в одном индексе16
    Количество байт в одном индексе800
    Количество таблиц в одном запросе256
    Количество байт в одной строке таблицы8060

    Таблица 8.2. Максимальное количество процессоров, поддерживаемых различными версиями системы в режиме симметричной мультипроцессорной обработки данных (SMP)Операционная системаВерсия Microsoft SQL Server 2000Enterprise EditionStandard EditionPersonal EditionDeveloper EditionDesktop EngineSQL Server CEEnterprise Evaluation Edition
    Microsoft Windows 2000 DataCenter3242323-32
    Windows 2000 Advanced Server84282-8
    Windows 2000 Server44242-4
    Windows 2000 Professional--222-2
    Microsoft Windows NT®4.0 Server, Enterprise Edition88282-8
    Windows NT 4.0 Server44242-4
    Windows NT 4.0 Workstation--222-2
    Microsoft Windows 98--1Use Desktop Engine1--
    Windows CE-----1-

    Таблица 8.3. Максимальный размер физической памяти (RAM), поддерживаемой различными версиями системы (Гб)Операционная системаВерсия Microsoft SQL Server 2000Enterprise EditionStandard EditionPersonal EditionDeveloper EditionDesktop EngineSQL Server CEEnterprise Evaluation Edition
    Windows 2000 DataCenter6422642-64
    Windows 2000 Advanced Server82282-8
    Windows 2000 Server42242-4
    Windows 2000 Professional--222-2
    Windows NT 4.0 Server, Enterprise Edition32232-3
    Windows NT 4.0 Server22222-2
    Windows NT 4.0 Workstation--222-2


    Работа с информацией баз данных в программе Enterprise Manager

    Для добавления новых записей в таблицы, редактирования и удаления информации можно использовать команду Open table для выбранной таблицы (рис. 8.23).
    Работа с информацией баз данных в программе Enterprise Manager
    увеличить изображение
    Рис. 8.23.  Выбор режима работы
    При этом можно представить в окне таблицы все данные или отобрать необходимые данные с заданием условий в запросе (рис. 8.24).
    Работа с информацией баз данных в программе Enterprise Manager
    Рис. 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 - Microsoft ActiveX® Data Objects поддерживает быструю разработку сложных приложений и имеет доступ к большинству компонентов системы SQL Server.
    По архитектуре 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 для средств, основанных на COM.
    OLE DB Provider for SQL Server использует специфичные свойства провайдера, интерфейсы и методы компонентов SQL Server, не включенные в OLE DB-спецификации. Большинство этих определенных провайдером компонентов не доступно через ADO.
  • ODBC (Open Database Connectivity) - стандартный интерфейс, позволяющий приложениям Windows обращаться к тем источникам данных, для которых установлен драйвер базы данных.
    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. В ней будут присутствовать все группы объектов этого шаблона:
  • Diagrams - схемы, отображающие связи между таблицами базы;
  • Tables - папка таблиц, в которых хранится информация о таблицах базы и их индексах;
  • Views - папка представлений - описаний наборов данных, объединенных из нескольких таблиц в одну виртуальную таблицу;
  • Stored Procedures - хранимые процедуры - список процедур на языке Transact-SQL;
  • Users - сведения о владельце базы (owner) и правах пользователей, имеющих доступ к базе;
  • Roles - описание типов групп пользователей;
  • Defaults - описание значений по умолчанию базы и их связей с колонками таблиц;
  • User Defined Data Types - описания типов данных пользователя;
  • User Defined Functions - описания функций пользователя;
  • Full-Text Catalog - папка для сохранения полнотекстовых индексов.


  • Создание таблиц базы данных

    В программе 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 с разбивкой их на группы по видам.

    Таблица 8.4. Типы данных системыНаименованиеОписание типа данныхДвоичные данныеСимвольные данныеСимвольные данные в кодировке UnicodeЧисловые целые данныеЧисловые данные с дробной частью числаТип дата и времяДенежный типДанные специальных типов
    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) - выбор компьютера для установки:
  • установить SQL Server на локальном компьютере;
  • установить на удаленном компьютере;
  • создать либо настроить виртуальный сервер.

  • Установка системы
    Рис. 8.2.  Шаг 1 мастера установки системы
    Следующей шаг - выбор вида инсталляции (рис. 8.3.
    Установка системы
    Рис. 8.3.  Выбор вида инсталляции "сервер"
    Возможные варианты:
  • создать новую инсталляцию SQL Server;
  • обновить или удалить компоненты существующей инсталляции;
  • настроить виртуальный сервер;
  • создать файл с информацией для автоматической установки компонентов SQL Server, которая может быть выполнена позднее.

  • Далее программа установки попросит ввести имя пользователя и название организации, а также предложит принять лицензионное соглашение. После этого откроется окно Installation Definition. Оно содержит три варианта установки программного обеспечения (рис. 8.4):
  • Client Tools Only - установка сетевых библиотек и средств администрирования SQL Server. Эта опция выбирается для компьютеров, которые будут использоваться для удаленного управления сервером;
  • Server and Client Tools - полная установка SQL Server. Эта опция выбрана по умолчанию;
  • Connectivity Only - установка сетевых библиотек и компонентов для доступа к данным (Microsoft Data Access Components, MDAC), но не средств администрирования сервера. Эта опция устанавливается для компьютеров, которые должны взаимодействовать с системой SQL Server, но не будут использоваться для администрирования SQL Server.

  • Установка системы
    Рис. 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).

    Таблица 8.5. Службы системы Microsoft SQL Server 2000СлужбаНазначение
    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)
    В состав системы Microsoft SQL Server 2000 входит программа Enterprise Manager (рис. 8.15), имеющая большие возможности по администрированию и работе с базами данных. Если после запуска этой программы список серверов в ней пустой, следует зарегистрировать в ней установленные на компьютере экземпляры сервера.


    При использовании системы аутентификации Windows NT, запроса пароля при подключении не последует. Если используется система аутентификации SQL Server, Enterprise Manager спросит, следует ли выполнять автоматическое подключение или вы хотите, чтобы имя и пароль запрашивались у вас при каждом подключении.

    После регистрации сервера для подключения к нему достаточно щелкнуть на значке "+" слева от имени сервера. Если подключение будет выполнено успешно, красный значок на пиктограмме сервера сменится на зеленый.

    Установка системы
    увеличить изображение
    Рис. 8.15.  Программа Enterprise Manager

    Развернув список баз данных сервера в Enterprise Manager, мы увидим системные и установленные по умолчанию учебные базы данных.

    Это следующие шесть баз данных:

  • master - служит для управления сервером;
  • model - шаблон пользовательских баз;
  • msdb - журнал выполнения заданий и расписания;
  • tempdb - хранение временных таблиц и объектов;
  • Northwind - пример пользовательской базы;
  • Pubs - пример пользовательской базы.


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

    Установка системы
    увеличить изображение
    Рис. 8.16.  Учетные записи пользователей в программе Enterprise Manager

    На сервере должны быть определены три учетные записи:

  • BUILTIN\Administrators;
  • ИМЯДОМЕНА\УчетнаязаписьслужбыSQLServer; (если при установке выбран Use a domain user account)
  • sa.


  • Эти учетные записи генерируются в процессе установки 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