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

8. Індекси. Зовнішній ключ Теоретичні відомості

Будь-які стовпці в таблицях можуть бути індексовані, створення індексів є одним із способів пришвидшити виконання SQL-запитів. Індекси використовують для того, щоб:

  • Швидко знайти рядки, що відповідають виразу WHERE.

  • Витягнути рядки з інших таблиць при виконанні об’єднань ( оператор JOIN).

  • Знайти величини МАХ() або MIN() Для заданого індексованого стовпця.

  • Виконувати сортування або групування в таблиці, якщо ці операції робляться на крайньому ліворуч префіксі ключа, що використовується.

Коли всі значення одного поля таблиці представлені в полі іншої таблиці, кажуть, що перше поле посилається на друге. Це вказує на прямий зв’язок між значеннями двох полів. Наприклад, кожен із сту­дентів в таблиці Studentsмає поле faculty_ID,яке вказує на факультет, описаний в таблиці Faculty.

Коли одне поле в таблиці посилається на інше, воно називається зовнішнім ключем; а поле, на яке воно посилається, називається бать­ківським ключем. Таким чином поле faculty_idз таблиці students— це зовнішній ключ, а поле id на яке воно посилається в таблиці Faculty— це батьківський ключ.

Імена зовнішнього ключа і батьківського ключа часто бувають однаковими (у нашому прикладі це не так), так роблять, щоб підкреслити зв’язок між таблицями і зробити його більш наглядним.

Обмеження (зовнішні ключі, “foreign key”) підтримують таблиці InnoDB. Синтаксис визначення зовнішнього ключа такий:

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name,

...)

REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

Для визначення зовнішніх ключів повинні виконуватися такі

умови:

  • Обидві таблиці повинні мати тип InnoDB, жодна з таблиць не повинна бути тимчасовою.

  • У батьківській таблиці повинен бути індекс по батьківському ключу. Індекс по відповідному полю в дочірній таблиці створю­ється автоматично при визначенні обмеження.

  • Зовнішні ключі по полях BLOB і TEXT не підтримуються.

  • Якщо вказано [CONSTRAINT symbol] (ім’я обмеження) то воно по­винне бути унікальним в даній БД, якщо ні, то ім’я буде згенероване автоматично.

Практичні завдання

  1. Віднести останню додану спеціальність до останнього доданого факультету.

Так як ми вказуємо точний шлях до таблиць, то SQL-запит можна виконувати будь-звідки. Використовуємо UPDATE.

UPDATE `univer`.`speciality` SET `faculty_id` = '6' WHERE `speciality`.`id` =8 AND `speciality`.`name` = 'Конструкція літаків' LIMIT 1;

  1. Додати індекс до поля faculty_id.

Щоб додати індекс до поля faculty_id, використовуємо ALTER TABLE

ALTER TABLE `speciality` ADD INDEX (`faculty_id`);

  1. Створити зовнішній ключ по полю faculty_id таблиці speciality.

Заходимо в БД univer, далі переходимо до пункту меню SQL та вписуємо:

ALTER TABLE `speciality` ADD FOREIGN KEY ( `faculty_id` ) REFERENCES `univer`.`students` (`faculty_id`

) ON DELETE RESTRICT ON UPDATE RESTRICT ;

  1. Знищити щойно створений зовнішній ключ.

В тому ж самому полі, одразу знищуємо ключ

ALTER TABLE `speciality` DROP FOREIGN KEY `speciality_ibfk_1`;

  1. Знову створити зовнішній ключ з використанням інструментів phpmyadmin. Для цього потрібно виконати наступні дії:

1) Вибрати перегляд залежностей.

2)Вибрати налаштування, як показано на зразку нижче, натиснути зберегти.

Виконати наступні дії вручну

  1. Додати в таблицю speciality нову спеціальність з faculty_id відмінним від id факультетів із таблиці faculty. Зробити висновок про отриману помилку.

Так як вказуємо точний шлях до таблиць, SQL записуємо будь звідки:

insert into `univer`.`speciality` (`name`,`faculty_id`) values ('Конструкція літаків', '6');