35137

Изучение формата баз данных Visual FoxPro

Практическая работа

Информатика, кибернетика и программирование

После заголовка таблицы следует цепочка 32байтовых описаний полей таблица 4.fmp Fp 01 1 YY Год последнего обновления таблицы Все 02 1 MM Месяц последнего обновления таблицы Все 03 1 DD День последнего обновления таблицы Все 04 4 RecordsCount Количество записей в таблице Все 08 2 HederSize Размер заголовка в байтах Все 10 2 RecordSize Размер записи в байтах Все 12 2 0x000x00 Зарезервировано Все 14 1 0x01 Начало транзакции D4 D5 0x00 Конец транзакции D4 D5 0x00 Игнорируется FS D3 Fb Fp CL 15 1 0x01 Закодировано D4 D5 0x00 Нормальная...

Русский

2013-09-09

549.5 KB

5 чел.

Практическая работа №1

Изучение формата баз данных Visual FoxPro

Visual FoxPro представляет собой среду разработки информационных систем, ориентированных на использование баз данных. Основное назначение VFP – разработка компактных файл-серверных систем, используемых небольшим количеством пользователей. Однако, функциональность VFP достаточно гибка и развита для разработки клиентского обеспечения систем, основанных на использовании SQL-серверов.

К достоинствам VFP можно отнести и наглядность процесса создания базы данных.

Любая таблица базы данных состоит из записей одинаковой длины. Это позволяет при перемещении по содержимому файла однозначно позиционироваться на N-ю запись, сместившись на N*Size байт. Каждая таблица в VFP храниться в файле формата DBF (расширение *.dbf). Этот формат первоначально появился в СУБД dBase и пережил ряд усовершенствований. Формат является открытым. Его отличает простота и удобство использования в целях изучения общих принципов построения баз данных и организации метаданных в них.

Для хранения размера записи Size, общего количества записей, а также прочей служебной информации предназначена заголовочная часть файла DBF. За этим заголовком должны следовать описания полей БД. Очевидно, что количество полей может быть различным. Это означает, что и размер блока описания полей нефиксирован. Поэтому в заголовке хранится смещение первой записи данных от начала файла.

Общая структура файла DBF представлена в таблице 1. Структура 32-байтового заголовка представлена в таблице 2. В таблице 3 приведены обозначения кодовых страниц. После заголовка таблицы следует цепочка 32-байтовых описаний полей (таблица 4). Смещение поля относительно начала записи указано в 12-15-м байтах. Тип и размер поля указываются в 11-м и 16-м байтах (см. также таблицу 5).

Таблица 1 – Общая структура файла DBF

Кол-во байт

Наименование

32

Заголовок DBF-файла

32

Описание первого поля

32

Описание второго поля

...

...

32

Описание n-го поля

1

Завершающий символ 0x0D (13)

RecordSize

Первая запись из n-полей

RecordSize

Вторая запись из n-полей

...

...

RecordSize

m-я запись из n-полей, где m=RecordsCount

1

Завершающий символ 0x1A (26)

Таблица 2 – Структура заголовка файла DBF

№ байта

Размер

Значение

Описание

Используется

00

1

0x03(3)

простая таблица

FS, D3, D4, D5, Fb, Fp, CL

0x04(4)

простая таблица

D4, D5 (FS)

0x05(5)

простая таблица

D5, Fp (FS)

0x30(48)

Visual FoxPro

Fp

0x31(49)

Visual FoxPro (поддержка автоинкремента)

Fp

0x43(67)

с мемо-полем .dbv

FS

0xB3(179)

с мемо-полями .dbv .dbt

FS

0x83(131)

с мемо-полем .dbt

FS, D3, D4, D5, Fb, Fp, CL

0x8B(139)

с мемо-полем .dbt формат D4

D4, D5

0x8E(142)

SQL-таблица

D4, D5

0xF5(245)

с мемо полем .fmp

Fp

01

1

YY

Год последнего обновления таблицы

Все

02

1

MM

Месяц последнего обновления таблицы

Все

03

1

DD

День последнего обновления таблицы

Все

04

4

RecordsCount

Количество записей в таблице

Все

08

2

HeaderSize

Размер заголовка в байтах

Все

10

2

RecordSize

Размер записи в байтах

Все

12

2

0x00,0x00

Зарезервировано

