Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lr3.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.84 Mб
Скачать

Визначення ключів таблиці

Функції первинного, потенційного, вторинного та зовнішнього ключів таблиці у FoxPro реалізуються за допомогою індексів.

Під індексацією розуміють один із способів впорядкування даних. Значення індексів зберігаються в індексному файлі, у якому для кожного запису існує унікальна зсилка, яка вказує на місцезнаходження запису відповідно до заданного порядку перегляду даних. При активному індексному файлі такі команди, як go top, go <n>, go bottom, skip, brrowse, edit, list та ін. працюють з таблицею “через індексний файл”. Так наприклад go top встановлює вказівник запису не на перший зипис таблиці, а на перший запис індекса. Це також забезпечує швидкий пошуку потрібної інформації на підставі упорядкованих значень індексу, а не послідовний перегляд усієї таблиці, що природно, прискорює пошук.

Індекси в Visual FoxPro призначаються також для створення первинних ключів, які використовуються при визначенні зв’язків між таблицями і умов цілісності даних. У цьому випадку індекси повинні бути унікальними, тобто якщо для створення унікального індексу використовується простий індекс, значення полів не повинні повторюватися. Коли для створення унікального індексу використовується складений індекс, значення в кожному з полів, що входять в індекс, можуть повторюватися, проте, індексний вираз повинен бути унікальним.

Одна таблиця може бути проіндексована по декільком полям і мати любу кількість індексов (індексних файлів). При створенні таблиці візуальним способом можнна створити стрктурний мультиіндексний файл, ім’я якого співпадає з іменем таблиці. Структурний мультиіндексний файл автоматично відкривається при відкрванні таблиці, автоматично закривається разом з таблицею та автоматично поновлюється при редегуванні даних у таблиці. Кожен окремий індекс у ньому називається TAG (етикетка). Кожен тег має свою назву.

Для створення структурного індексного файлу таблиці використовується опція Index на вкладці Table та вкладка Indexes (Індекси) вікна конструктора таблиць Table Designer.

В опції Index на вкладці Table можна створити тег по одному полю таблиці (див. рис.6), вказавши за допомогою стрілочки якмй тип впорядкування даних потрібно використати (↑ – у зростаючому чи ↓ - у спадаючому подрядку). Встановити стрілочки можна за допомогою клавіші <Spacebar> або за допомогою мишки.

На вкладці Indexes (рис.8) можна вказати імена тегів, їх типи, напрямок впорядкування даних та індексні ключі (вирази по яким проводиться індексація).

Всі теги мають імена, які задаються в полі Name на вкладці Indexes. Ліворуч від імені індексу в стовпчику Order (упорядкування) розміщено перемикач, який визначає, як будуть упорядковані значення індексного виразу – за зростанням чи за спаданням. Для зміни способу упорядкування можна використовувати клавішу <Spacebar> чи мишку.

Вираз по якому проводиться індексація вводиться в поле Expression (вираз). Можна ввести індексний вираз безпосередньо в поле Expression чи сформувати цей вираз у діалоговому вікні конструктора виразів Expression Builder. Для того, щоб відкрити вікно конструктора виразів натисніть кнопку , розташовану праворуч від поля Expression.

Рис. 8

При використанні в індексному виразі полів різних типів потрібно за допомогою функцій перетворення типів привести всі значення до одного типу даних. Найчастіше це символьний тип даних. Під час створення складених індексних виразів необхідно слідкувати за правильним використанням типів даних. Так, наприклад, проаналізувавши достовірність злиття даних “Прізвище”+“Ім’я” (символьні дані), Код_факультету+Курс (числові дані), dtoc(Дата_народження)+“Прізвище” (тип Дата перетворюється у символьний тип) або str(Код_факультету)+“Прізвище” (числовий тип Коду_факультету перетворюється у символьний тип) можна відзначити, що достовірні дані ми отримаємо тільки у першому випадку. Зверніть увагу на те, що Код_факультету+Курс дають однакові результати виразу у таких випадках: 15+2, 14+3, 3+14, ... А dtoc(Дата_народження) для типу Дата та символьного типу має різний результат при впорядкуванні даних (порівняйте порядок розміщення значень 12.01.2003 та 01.12.2003 з урахуванням перетворення типів даних).

До індексу можуть входити не всі записи таблиці, а тільки ті, які задовольняють вказану умову. Умова включення даних до індексу вказується у полі Filter.

Список Type (тип) використовується для завдання типу створюваного індексу і містить наступні значення:

Primary (Первинний)

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

У Free-таблиці такий індекс створити неможна.

Primary використовується також для встановлення зв'язків між таблицями та визначення умов цілісності даних.

Candidate (Кандидатний)

Створюється унікальний індекс, який також не дозволяє повторів даних у таблиці і не містить полів з порожніми значеннями (може дозволити тільки одне NULL-значеня). Цей індекс має всі якості первинного ключа і не є первинним тільки з тієї причини, що таблиця не може містити більш одного первинного ключа.

Тегів цього типу може бути декілька. Такий тег можна завжди перетворити у первинний.

Unique (Унікальний)

Сам індекс не містить повторів але дозволяє повтори даних у таблиці. Він забезпечує вивід тільки першого запису із множини однакових значень.

Таблиця може мати декілька унікальних індексів

Regular (Регулярний, звичайний)

Допускає повтори значень як у індексі так і у таблиці, немає ніяких обмежень на дані. Використовується для впорядкування дданих та швидкого пошуку даних.

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

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