- •Базы данных
- •1. Введение в базы данных
- •1.1. Базы данных и информационные системы
- •1.2. Архигсюура информационной системы
- •1.3. Системы управления базами данных
- •1.4. Локальные информационные системы
- •1.5. Способы разработки и выполнения приложений
- •1.6. Схема обмена данными при работе с бд
- •2. Модели и типы данных
- •2.1. Иерархическая модель
- •Сотоудники
- •2.2. Сетевая модель
- •2.3. Реляционная модель
- •2.4. Постреляционная модель
- •2.5. Многомерная модель
- •1996 1994 Петров Смирнов Яковлев
- •2.6. Объектно-ориентированная модель
- •2.7. Типы данных
- •3. Реляционная модель данных
- •3.1. Определение реляционной модели
- •3.2. Индексирование
- •3.3. Связывание таблиц
- •3.4. Контроль целостности связей
- •3.5. Теоретические языки запросов
- •I аспределенное Удаленное Распределен- Удаленн! 1йдо- Распределен- предстаеление представление ная функция ступ к данным наяЬд
- •4.5. Информационные системы в Интернете и интранете
- •Часть 2. I Ъоектиросанн ? и использование бд
- •7. Средства автоматизации проектирования
- •7.1. Основные определения
- •7.8. Рекомендации по применению case-систем
- •9. Дополнительные вопросы применения баз данных
- •9.1. Программно-аппаратные платформы
- •9.2. Перспективы развития субд
- •9.3. Стандартизация баз данных
- •9.4. Характеристика технологии ado.Net
- •10.1. Общая характеристика
- •10.2. Новые возможности Microsoft Access 2002
- •10.3.Средства поддержки проектирования
- •10.4. Создание основных элементов бд
- •IQdbl mdb
- •Option Compare Database Public Function funl() beep End Function
- •10.5. Работа с гиперссылками
- •10.6. Использование языка sql
- •Аргументы макрокоманды ' Инструкция sQl. Select distinctrow tof
- •10.7. Защита баз данных
- •10.9. Обслуживание баз данный
- •10.10. Репликация баз данных
- •Реплицируемые объекты
- •Реплицируемые объекты
- •10.11. Работа с мультимедиа-данными
- •Тип объекта
- •Comic Chat Boom Microsoft Graph so Music Prop pry Page 2 1 Option f ropery Page21 Ры-ndox FableВидео-клип
- •10.12. Создание файлов приложений
- •10.13. Страницы доступа к данным
- •Краткая характеристика отличий сДд от форм и отчетом
- •10.14. Разработка проекта
- •Распределение атрибутов по вариантам
- •11.1. Пользовательский интерфейс
- •11.2. Характеристика проекта
- •11.3. Компиляция и выполнение проекта
- •11.4. Разработка приложения
- •11.5. Средства интегрированной среды разработки
- •Управление параметрами среды
- •11.6. Базы данных и средства работы с ними
- •Компоненты приложений для баз данных
- •11.7. Создание таблиц базы данных
- •11.8. Создание приложения bde
- •Значения свойств компонентов
- •11.9. Работа с отчетами
- •12. Субд Visual FoxPro 8.0
- •12.1. Общая характеристика
- •12.2. Новые возможности Visual FoxPro 8.0
- •12.3. Элементы проекта
- •12.4. Интерфейс Visual FoxPro
- •12.5. Средства автоматизации разработки
- •12.6. Создание баз данных
- •12.7. Таблицы и индексы
- •12.8. Организация межтабличных связей
- •12.9. Обеспечение ссылочной целостности
- •12.10. Создание запросов
- •Variables:
- •13. Microsoft sql Server 2000
- •13.1. Характеристика sql Server
- •13.2. Язык запросов Transact-sql
- •13.3. Системные базы данных и таблицы
- •13.4. Создание баз данных
- •13.5. Работа с таблицами
- •15.1. Принципы функционирования Web-приложений
- •15.2. Архитектура Web-приложений, публикующих бд
- •15.3. Обзор Web-серверов
- •15.4. Использование Personal Web-server
- •15.5. Использование Microsoft Internet Information Server
- •15.6. Использование Apache дляMicrosoft Windows 9х/2000
- •Вы видите это вместо ожидаемой страницы?
- •15.7. Варианты создания Web-узла
- •16. Интерфейсы программирования Web-приложений
- •16.1. Общий интерфейс взаимодействия cgi
- •18. Публикация бд средствами Microsoft Access
- •18.1. Характеристика вариантов публикации
12.7. Таблицы и индексы
В Visual FoxPro можно создаватьтаблицы, входящие в БД, и отдельные таблицы. Рассмотрим создание таблиц, являющихся компонентами БД.
Создание таблиц
При создании таблицы ей присваивается имя. от ражающее существо хранимой информации. При присвоении имен таблицам необходимо придерживаться следующих правил:
каждая таблица в БД должна иметь уникальное имя:
имя таблицы является именем одноименного фай. ia, возможное число символов в имени определяется операционной системой;
имя таблицы может содержать б\квы, цифры и знаки подчеркивания.
Для создания входящей в БД таблицы требуется выполнить команду
Database | New Table (база данных | новая таблица).Далее в диалоговом окне New Table (новая таблица)следует вызвать Конструктор таблиц (кнопкаNew Table — новая таблица) или Мастер таблиц(Table Wizard).
Пример 1.Рассмотрим создание для нашей БД таблицы Т_ZAGR(Fio, t^redm. Gruppa, VidZan) с помощью Конструктора таблиц.
Перейдем в Конструктор таблиц, нэ кав в окне диалога New Table (новая таблица)кнопку New Table (новая таблица).Определим имя создаваемой таблицы в окне Create (создать).В результате откроется диалоговое окно Конструктора таблиц Table Dezigner (рис. 12.3), позволяющее сформировать таблицу.
Выберем вкладку Fields (поля)(рис. 12.3),введем имя первого поля Fio. Для зтдания типа поля перейдем в следующий столбец с помощью мыши или к ивишиTab. Тип поля в нем выбираетет из раскрывающегося списка.
В следующем столбце установим размер поля. Для поля Fio это 15 символов.
Установим заголовок поля. Для этого перейдем в поле 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: [лекчмя
Map field type to classes
Display library: |
I
comrnenl
H
A
15
Чак 474
5 Для задания сортировки данных в таблице по полю F ю надо перейти в столбецIndex (индекс) и из раскрывающегося списка выОратьAscending (возрастающий), если требуется сортировка в порядке возрас гания данных, иDescending (убывающий) — по убыванию. Эта сортировка достигается использованием индексирования о котором поговорим позже.
Аналогично определим остальные поля таблицы. При необходимости изменения порядка следования полей таблицы воспользуемся крайней лево» кнопкой вкладки диалогового окна
Полю 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
Вполе Name (имя)задаем имя тега — имя индекса. Слева от имени индекса располагается переключатель, задающий направление упорядочения значений индексного выражения (по возрастанию или убыванию значений тега).
Вполе Туре (тип)выберем из списка подходящий тип для устанавливаемого тега (габл. 12.4).
Таблица12.4
Типы индексов (тегов)
Тип тега |
Описание |
Regular |
Значение индексного выражения записывается для каждой записи таблицы. При наличии одного и того же значения для нескольких записей в индексном файле будет указатель на каждую из них. При просмотре таблицы такие записи появляются в порядке их ввода. |
Unique |
Значение индексного выражения записывается только для первой из повторяющихся записей и только на нее в индексном файле есть указатель. При просмотре таблицы видна только одна (первая) из записей с одинаковым значением индексного выражения. |
Candidate |
Создается уникальный индекс, не содержащий полей с пустыми значениями. Он является кандидатом на роль первичного ключа, но не является таковым, так как в таблице может быть только один первичный ключ. |
Primary |
Один из индексов, удовлетворяющий требованиям индекса типа Candidate может быть выбран в качестве первичного (Primary) ключа. Используется для связывания таблиц и определения условий целостности данных |
Поле Expression (выражение)позволяет ввести индексное выражение. В простейшем случае индексное выражение может состоять из имени одного поля. В более сложных случаях — это совокупность имен полей или выражение, включающее имена полей, переменные и функции как стандартные, так и пользовательские. Для формирования индексного выражения можно привлечь Конструктор выражений, вызываем! ш нажатием кнопки справа от поля ввода.
Поле Filter (фильтр)позволяет определить для индекса фильтр, служащий для ограничения формируемых значений индекса. Результат выражения, используемого в фильтре должен иметь логический тип.
Пример.Создание индекса, являющегося первичным ключом таблицы.
Рассмотрим формирование первичного ключа для таблицы T_Z AGR. Первичный ключ здесь является составным и представляет собой выражениеFio+ Predrn-' STR( Gruppa). В подобных выражениях все компоненты должны быть
одного типа. Поэтому следует использовать стандартную функцию STR(), преобразующую числовые значения в символьные. Для создания индекса выполним следующие действия.
Откроем окно Конструктора таблиц для таблицы TZAGR. Для этого в окне Конструктора БД установим курсор на таблицу, щелчком правой кнопкой мыши вызовем всплывающее меню и выполним команду Мо<fy (модифицировать).
В диалоговом окне Конструктора таблиц выберем вкладку Indexes (индексы).
В поле Name (имя) открывшегося диалогового окна введем имя индексаizagr.
В списке возможных типов индекса в поле Гуре (тип) выберем Primary.
В поле Expression (выражение) введем выражение для индексаi zagr.
Установим переключатель Order (порядок) в положение по возрастанию (рис. 12.3).
Нажмем ОК.
Аналогично можно проиндексировать остальные таблицы БД 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( ) ), при условии что символьная строка содержит допустимые символы.