Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornye_po_BD_1-6.doc
Скачиваний:
114
Добавлен:
07.03.2016
Размер:
33.23 Mб
Скачать

Modify database [ имяБазыДанных | ? ] [nowait] [noedit]

Эта команда может быть использована в программе или в командном окне.

Изменение наименования поля и / или его типа. Установить курсор на наименование поля или тип, которые требуются изменить. Для удаления в имени поля неправильно введенных символов следует использовать клавишу Backspace или Del. После этого необходимо ввести правильное имя поля.

Изменение типов полей таблицы, содержащей данные, может привести к потере информации.

Вставка и удаление поля. Если необходимо ввести поле в середине таблицы, нужно воспользоваться кнопкой Insert. Для вставки поля, с помощью клавиш-стрелок необходимо установить курсор на строку, перед которой требуется вставить пропущенное поле, и нажать кнопку Insert. Курсор при этом может находиться в любом столбце. Visual FoxPro вставит пустую строку и присвоит полю имя NewFld. После этого можно ввести требуемое имя поля и его тип. Для удаления поля нужно установить с помощью клавиш-стрелок курсор на поле и нажать кнопку Delete.

Изменение порядка следования полей. Для изменения порядка следования полей в таблице, необходимо воспользоваться кнопкой, расположенной слева от наименования поля. Для этого следует установить курсор на поле, местоположение которого требуется изменить. На кнопке появится пиктограмма. Необходимо установить курсор мыши на пиктограмму, нажать кнопку мыши и, удерживая ее в нажатом состоянии, перенести пиктограмму на нужное место.

Переопределение полей. Необходимо открыть конструктор таблиц, выделить нужное поле и увеличить его длину. Файл DBF при этом будет переписан, размер его увеличится, к символьным полям добавятся пробелы, а в числовых полях можно будет использовать больше знаков. Можно также увеличить длину индексных полей – Visual FoxPro автоматически перепишет индексные файлы при выходе из конструктора таблиц. Уменьшение размеров полей может вызвать потерю данных. Преобразование числового поля в символьное возможно всегда, если для получившейся строки отводятся достаточное число символов. Visual FoxPro просто переписывает таблицу, используя для нужного поля функцию STR(). Аналогично, преобразование символьных полей в числовые производится с помощью функции VAL() и возможно только в том случае, если строка начинается с цифры или пробелов, иначе получившееся числовое поле будут содержать нулевое значение.

Сортировка

Для изменения порядка следования записей в таблице используется команда SORT. Она использует текущую таблицу и создает новую, отсортированную по одному полю или комбинации полей. Например:

SORT TO Custsort ON cLastNane

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

Индексы

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

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

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

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

Для того чтобы создать индекс, необходимо выбрать таблицу, открыть для нее окно конструктора таблиц «Table Designer» и выбрать вкладку «Indexes» (рис. 12). Каждый индекс в Visual FoxPro имеет имя, на которое в дальнейшем можно ссылаться при упорядочении отображения данных в соответствии с данным индексом. Имя индекса содержится в поле Name. С левой стороны имени индекса располагается переключатель, определяющий порядок упорядочивания значений индексного выражения.

Кнопка

Назначение

Индекс, в котором значения упорядочены по возрастанию

Индекс, в котором значения упорядочены по убыванию

Рис. 12. Вкладка «Indexes» конструктора таблицы для создания индекса

СписокType используется для установки типа создаваемого индекса. Описание значений данного списка представлено в табл. 10.

Таблица 10.

Типы создаваемых индексов

Тип индекса

Описание

Regular

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

Unique

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

Candidate

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

Primary

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

Можно ввести имя индексного выражения непосредственно в поле вводаExpression или же выбрать кнопку, расположенную правее поля ввода, для формирования выражения используя окно диалога «Expression Builder» (Конструктор выражений), представленное на рис. 13.

Рис.13. окно диалога Expression Builder

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

STR (icdCustomer) + DTOC (dDoc)

Например, для таблицы Customer вы можете создать индекс, упорядочивающий данные по стране проживания и по коду клиента:

cCountry + STR(icdCustomer)

FoxPro имеет достаточное количество функций для работы с числами, статистикой и математикой например:

STR возвращает символьный эквивалент заданного числового выражения.

DTOCвозвращае дату в символьном виде исходя из вырожения типа Date или Date Time.

VALвозвращает числовое значение символьного выражения, состоящего из цифр.

INT – вычисляет значение числового выражения и возвращает его ц2елую часть.

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

Проверка синтаксиса выражения, осуществляется при нажатии кнопки Verify (Проверить).

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

В зависимости от способа хранения в Visual FoxPro различают одинарные и составные индексы. Каждый одинарный индекс хранится в отдельном файле. Все составные индексы хранятся в одном файле.

