Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009

.pdf
Скачиваний:
4969
Добавлен:
14.05.2016
Размер:
14.64 Mб
Скачать

12. СУБД Visual FoxPro 8.0

443

волы должны быть набраны в одинаковом (нижнем или верхнем) регистре. Имеются два оператора склеивания строк + и - .

Пример:

"Весна "+ [96] = [Весна 96] или "Весна "- [96] = [Весна96 ]

В Visual FoxPro добавлен новый тип символьных полей Character (binary), которые позволяют хранить символы с ASCII-кодами от 0 до 255.

Следующие 4 типа данных (Numeric, Float, Integer и Double) можно условно объединить в одну общую группу числовых данных. Допустимыми символами полей перечисленных типов являются цифры. При работе с данными этих типов возможно выполнение математических операций и автоматический контроль вводимых данных при работе с Visual FoxPro, исключающий ввод любых символов, кроме цифр.

Numeric

Числа в формате с фиксированной точкой. Целое отличается отсутствием дробной части. Например, оператор присваивания

х=43.385

определяет тип переменной х как NUMERIC и присваивает ей указанное значение. Над данными этого типа допустимы два типа операций:

1. Арифметические

+ ) - > * 1/1/

** или А — возведение в степень.

2. Сравнения

<,>, = ,<=,>=,

# или <> или != — не равно.

Float

Числовые данные типа Float включены для совместимости и функционально эквивалентны данным типа Numeric.

В Visual FoxPro появились новые типы числовых данных Double и Integer.

Double

Числовые вещественные (с плавающей точкой) данные двойной точности.

Integer

Данные целочисленного типа применяются для представления целых чисел и позволяют сэкономить место для хранения данных.

Date

Этот тип используется для хранения календарных дат. При этом применяются различные форматы представления данных, например:

444

Часть 3. Современные СУБД и их применение

 

AMERICAN 12/31/93

 

GERMAN 31/12/93 и др.

 

Формат AMERICAN используется по умолчанию. Иной вид формата уста-

навливается командой

 

SET DATE <формат>,

 

где <формат> — вид заказываемого формата. Поддерживается контроль

правильности вводимых дат. Даты изменяются в диапазоне 01.01.100 до 12.31.9999. При задании дат XX века можно указывать только две последние цифры года.

DateTime

Тип дата и время появился в Visual FoxPro. Кроме 8 байт, которые требовались для хранения дат в формате Date, под данные данного типа отводится дополнительно еще 6 байтов для хранения времени в виде HHMMSS, где НН — часы от 00 до 23, ММ — минуты, a SS — секунды. При превращении данных типа Date в данные типа DateTime автоматически устанавливается время 12:00:00. Над данными этого типа можно выполнять определенные арифметические операции, так, например, добавляя к дате 1 мы увеличиваем ее на один день, а добавлять секунды к переменной типа DateTime мы изменяем соответственно время.

Logical

Логический тип данных допускает два возможных значения и четыре варианта их обозначения:

Истина (Да) — .Т. или .t. или .Y. или .у. Ложь (Нет) — .F. или .f. или .N. или .п.

Результат сравнения данных любого типа является логическим значени-

ем:

.Т. — если условие сравнения соблюдается,

.F. — в противном случае.

Над данными логического типа могут выполняться следующие операторы:

.NOT. — НЕ (отрицание или невыполнение условия);

.AND. — И (одновременное выполнение двух условий);

.OR. — ИЛИ (выполнение хотя бы одного условия).

Memo

Поля базы данных (БД) данного типа предназначены для хранения символьных строк произвольной длины. Значения типа Memo могут иметь произвольный размер, определяемый размером только жесткого диска компьютера и хранятся в отдельном файле с расширением .FPT, имя которого совпадает с именем соответствующей таблицы. Каждая таблица имеет толь-

12. СУБД Visual FoxPro 8.0

445

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

Само Мето-поле имеет блочную структуру. Размеры блока изменяются с помощью команды SET BLOCKSIZE. При этом могут задаваться блоки в диапазоне от 33 до 511 байт. Размер блока большего размера кратен 512 байтам и обозначается целыми числами от 1 до 32. По умолчанию устанавливается блок размером в 64 байта. При этом запись в 65 байт потребует 2 блока, под которые будет отведена область памяти в 128 байт. При выборе размеров блоков Мето-полей необходимо стремиться к балансу между перерасходом памяти, если блоки чрезмерно велики, и снижением скорости работы с ними из-за увеличения блоков, обусловленного их небольшими размерами.

Замечание.

