Распечатать страницу

Простое приложение в Microsoft Visual FoxPro

« Назад

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

Назначение приложения – предоставить пользователю информацию о состоянии его личной библиотеки. В состав приложения входят:

  • база данных HomeLibrary;

  • формы, позволяющие вводить, редактировать, находить и просматривать данные;

  • отчеты, показывающие различные разрезы данных;

  • сервисные возможности, позволяющие, например, создавать копии базы данных или выполнять упаковку ее таблиц;

  • главная программа;

  • меню.

База данных HomeLibrary содержит сведения о книгах домашней библиотеки и их авторах. Ее таблицы перечислены в табл. 2.1.

Таблица 2.1

Таблицы базы данных HomeLibrary

Таблица

Назначение

Authors

Хранит сведения об авторах

Books

Хранит сведения о книгах библиотеки

WorkType

Содержит перечень видов произведений: повесть, рассказ и др.

BooksAuthors

Позволяет указать авторов каждой книги; введена, поскольку книга в общем случае может иметь нескольких авторов

BooksContent

Позволяет описать содержание книги

База данных, ее таблицы, а также их индексы сохраняются в виде файлов, имеющих соответственно расширения DBC, DBF и CDX. Файлы, сопутствующие этим файлам, с расширениями DCT и FPT хранят данные неограниченной длины – так называемые memo-данные.

В приведенной модели содержатся сведения о трех объектах: книгах, их авторах и видах литературных произведений.

Поля рассматриваемых таблиц описаны в табл. 2.2.

Таблица 2.2

Поля таблиц базы данных HomeLibrary

Таблица

Поле

Тип

Назначение

Authors

AuthorId

Integer

Номер (код) автора

Author

Character(50)

Фамилия, имя и отчество автора

InputDate

Date

Дата ввода в базу данных сведений об авторе

Information

Memo

Прочие сведения об авторе

Books

BookId

Integer

Номер книги

Book

Character(50)

Название книги

PDate

Date

Дата приобретения книги

Price

Numeric(10, 2)

Цена покупки

BooksAuthors

BookId

Integer (AutoInc)

Номер книги; записи с одним значением поля BooksAuthors.BookId позволяют выбрать авторов книги с таким же значением Books.BookId

AuthorId

Integer

Номер автора

BooksContent

BookId

Integer

Номер книги; записи с одним значением поля BooksContent.BookId позволяют составить содержание книги с таким же значением Books.BookId

Name

Character(50)

Название статьи, повести и пр., имеющейся в книге с номером BooksContent.BookId

TypeId

Integer

Номер вида произведения

WorkType

TypeId

Integer (AutoInc)

Номер вида произведения

WorkType

Character(20)

Содержит наименование вида произведения: рассказ, роман и т. д.

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

При проектировании таблиц устраняются избыточность данных и описанные в разд. 14.3.2 аномалии. В частности, для этих целей введена таблица BooksAuthors.

Поля AuthorId и BookId введены для однозначного распознавания объектов – авторов и их книг. Имена подобных полей принято завершать первыми двумя буквами глагола Identify – опознавать.

Уникальность значений этих полей, если они целочисленные, может быть обеспечена, если задать их тип как Integer (AutoInc). Такое поле недоступно для редактирование и его значение при добавлении новой записи автоматически наращивается VFP.

В рассматриваемой базе такой тип указан для полей BookId и TypeId соответственно таблиц Books и WorkType.

Таблицы, несущие дополнительные сведения об объектах, собственных полей-идентификаторов не имеют. К таковым относятся таблицы BooksAuthors и BooksContent.

Индексы таблиц базы данных перечислены в табл. 2.3.

Таблица 2.3

Индексы таблиц базы данных HomeLibrary

Таблица

Индекс

Тип

Выражение

Authors

AuthorID

Primary

AuthorId

Author

Regular

Author

Books

BookId

Primary

BookId

Book

Regular

LEFT(Book, 20)

BooksAuthors

BookId

Regular

BookId

AuthorId

Regular

AuthorId

BooksContent

BookId

Regular

BookId

TypeId

Regular

TypeId

BookIdName

Candidate

TRANSFORM(BookId) + Name

WorkType

TypeId

Primary

TypeId

WorkType

Candidate

WorkType

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

Тип Candidate индексов BookIdName и WorkType указывает на уникальность значений индексных выражений.

Базу данных создадим в проекте, который так же назовем HomeLibrary (рис. 2.1).

7.1.-Проект-HomeLibrary-вкладка-Data

Рис. 2.1. Проект HomeLibrary; вкладка Data

Новый проект, а точнее диспетчер проекта, открывается при выборе пункта New подменю File и последующем выборе переключателя Project и нажатии на кнопку New file в диалоге New, фрагмент которого приведен на рис. 2.2.

7.2.-Создание-нового-проекта

Рис. 2.2. Создание нового проекта

Файл проекта имеет расширение PJX. Memo-данные проекта хранятся в файле с расширением PJT.

Имеются и иные способы создания нового проекта, например можно для активизации окна (рис. 2.2) нажать Ctrl+N или воспользоваться иконкой  стандартной панели управления, или набрать в командном окне

create project                      && или: modify project

и нажать на Enter.

Замечания:

1. Командное окно, если оно закрыто, появляется на экране при нажатии на Ctrl+F2.

2. Приведенный на рис. 2.2 диалог будет нами неоднократно употребляться для создания файлов разных типов.

При открытии диспетчера проекта укажем имя файла проекта HomeLibrary.pjx в папке d:\HomeLibrary. (В этой же папке будем держать базу данных HomeLibrary и ее таблицы)

Перейдем в диспетчере на вкладку Data (см. рис. 2.1) и добавим базу данных (кнопка New), указав в качестве имени файла HomeLibrary.dbc. Затем, оперируя кнопками New и при необходимости Modify, создадим DBF-файлы таблиц с именами, приведенными в табл. 2.1, и сформируем поля и индексы таблиц в соответствии с табл. 2.2 и 2.3.

Порядок выполнения этих операций очевиден и поэтому не обсуждается.

Примеры записей в таблицах базы данных приведены на рис. 2.3 – 2.7.

7.3.-Фрагмент-таблицы-Authors

Рис. 2.3. Фрагмент таблицы Authors

7.4.-Фрагмент-таблицы-Books

Рис. 2.4. Фрагмент таблицы Books

7.5.-Номера-книг-и-их-авторов-в-таблице-BooksAuthors

Рис. 2.5. Номера книг и их авторов в таблице BooksAuthors

7.6.-Содержание-книг-с-номерами-1-и-2-и-типы-произведений-в-таблице-BooksContent

Рис. 2.6. Содержание книг с номерами 1 и 2 и типы произведений в таблице BooksContent

7.7.-Фрагмент-таблицы-WorkType

Рис. 2.7. Фрагмент таблицы WorkType

Из рис. 2.7. видно, что при отображении поля WorkType используется заголовок "Вид произведения". Он задан на вкладке Fields проектировщика таблицы (рис. 2.8).

7.8.-Фрагмент-вкладки-Fields-проектировщика-таблиц

Рис. 2.8. Фрагмент вкладки Fields проектировщика таблиц

Такая возможность предоставляется только для полей таблиц, принадлежащих базе данных.