При просмотре содержимого таблицы в режиме BROWSE можно подключить любое из определенных индексных выражений. Для этого следует использовать пункт главного меню Table|Properties. Обратите внимание, что этот пункт появляется ТОЛЬКО в режиме просмотра содержимого таблицы. В появившемся окне свойств рабочей области можно задать параметры буферизации данных, условие фильтрации, а так же выбрать в ниспадающем списке подключаемое индексное выражение по его имени (рис. 14). После подтверждения выбора условие сортировки будет применено к данным в таблице.

Рис. 14 Окно определения свойств рабочей области

Одновременно может быть активным только одно условие сортировки, но допускается произвольное изменение условий в процессе работы с данными в таблице. Индексные выражения для таблиц пересчитываются в момент открытия самой таблицы. Поэтому все нововведенные данные могут быть не отсортированы. Для включения их в условие сортировки следует использовать пункт главного меню Table|Rebuild Indexes, либо переоткрыть таблицу.

Определение отношений между таблицами. В Visual FoxPro можно устанавливать постоянные отношения между таблицами, которые будут поддерживаться при создании форм, отчетов и запросов. При определении отношений одна из таблиц является родительской, а другая – дочерней. Для родительской таблицы должен быть определен первичный ключ или ключ – кандидат, а для дочерней – индекс для связи с родительской таблицей. Например, при задании отношений между таблицами Customer и Ordsale, для таблицы Customer определен первичный ключ, а таблица Ordsale содержит индекс, не являющийся уникальным, индексное выражение которого состоит из кода покупателя, по которому осуществляется связь между таблицами.

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

  1. Выбрать родительскую таблицу.

  2. Установить курсор мыши на первичный ключ таблицы.

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

  4. Отпустить кнопку мыши. В окне конструктора базы данных между таблицами появиться линия (рис.15), отображающая отношение между таблицами.

Рис.15 Отображение связей между таблицами

5. Для изменения отношения между таблицами нужно установить курсор мыши на линию, соединяющую таблицы, и дважды нажать курсор мыши. На экране откроется окно диалога «Edit Relationship» (рис. 16), в котором слева приведены наименование и раскрывающийся список индексов родительской таблицы, а справа аналогичная информация о дочерней таблицы. В этом же окне диалога приведен тип отношений между таблицами. Для сохранения отношения следует нажать кнопку ОК, а для отказа – кнопку Cancel.

Рис. 16 Окно диалогаEdit Relationship

Для удаления установленного отношения между таблицами нужно установить курсор на линию, соединяющую связываемые таблицы, и нажать правую кнопку мыши. Линия при этом увеличится в толщине и на экране появиться контекстное меню. Необходимо выбрать из этого меню команду Remove Relationship и описание отношения будет удалено из словаря базы данных.

Определение условий целостности данных

Установленные отношения между таблицами могут быть использованы для задания условий целостности данных. Целостность данных является одним из самых важных требований, предъявляемых к базам данных. В качестве примера нарушения целостности данных предположим, что в таблице заказов Ordsale из базы данных магазина оптовой торговли содержаться коды покупателей, которые отсутствуют в таблице Customer, содержащей список покупателей. В этом случае нельзя определить, кому был отпущен товар.

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

Для определения условия целостности данных в окне конструктора базы данных следует выбрать команду контекстного меню Referential Integrity или нажать соответствующую ей кнопку панели инструментов «Database Designer». В результате откроется окно конструктора условий целостности данных «Referential Integrity Builder» (рис. 17), которое содержит перечень всех установленных отношений между таблицами. Таблица описания условий содержит наименования родительской и дочерней таблиц, наименования индексов, используемых для связи, а также типы действий, выполняемых при модификации данных, добавлении и удалении записей.

Рис. 17. Окно диалога «Referential Integrity Builder» для определения условий целостности данных

В верхней части окна диалога отображаются три переключателя, предназначенные для установки типа выполняемого действия. Также можно выбрать тип действия из раскрывающегося списка непосредственно в полях Update, Delete и Insert.

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

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

Описание

Cascade

При изменении значений полей первичного ключа – кандидата в родительской таблице, автоматически осуществляется каскадное удаление всех соответствующих значений в дочерней таблицы. Например, если это правило применить к отношению между таблицами Customer и Ordsale, при изменении кода покупателя в таблице Customer автоматически будут изменены коды и в таблице Ordsale

Restrict

Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись. Данное правило можно применить к отношению между таблицами Customer и Ordsale, если в созданном приложении коды покупателя определяются на этапе ввода нового покупателя и в дальнейшем не редактируются

Ignore

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

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

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

Описание

Cascade

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

Restrict

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

Ignore

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

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

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

Описание

Restrict

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

Ignore

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]