FPT-файл, созданный для какой-то таблицы, является неотъемлемой ее частью.

General

Поля баз данного типа позволяют хранить двоичные данные, а именно изображения, звук и т. д. Поля типа General являются специальной разновидностью Мето-полей. Они хранятся в том же FPT-файле, что и все М е т о - поля данной таблицы, однако используются они иначе, чем обычные М е т о - поля.

Currency

ЭТО ТИП данных введен в Visual FoxPro для оперирования денежными суммами. Поля таблиц данного типа схожи с числовыми полями, но в отличие от числового поля, для них определена точность в четыре знака после запятой. Поэтому при отображении целых чисел после денежной точки добавляются 4 нуля. Например, не 36, а 36.0000.

Array

Массив представляет собой совокупность элементов, имеющих общее имя. Массив объявляется командой DECLARE или DIMENSION, которая задает имя и длину массива в круглых скобках, например:

DECLAREmasl(4,6); mas2(10)

Здесь описаны два массива: двумерный массив с именем masl (размерность 4 на 6) и одномерный массив из 10 элементов.

При объявлении массива каждому его элементу по умолчанию присваивается начальное значение .F. (false). Каждый элемент массива может использо-

446

Часть 3. Современные СУБД и их применение

ваться как переменная любого допустимого типа и размера. Поэтому с ними можно и работать как с переменными: присваивать значения, включать в вычисляемые выражения, распечатывать значения и т. д.

Обращаются к элементу массива по имени массива с указанием индекса — номера этого элемента в массиве, например, mas(i).

Создание БД с помощью

Конструктора

Конструктор БД позволяет создавать, модифицировать и индексировать таблицы БД, устанавливать постоянные межтабличные связи.

Создание базы данных с помощью Конструктора БД выполним применительно к базе данных «Учебная», спроектированной в предыдущем разделе. Прежде всего, определим типы и размеры полей БД следующим образом:

T_ZAGR(Fio. Predm. Gruppa. VidZan),

C15C10I3C1

T_PREP(Fjo, Stag, Dolgn, Kaf),

C15 12 CIO 12

T_DOLGN( Dolgn, Oklad).

CIO N7

T_STAG(Stag, D_Stag)

C12N7

В рассматриваемой БД подчеркнутые поля образуют ключ соответствующей таблицы. В таблице T ZAGR поля (Fio, Predm, Gruppa) образуют ключ при условии, что один и тот же преподаватель в одной группе не может одновременно читать лекции и проводить практические занятия. В противном случае ключ таблицы будет включать все ее поля. В таблице T PREDM ключ образуют поля Predm и Gruppa с учетом допущения, что один и тот же предмет может читаться в различных группах.

Замечание.

Наименования полей в рассматриваемой БД по традиции (в связи с ограничениями FoxPro) заданы латинскими буквами (Fio, Predm, Gruppa, Stag и т. д.), хотя в Visual FoxPro 5.0 полям таблицы допускается задавать названия, отличные от латинских.

Перейдем непосредственно к созданию БД «Учебная». Для удобства назовем ее Bdu.

Для создания БД выполним команду File| New (Файл | Создать). В результате откроется диалоговое окно New (Новый) (рис. 12.2), в котором перечислены все типы файлов Visual FoxPro, которые можно создать.

10. СУБД Access 2002

4 4 7

У New

БЗ

Г File type——••-•-

С

Project