Все

14

1

0x01

Начало транзакции

D4, D5

0x00

Конец транзакции

D4, D5

0x00

Игнорируется

FS, D3, Fb, Fp, CL

15

1

0x01

Закодировано

D4, D5

0x00

Нормальная видимость

Все

16

12

0x00

Многопользовательский режим не используется

D4, D5

0x01

Использование многопользовательского окружения

D4, D5

28

1

0x02

Содержит Memo поля

?

0x01

Используется индекс

Fp, D4, D5

0x00

Индекс не используется

Все

29

1

ID

Номер драйвера языка (см. Таблицу 3)

D3, D4, D5

0x01(1)

кодовая страница 437 DOS USA

Fp

0x02(2)

кодовая страница 850 DOS Multilang

Fp

0x26(38)

кодовая страница 866 DOS Russian

Fp

0x57(87)

кодовая страница 1251 Windows ANSI

Fp

0xC8(200)

кодовая страница 1250 Windows EE

Fp

0x00(0)

игнорируется

FS, D3, Fb, Fp, CL

30

2

0x00,0x00

Зарезервировано

Все

Сокращения: FS = FlagShip Fb = FoxBase Fp = FoxPro CL = Clipper D3 = dBaseIII+ D4 = dBaseIV D5 = dBaseV

Таблица 3 – Обозначения кодовых страниц

Hex ID

Описание

Используется

0x00

OEM

D3, D4, D5

0x01

Codepage_437_US_MSDOS

D3, D4, D5

0x02

Codepage_850_International_MSDOS

D3, D4, D5

0x03

Codepage_1252_Windows_ANSI

D3, D4, D5

0x57

ANSI

D3, D4, D5

0x64

Codepage_852_EasernEuropean_MSDOS

D3, D4, D5

0x65

Codepage_866_Russian_MSDOS

D3, D4, D5

0x66

Codepage_865_Nordic_MSDOS

D3, D4, D5

0x67

Codepage_861_Icelandic_MSDOS

D3, D4, D5

0x6A

Codepage_737_Greek_MSDOS

D3, D4, D5

0x6B

Codepage_857_Turkish_MSDOS

D3, D4, D5

0x78

Codepage_950_Chinese_Windows

D3, D4, D5

0x7A

Codepage_936_Chinese_Windows

D3, D4, D5

0x7B

Codepage_932_Japanese_Windows

D3, D4, D5

0x7D

Codepage_1255_Hebrew_Windows

D3, D4, D5

0x7E

Codepage_1256_Arabic_Windows

D3, D4, D5

0xC8

Codepage_1250_Eastern_European_Windows

D3, D4, D5

0xC9

Codepage_1251_Russian_Windows

D3, D4, D5

0xCA

Codepage_1254_Turkish_Windows

D3, D4, D5

0xCB

Codepage_1253_Greek_Windows

D3, D4, D5

Таблица 4 – Структура описания поля

№ байта

Размер

Значение

Описание

Используется

00

11

ASCII

Имя поля с 0x00 завершением

Все

11

1

ASCII

Тип поля (см. Таблицу 5)

Все

12

4

n,n,n,n

Адрес поля в памяти

D3

0,0,n,n

Смещение относительно начала записи

Fp

0,0,0,0

Игнорируется

FS, D4, D5, Fb, CL

16

1

Byte

Размер поля (см. Таблицу 5)

Все

17

1

Byte

Количество знаков после запятой

Все

18

2

0,0

Зарезервировано

Все

20

1

Byte

Идентификатор рабочей области

D4,D5

0x00

Не используется

FS, D3, Fb, Fp, CL

21

2

n,n

Многопользовательский dBase

D3, D4, D5

0,0

Игнорируется

FS Fb, Fp, CL

23

1

0x01

Установленные поля

D3, D4, D5

0x00

Игнорируется

FS Fb, Fp, CL

24

7

0..0

Зарезервировано

Все

31

1

0x01

Поле включено в .mdx индекс

D4, D5

0x00

Игнорируется

D3, FS, Fb, Fp, CL

Таблица 5 – Типы и размеры полей

Код

Размер

Тип

Описание/Размер

Используется

C

1..n

Char

n ASCII символов

Все

пустые места - пробел 0x20(32)

Все

n = 1..64Kbt

FS

n = 1..32Kbt

Fp, CL

