КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Индексирование таблиц
Каждая таблица СУБД Paradox может иметь один первичный индекс (Primary Key), его называют также ключом. Первичный индекс может состоять из одного первого поля или нескольких подряд идущих полей, начиная с первого. Для формирования первичного индекса необходимо при создании таблицы в Database Desktop для соответствующих полей в столбце Key поставить знак «*» (например, с помощью клавиши «пробел»). Первичный индекс выполняет несколько функций. 1) Первичный индекс задает сортировку записей таблицы: порядок следования записей в таблице определяется по значениям первого ключевого поля, для записей с одинаковыми значениями первого ключевого поля – по значениям второго ключевого поля и т.д. Рассмотрим, например, таблицу со следующей структурой
В такой таблице записи по всем студентам будут упорядочены по возрастанию номера курса, затем по алфавиту, в соответствии с фамилией студента. Для каждого студента последовательно будут располагаться записи по увеличению дат сессий, а для одной и той же сессии - по алфавиту, в соответствии с наименованием дисциплины. 2) Первичный индекс позволяет эффективно, используя специальные алгоритмы поиска в отсортированных наборах данных, осуществлять поиск записей в таблице по значениям ключевых полей (см. Поиск, функции FindKey, Locate). 3) Первичный индекс позволяет при необходимости поддерживать целостность и однозначность данных таблицы БД: ключевые поля двух записей таблицы не могут содержать одинаковые значения! В данной таблице может храниться для каждого студента для каждой сессии только одна оценка по каждой дисциплине. При попытке внести в таблицу еще оценку будет выведено сообщение Key violation (нарушение уникальности ключа). В этом случае необходимо либо отменить изменения, либо изменить вводимые данные. Принимать решение о ключевых полях должен программист, основываясь на функциях разрабатываемой им системы. Если, например, необходимо в данной таблице хранить информацию обо всех «попытках» студента сдать экзамены, то ключевым должно быть и поле Date_Exam. 4) Первичный индекс позволяет поддерживать связь один-ко-многим между таблицами. Эта связь позволяет эффективно работать одновременно с двумя связанными содержательно таблицами (см. Мультиформы). Наличие ключевых полей позволяет однозначно определять запись главной таблицы (master table), с которой могут быть связано несколько записей подчиненной таблицы (detailed table). Первичный индекс в СУБД Paradox представляется файлом с именем <имя таблицы>. px.
Каждая таблица СУБД Paradox может иметь несколько вторичныхиндексов.Вторичный индексможет также состоять из одного или нескольких полей (вне зависимости от порядка полей в таблице БД). Вторичный индекс выполняет функции сортировки, повышения скорости поиска записей по указанным значениям полей, может поддерживать уникальность записей с индексными полями. Вторичные индексы создаются в Database Desktop. Для создания вторичного индекса необходимо в режиме создания или переструктурирования таблицы: · выбрать в окне Table properties (свойства таблицы) значение Secondary Indexes (вторичные индексы); · нажать кнопку Define (определить); · выбрать в появившемся окне (рис. 6.1) поля таблицы БД, участвующие в формировании индекса, и определить их порядок; · задать при необходимости опции Unique (уникальность значений полей индекса), Maintained (автоматическое перестраивание индекса), Case sensitive (учет регистра), Descending (убывающий порядок сортировки); Рис. 6.1 · ввести имя индекса; · сохранить таблицу.
Во время работы приложения можно программно изменять текущий вторичный индекс с помощью метода IndexName компонента Table: <имя таблицы>.IndexName:=<строка, содержащая имя индекса>. Например, Table1.IndexName:='Ind_Mark' (в предположении, что для таблицы БД, связанной с компонентом Table1, существует вторичный индекс с именем Ind_Mark). Отменить программно установленный вторичный индекс можно с помощью оператора <имя таблицы>.IndexName:= ''. Если вторичный индекс не установлен, для сортировки и поиска используется первичный индекс.
|