(*

IDatabasel

Г

Table

H e w file

ffiuery

^jQonnedion

ГView

Г Remote vjevv

Wizard

 

 

С

Form

 

С

Report

 

Г

Isabel

 

С

Program

 

Г

Class

 

Г

Text file

Cancel

С

Menu

Help

 

 

Рис. 12.2. Диалоговое окно New

При выбранном переключателе Database (база данных) нажатие кнопки New file (Новый файл) приводит к появлению диалогового окна Create (Создать). В списке верхней части окна следует выбрать папку, в поле Enter (ввод) указать имя файла базы данных (Bdu.dbc) и нажать кнопку Сохранить.

В результате откроется диалоговое окно Database Designer — Bdu (окно Конструктора созданной базы данных Bdu). В системном меню Visual FoxPro появится новое меню Database (база данных), содержащее команды Конструктора БД (табл. 12.3).

 

Таблица 12.3

 

Команды меню Database

Команда

Н а з н а ч е н и е

N e w T a b l e

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

A d d T a b l e

Д о б а в л е н и е т а б л и ц ы в Б Д

N e w R e m o t e V i e w

С о з д а н и е у д а л е н н о г о п р е д с т а в л е н и я д а н н ы х

N e w Local V i e w

С о з д а н и е л о к а л ь н о г о п р е д с т а в л е н и я д а н н ы х

4 4 8

Команда

M o d i f y

B r o w s e

R e m o v e

R e b u i l d Table I n d e x e s

R e m o v e D e l e t e d R e c o r d s Edit Relationship

Referential

Integrity

Edit S t o r e d

P r o c e d u r e s

C l e a n U p D a t a b a s e

Часть 3. Современные СУБД и их применение

Таблица 12.3 (продолжение)

Назначение

М о д и ф и к а ц и я т а б л и ц ы

Р е д а к т и р о в а н и е т а б л и ц ы в р е ж и м е B r o w s e У д а л е н и е т а б л и ц ы и з Б Д П е р е с т р о й к а и н д е к с о в

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

О ч и с т к а Б Д о т п о м е ч е н н ы х н а у д а л е н и е о б ъ е к т о в

Создать БД можно также, набрав в командном окне Visual FoxPro команду

CREATE DATABASE ИмяБазыДанных

Если имя БД в команде не указано, то при ее выполнении открывается диалоговое окно Create (создать), в котором нужно указать имя создаваемой БД.

1 2 . 7 . Т а б л и ц ы и и н д е к с ы

В Visual FoxPro можно создавать таблицы, входящие в БД, и отдельные таблицы. Рассмотрим создание таблиц, являющихся компонентами БД.

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

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

каждая таблица в БД должна иметь уникальное имя;

имя таблицы является именем одноименного файла, возможное число символов в имени определяется операционной системой;

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

Database | New Table (база данных | новая таблица). Далее в диалоговом окне New Table (новая таблица) следует вызвать Конструктор таблиц (кнопка New Table — новая таблица) или Мастер таблиц (Table Wizard).

12. СУБД Visual FoxPro 8.0

449

Пример 1. Рассмотрим создание для нашей БД таблицы T_ZAGR(Fio, Predm, Gruppa, VidZan) с помощью Конструктора таблиц.

1. Перейдем в Конструктор таблиц, нажав в окне диалога New Table (новая таблица) кнопку New Table (новая таблица). Определим имя со-

здаваемой таблицы в окне Create (создать). В результате откроется ди-

алоговое окно Конструктора таблиц Table Dezigner (рис. 12.3), позволяющее сформировать таблицу.

2.Выберем вкладку Fields (поля) (рис. 12.3), введем имя первого поля Fio. Для задания типа поля перейдем в следующий столбец с помощью мыши или клавиши Tab. Тип поля в нем выбирается из раскрывающегося списка.

3.В следующем столбце установим размер поля. Для ноля Fio это 15 символов.

4.Установим заголовок поля. Для этого перейдем в поле Caption (заголовок), расположенное в области Display и введем там заголовок «Фамилия И.О.». В поле Field Comment (комментарий поля) можно задать краткое описание поля.

T a b l e D e s i g n e r

Fields | Indexes |

Name

- t z a g r d b f

 

Table |

 

Type

Width Decimal Index NULL

X fio

Character

15

 

predm

Character

10

 

gruppa

Integer

4

 

vidzan

Character

8

Insert

 

 

 

 

 

 

Delete

Display

 

Field validation -

 

Format:

 

Rule:

 

Input jnask:

 

Message:

 

Caption:

J Фамилия И.О.

| Default value:

[Лекция

Map field type to classes

rield comment:

 

Dispjay library:

 

4\

N

Display class:

< default

zi

Рис. 12.3. Диалоговое окно Table Dezigner

15 Зак. 541

450

Часть 3. Современные СУБД и их применение

5.Для задания сортировки данных в таблице по полю Fio надо перейти в столбец Index (индекс) и из раскрывающегося списка выбрать Ascending (возрастающий), если требуется сортировка в порядке возрастания данных, и Descending (убывающий) — по убыванию. Эта сортировка достигается использованием индексирования, о котором поговорим позже.

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

7.Полю VidZan (вид занятий) таблицы определим значение по умолчанию. Для этого выберем поле VidZan таблицы и в нижней части окна в поле Default value: (значение по умолчанию:) введем слово «Лекция».

Укажем назначение важнейших элементов диалогового окна.

Decimal — задает число цифр после десятичной точки в соответствующих типах данных,

Index — позволяет указать поле таблицы по которому она будет проиндексирована,

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

Назначение некоторых кнопок:

Insert (вставка) — вставка поля перед тем, на который установлен курсор, Delete (удаление) — удаление выбранного поля.

Для формирования свойств таблиц необходимо перейти на вкладку Table (таблица) диалогового окна Конструктора таблиц. На этой вкладке можно ввести текстовый комментарий к таблице (поле Table Comment:), задать условия проверки вводимых данных на уровне записей (список Rule:) и задать триггеры (Triggers) — специальные подпрограммы, срабатывающие при выполнении таких операций с записями таблицы как добавление, удаление и изменение. При этом контроль вводимых данных будет осуществляться при каждом обращении к таблице.

Индексирование таблиц

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

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

12. СУБД Visual FoxPro 8.0

451

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

В Visual FoxPro имеются различные варианты индексных файлов, в том числе и для поддержки предыдущих версий FoxPro. Будем использовать структурный индексный файл, который эффективен и прост в применении. Структурный индексный файл обеспечивает реализацию всех индексов одной таблицы и имеет имя, совпадающее с именем самой таблицы, и расширение CDX. Структурные индексные файлы открываются и закрываются одновременно с таблицами, что упрощает работу с ними.

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

В Visual FoxPro тип индексов задается при их создании с помощью Конструктора таблиц. Рассмотрим процедуру создания индекса. В диалоговом окне Table Designer (конструктортаблиц) выберем вкладку Indexes (индексы) (рис. 12.4).

Table

Designer - t

zagi.dbl

 

 

 

 

 

Fields

Indexes | Table J

 

 

 

 

 

Order Name

Type

Expression

Filter

 

 

 

ига _zagr

Primary

]||fio+predm+ST| ...J |

|

j J

OK

 

 

 

 

 

 

Candidate

 

 

 

 

Cancel

 

 

 

 

 

 

 

 

 

Unique

 

 

 

 

 

 

 

Regular

 

 

 

 

Insert

Delete

Рис. 12.4 Вкладка Indexes

4 52

Часть 3. Современные СУБД и их применение

Вполе Name (имя) задаем имя тега — имя индекса. Слева от имени индекса располагается переключатель, задающий направление упорядочения значений индексного выражения (по возрастанию или убыванию значений тега).

Вполе Туре (тип) выберем из списка подходящий тип для устанавливаемого тега (табл. 12.4).

 

 

 

Таблица 12.4

 

 

Типы индексов (тегов)

Тип тега

 

 

Описание

R e g u l ar

З н а ч е н и е и н д е к с н о г о в ы р а ж е н и я з а п и с ы в а е т с я д л я к а ж д о й

 

з а п и с и т а б л и ц ы . П р и н а л и ч и и о д н о г о и т о г о ж е з н а ч е н и я д л я

 

н е с к о л ь к и х з а п и с е й в и н д е к с н о м ф а й л е б у д е т у к а з а т е л ь на

 

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

 

в п о р я д к е их ввода .

 

U n i q u e

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

 

п е р в о й из п о в т о р я ю щ и х с я з а п и с е й и т о л ь к о на н е е в и н д е к с н о м

 

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

 

( п е р в а я ) из з а п и с е й с о д и н а к о в ы м з н а ч е н и е м и н д е к с н о г о

 

в ы р а ж е н и я .

 

C a n d i d a t e

С о з д а е т с я у н и к а л ь н ы й и н д е к с , не с о д е р ж а щ и й п о л е й с п у с т ы м и

 

з н а ч е н и я м и . О н я в л я е т с я

к а н д и д а т о м на р о л ь п е р в и ч н о г о ключа,

 

но н е я в л я е т с я т а к о в ы м ,

т а к как в т а б л и ц е м о ж е т быть только

 

о д и н

п е р в и ч н ы й ключ.

 

Primary

О д и н

и з и н д е к с о в , у д о в л е т в о р я ю щ и й т р е б о в а н и я м и н д е к с а т и п а

 

C a n d i d a t e м о ж е т быть выбран в к а ч е с т в е п е р в и ч н о г о (Primary)

 

ключа . И с п о л ь з у е т с я д л я связывания т а б л и ц и о п р е д е л е н и я

 

у с л о в и й ц е л о с т н о с т и данных .

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

Поле Filter (фильтр) позволяет определить для индекса фильтр, служащий для ограничения формируемых значений индекса. Результат выражения, используемого в фильтре должен иметь логический тип.

Пример. Создание индекса, являющегося первичным ключом таблицы. Рассмотрим формирование первичного ключа для таблицы T ZAGR. Пер-

вичный ключ здесь является составным и представляет собой выражение Fio+ Predm+STR( Gruppa). В подобных выражениях все компоненты должны быть