n = 1..254

Все

D

8

Date

8 ASCII знаков (0..9) в формате YYYYMMDD

Все

F

1..n

Float

ASCII символы(-.0123456789) переменная позиция плавающей точки n = 1..20

FS, D4, D5, Fp

N

1..n

Numeric

ASCII символы (-.0123456789) фиксированная позиция точки

Все

n = 1..20

FS, Fp, CL

n = 1..18

D3, D4, D5, Fb

L

1

Logical

ASCII символы (Yy Tt Nn Ff, пробел - не определено)

FS, D3, Fb, Fp, CL

M

10

Memo

10 цифр, определяющих начало блока данных в .dbt-файле или 10 пробелов, если поле мемо пусто

Все

V

10

Variable

Переменная Bin/ASCII данных в .dbv-файле

4 Bin байтов - начало блока в мемо-файле
4 Bin байтов - размер блока
1 Bin байт - подтип данных
1 Bin байт - зарезервировано 0x1A(26) || FS

P

10

Picture

Binary данные в .ftp-файле структура такая же как и в Memo-типе

Fp

B

10

Binary

Binary данные в .dpt-файле структура такая же как и в Memo-типе

D5

G

10

General

OLE-объекты структура такая же как и в Memo-типе

D5, Fp

2

2

short int

Binary int max +/- 32767

FS

4

4

long int

Binary int max +/- 2147483647

FS

8

8

double

Binary signed double IEEE

FS

Таблица 6 – Структура записи

№ байта

Размер

Описание

Используется

0

1

Флаг удаления "*", иначе - пробел

Все

1

1..n

Различные типы полей фиксированной длины без завершающих символов длина поля n определяется в 16 байте структуры описания поля

Все

Индексные файлы (форматов IDX, CDX, MDX) используются для хранения служебной информации о порядке следования значений некоторых полей в записях. Использование этой информации позволяет встроенным механизмам СУБД повысить эффективность обработки запросов.

База данных всегда представляет собой совокупность таблиц. Каждая из таблиц представляет собой файл DBF, структура которого описана выше. Общая информация о совместном использовании файлов таблиц может быть «зашита» в программе. Однако VFP позволяет использовать для хранения этих метаданных специальный файл формата DBC. Это означает, что в файле DBC хранятся описания связей между таблицами, а также некоторая дополнительная метаинформация (смысловые имена таблиц, полей и т.п.).

При этом на практике база данных выглядит как набор из одного файла DBC, и множества пар DBF-CDX.

Остановимся кратко на вопросе использования индексов для связывания таблиц. Индекс, используемый для уникальной идентификации записи в таблице, называется первичным (Primary key). На запись таблицы, используя значение ее первичного ключа, могут ссылаться несколько записей другой таблицы. При этом первая таблица играет роль главной (Master), а вторая – подчиненной (Slave).

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

Формат таблицы DBF

1. Запустить Visual FoxPro (ярлык на рабочем столе). Приблизительный вид рабочего окна Visual FoxPro показан на рисунке 1.

Рисунок 1. Рабочее окно Visual FoxPro

2. Создание файла таблицы выполняется при помощи команды меню FileNew. Для создания отдельной таблицы в окне New необходимо выбрать пункт Table (рисунок 2). Создание таблицы выполняется при помощи кнопки New file (не Wizard). После нажатия кнопки New предлагается ввести имя создаваемого файла в диалоге (рисунок 3). Все файлы создавать в папке, названной по наименованию своей группы и размещаемой в папке AIS на диске D:. При отсутствии указанной папки создать ее самостоятельно.

3. В диалоге редактирования структуры таблицы (дизайнера) необходимо сформировать структуру (рисунок 4) в соответствии с вариантом задания (см. ниже). Каждой строкой таблицы, расположенной в центральной части закладки Fields, описывается поле (колонка) формируемой таблицы. Для каждого поля указываются реквизиты: Name – имя поля, Type – тип данных поля, Width – размер (количество символов), Decimal – количество десятичных знаков, Index – наличие простого индекса. Пример формирования структуры таблицы платежных ведомостей приведен на рисунке 5.

Рисунок 2. Окно New

Рисунок 3. Окно ввода имени создаваемого файла

Рисунок 4. Окно дизайнера таблицы

Рисунок 5. Пример формирования структуры таблицы

