Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
база данных.docx
Скачиваний:
167
Добавлен:
24.03.2015
Размер:
5.83 Mб
Скачать

12.7. Таблицы и индексы

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

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

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

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

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

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

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

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

Пример 1.Рассмотрим создание для нашей БД таблицы Т_ZAGR(Fio, t^redm. 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 (комментарий поля) можно задать краткое описание поля.

Table Designei - t_zagr dbf

t

fio

Character

15

A.

pndm

Character

10

gr'ipna

Integur

4

vidian

Character

8

Fierai |Iluexes J Table ] Name Type

Display - Format:

Vvidth Decimal Index NULL

OK

Cancel

Insert

Delete

Field validation- Rule.

Message.

Default value: [лекчмя

Input mas*' . Captior [фамилия И О

Map field type to classes

Display library: |

I comrnenl

H

A

Di^elay clasf ITdefault

15 Чак 474

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

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

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

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

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

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

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

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

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

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

Delete (удаление)— удаление выбранного поля.

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

Индексир( тайме таблиц

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

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

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

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

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

Fields indexes j ТаЫе j

Oider N« Type Expression Fifti

Caric,

Insert ,

Delete

-

Рис. 12 4 Вкладка Indexes

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

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

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

Таблица12.4

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

Тип тега

Описание

Regular

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

Unique

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

Candidate

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

Primary

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

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

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

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

Рассмотрим формирование первичного ключа для таблицы T_Z AGR. Пер­вичный ключ здесь является составным и представляет собой выражениеFio+ Predrn-' STR( Gruppa). В подобных выражениях все компоненты должны быть

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

  1. Откроем окно Конструктора таблиц для таблицы TZAGR. Для этого в окне Конструктора БД установим курсор на таблицу, щелчком правой кнопкой мыши вызовем всплывающее меню и выполним команду Мо<fy (модифицировать).

  2. В диалоговом окне Конструктора таблиц выберем вкладку Indexes (ин­дексы).

  3. В поле Name (имя) открывшегося диалогового окна введем имя индек­саizagr.

  4. В списке возможных типов индекса в поле Гуре (тип) выберем Primary.

  5. В поле Expression (выражение) введем выражение для индексаi zagr.

  6. Установим переключатель Order (порядок) в положение по возраста­нию (рис. 12.3).

  7. Нажмем ОК.

Аналогично можно проиндексировать остальные таблицы БД Bdu (табл. 12.5).

Таблица 12.5

Индексные выражения для индексов БД Bdu

Таблица

Имя тега

Индексное выражение

TZAGR

Lzagr

Fio+ Predm+STR(Gruppa)

Т PREP

Lprep

Fio

TSTAG

i_stag

Stag

T_DOLGN

i_dolgn

Dolgn

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

Изменение структуры таблицы

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

  • изменять имена и типы нолей,

  • вставлять пропущенные поля,

  • удалять лишние поля,

  • изменять порядок следования полей в таблице.

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

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

  • изменении длины полей или числа знаков после запятой, так как это может привести к потере данных;

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

Замечание.

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

Для изменения структурытаблицы, являющейся элементом БД, нужно открыть диалоговое окно Конструктор таблиц (Table Designer) со структу рой выбранной таблицы. Для этого достаточно открыть окно Конструктора БД, установить в нем курсор на модифицируемую таблицу и нажать кнопкуModify Table (модифицировать таблицу)панели инструментов Database Designer (конструктор базы данных).

Рассмотрим подробнее операции по модификации таблицы, выполняемые в окне Конструктор таблиц (Table Designer).

Добавление полей является самой безопасной операцией. Для ее реализа ции необходимо с помощью клавиш-стрелок установить курсор на строку, перед которой необходимо вставить новое поле (в любом ее столбце) и на жать кнопку Inser t (вставить)(рис.J 2.4). При этом появляется новая строка с именемNewField. Далее по рассмотренной технологии можно ввести имя нового поля и его параметры.

Для удаления лишнего поля достаточно выделить его в окне Конструкто­ра таблиц и лажать клавишу Delete (удалить).Если открытый на данный момент индексный файл тж содержит ссылок на удаляемое поле, то поле бу­дет удалено. Рели такие ссылки имеются, то появится предупреждающее со общение.

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

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

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

Возможны проблемы и при изменении типов полей. Например, преобра­зование числового поля в символьное возможно всегда при условии доста­точного выделения места для образующихся символьных строк. Это преоб­разование осуществляется с помощью функции STR( ). Обратное чреобразование выполняется функциейVAL( ) и возможно только в тех слу­чаях, когда строка начинается с цифр или пробелов. В противном случае по лученное в результате преобразований числовое поле будет иметь нулевое значение.

Без проблем осуществляется преобразование даты в строку (функция DTOC( ) ) и обра гное преобразование (функция СTOD( ) ), при условии что символьная строка содержит допустимые символы.