4. После создания структуры таблицы возможно редактирование данных в ней. Для открытия таблицы в табличном режиме необходимо воспользоваться командой меню ViewBrowse. Для перевода таблицы в режим редактирования и добавления строк необходимо воспользоваться командой меню ViewAppend mode. Наберите данные в количестве 3-5 строк (рисунок 6).

Рисунок 6. Пример формирования данных таблицы

5. Открыть папку с созданной таблицей при помощи файлового менеджера Total Commander. Убедиться в том, что файл с указанным именем и расширением DBF создан. Открыть его при помощи штатного средства просмотра (клавиша F3). В случае невозможности открытия воспользоваться командой CLOSE TABLES (набрать в окне Command) или временно закрыть Visual FoxPro. Установить шестнадцатеричный режим просмотра (OptionsHex) (рисунок 7). Убедиться в наличии основных элементов структуры метаданных. Определить тип таблицы согласно нулевому байту заголовка. Расшифровать дату последнего обновления таблицы согласно 1-3-му байтам заголовка. Проверить количество записей в таблице согласно 4-7-му байтам заголовка. Расшифровать размер заголовка и убедиться, что записи данных начинаются именно с этого смещения. Найти в заголовочной части поле, хранящее длину записи. Убедиться, что записи представляют собой последовательности из указанного количества байтов. Найти в описаниях полей значения их длин. Найти в одной из записей значения ее полей в указанных позициях.

Использование индексов в таблицах

1. Снова открыть созданный файл DBF.

2. Войти в режим редактирования структуры (ViewTable Designer). Простейший способ создания индексов, позволяющих оптимизировать выполнение сортировок по возрастанию/убыванию значений в соответствующем поле, – указание типа индекса непосредственно в описании поля. Для этого в закладке Fields в столбце Index для соответствующего поля необходимо выбрать значение Ascending – индексирование по возрастанию значения поля или Descending – индексирование по убыванию.

3. Перейдя на закладку Indexes, можно убедиться, что индексы, указанные в закладке Fields, занесены в список индексов.

Рисунок 7. Пример внутренней структуры таблицы

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

Создание базы данных

1. Создание базы данных выполняется при помощи команды меню FileNew (Database). При этом сразу открывается окно отображения структуры БД Database Designer (рисунок 8). Любая создаваемая таблица будет «встраиваться» в созданную БД.

2. Создайте набор таблиц в соответствии с вариантом задания (см. ниже). Обратите внимание на возможности настройки таблиц, которые появляются для базы данных в отличие от рассмотренных ранее (например, возможности настройки опций отображения значений полей).

3. Одним из ключевых отличий является возможность настройки первичных ключей таблиц. Это делается путем ручного добавления индекса (команда Insert) на закладке Indexes окна Table Designer. Для первичного ключа необходимо указать тип Primary. Связывание таблиц в базе данных производится следующим образом. В окне Database Designer выполняется перетаскивание первичного индекса главной таблицы на обычный (регулярный) индекс подчиненной таблицы. В результате устанавливается постоянная связь между таблицами.

Рисунок 8. Пустое окно дизайнера базы данных

Например, для учета учебного процесса создается таблица описаний студентов (рисунок 9). В ней поле наименования специальности n_spect является проиндексированным (см. столбец Index, а также вкладку Indexes – рисунок 10). Создается справочная таблица специальностей, где соответствующее поле является первичным ключом (рисунки 11, 12). В окне Database Designer выполняется связывание таблиц (рисунок 13). Аналогичным образом с таблицей студентов может быть связана справочная таблица факультетов, а сама таблица студентов может быть использована в качестве справочной для таблицы результатов экзаменов, если в ней будет проиндексированное поле nz (номер зачетной книжки).

Рисунок 9. Структура таблицы студентов

Рисунок 10. Описание индексов таблицы студентов

Рисунок 11. Структура таблицы специальностей

Рисунок 12. Описание индексов таблицы специальностей

Рисунок 13. Связывание таблиц в окне дизайнера базы данных

4. После создания БД следует проанализировать, как выглядит БД в файловой системе (главный файл метаданных DBC, файлы таблиц DBF, индексные файлы CDX).

Варианты заданий

  1.  Библиотечный учет. Таблицы: Авторы, Издательства, Города издания, Выходные данные, Экземпляры, Читатели.
  2.  Расписание учебных занятий. Таблицы: Временные границы пар, Преподаватели, Дисциплины, Аудитории, Виды занятий, Группы, Расписание.
  3.  Кадровый учет. Таблицы: Должности, Персоналии, Занимаемые должности, Приказы (о назначениях, увольнениях).
  4.  Учет заказов. Таблицы: Заказчики, Товары, Заказы, Выполненные заказы.
  5.  Учет поставок. Таблицы: Поставщики, Товары, Склады, Поставки.
  6.  Учет ремонта и технического обслуживания. Таблицы: Заказчики, Заказы, Оборудование, Комплектующие, Выполненные заказы, Комплектующие для выполнения заказов.
  7.  Производственный учет. Таблицы: Комплектующие, Готовая продукция, Склады, Выпуск продукции.
  8.  Учет рейсов предприятия грузоперевозок. Таблицы: Заказчики, Заказы, Водители, Машины, Выполненные заказы.
  9.  Учет авиаперевозок. Таблицы: Города, Самолеты, Пилоты, Расписание, Рейсы, Пассажиры, Билеты.
  10.  Учет деятельности ресторана. Таблицы: Столики, Резервирование, Меню, Заказы.
  11.  Учет деятельности гостиницы. Таблицы: Номера, Клиенты, Резервирование, Проживание, Начисления, Оплаты.
  12.  Учет заработной платы. Таблицы: Работники, Ставки, Отработанные дни, Начисления, Выплаты.


 

А также другие работы, которые могут Вас заинтересовать

70128. ОЦЕНКА ЭФФЕКТИВНОСТИ СИСТЕМЫ ЗАНУЛЕНИЯ 1.82 MB
  Оценить эффективность системы зануления в сети без повторного заземления нулевого защитного проводника. Оценить эффективность системы зануления в сети с повторным заземлением нулевого защитного проводника.
70129. Визначення коефіцієнту відновлення та часу співудару пружних куль 52.5 KB
  Мета: визначити коефіцієнт відновлення і часу співудару у випадку пружного центрального удару куль. Прилади та обладнання: джерело постійного струму, електор магніти з фіксаторами, вимірювач напруги, дві кульки підвішені на струмопровідних нитках.
70130. Создание и администрирование учетных записей пользователей и групп 126.5 KB
  Цели работы: научиться создавать, изменять удалять учетные записи и группы; научиться задавать и изменять пароли; научиться добавлять учетные записи в группы. Задание 1. Создайте доменную учетную запись декана: имеет доступ ко всем ресурсам сети, может осуществлять вход на любой компьютер.
70131. УКРАЇНСЬКА НАРОДНА ВИШИВКА У СУЧАСНОМУ МОДЕЛЮВАННІ, ТВОРЧА РОЗРОБКА І ЗАМАЛЮВАННЯ ОРНАМЕНТІВ ДЛЯ ТЕХНІК ГЛАДІ ТА ХРЕСТИКА 304 KB
  Слово орнамент в перекладі з латині означає прикраса Люди завжди намагалися прикрасити свій побут зробити його святковим нарядним радісним тому речі які їх оточували вони здавна покривали різними орнаментами. Вся різноманітність орнаментальних форм підпорядковується математичним законам...
70134. Прості цикли в Паскалі. Сума нескінченного ряду 102 KB
  Постановка завдання: Обчислити суму нескінченного ряду з заданою точністю. Визначити кількість членів, необхідних для досягнення заданої точності. Створити два типи програм за допомогою різних операторів циклу.
70135. Чертёж плоского контура и его аксонометрия 89.5 KB
  Команда LIMITS (Ограничения) позволяет выбрать формат поля чертежа. Первый запрос командной строки предлагает нам координаты левого нижнего угла формата принять за начало координат (0,0) по умолчанию. После ввода начала координат второй запрос предлагает выбрать правый верхний угол...
70136. ИЗУЧЕНИЕ ПРИНЦИПА ДЕЙСТВИЯ И СХЕМ ДЕАЭРАТОРОВ 157.5 KB
  Деаэрация питательной воды паровых котлов и подпиточной воды тепловых сетей является обязательной для всех котельных. Деаэраторы предназначены для удаления из воды растворенных в ней неконденсирующихся газов. Для деаэрации питательной воды в котельных применяются струйные...