1.Легка
Що робить ROLLBACK у транзакції?
- AНазавжди зберігає всі зміни транзакції на диску
- BВидаляє таблицю
- CПовторює останню інструкцію
- DСкасовує зміни, зроблені від початку транзакції
2.Легка
INNER JOIN повертає:
- AУсі рядки з лівої таблиці, з NULL там, де збігу немає
- BУсі рядки з обох таблиць
- CЛише рядки зі збіжними значеннями в обох таблицях
- DРядки, що не збігаються
3.Легка
Що таке сурогатний ключ (surrogate key)?
- AШтучний ідентифікатор без бізнес-значення, як-от автоінкрементний id
- BКлюч, що посилається на іншу таблицю
- CКлюч, утворений з реальних даних, як-от адреса електронної пошти
- DКлюч, що використовується лише в представленнях
4.Середня
Студенти можуть відвідувати багато курсів, а курси мають багато студентів. Як це моделюють у таблицях?
- AСтовпцем зовнішнього ключа course_id у таблиці студентів, що вказує на курси
- BСписком id курсів, що зберігається в одному стовпці
- CПроміжною (зв’язувальною) таблицею із зовнішніми ключами і до студентів, і до курсів
- DОб’єднанням студентів і курсів в одну таблицю
5.Середня
Зовнішній ключ оголошено з ON DELETE CASCADE. Що відбувається, коли видаляють батьківський рядок?
- AЗовнішній ключ у дочірніх рядках автоматично встановлюється в NULL
- BВидалення завжди відхиляється
- CБатьківський рядок копіюється в архівну таблицю
- DДочірні рядки, що на нього посилаються, видаляються автоматично
6.Середня
Чому SELECT price * 2 AS double_price FROM t WHERE double_price > 10 не виконується в більшості баз даних?
- AПсевдоніми не можуть містити підкреслення
- BWHERE може порівнювати лише текстові стовпці
- CWHERE обчислюється перед списком SELECT, тож псевдоніма ще не існує
- DАрифметика не дозволена у списку SELECT
7.Складна
Чому після customers LEFT JOIN orders для підрахунку замовлень кожного клієнта використовують COUNT(o.id), а не COUNT(*)?
- ACOUNT(o.id) рахує лише різних клієнтів
- BCOUNT(*) ігнорує рядки зі значеннями NULL
- CCOUNT(*) не дозволено після з’єднання
- DCOUNT(*) рахує рядок, заповнений NULL, як 1 для клієнтів без замовлень
8.Складна
Як за багатоверсійного керування паралельністю (MVCC) читачі можуть не блокувати записувачів?
- AЧитачі бачать узгоджений знімок зафіксованих версій рядків, а записувачі створюють нові версії
- BЗапис заборонено, поки активний хоч один читач
- CЧитачі завжди чекають, доки всі записувачі зафіксують зміни
- DЧитачі безпосередньо читають незафіксовані дані
Ключ відповідей
- 1. D · Скасовує зміни, зроблені від початку транзакції
- 2. C · Лише рядки зі збіжними значеннями в обох таблицях
- 3. A · Штучний ідентифікатор без бізнес-значення, як-от автоінкрементний id
- 4. C · Проміжною (зв’язувальною) таблицею із зовнішніми ключами і до студентів, і до курсів
- 5. D · Дочірні рядки, що на нього посилаються, видаляються автоматично
- 6. C · WHERE обчислюється перед списком SELECT, тож псевдоніма ще не існує
- 7. D · COUNT(*) рахує рядок, заповнений NULL, як 1 для клієнтів без замовлень
- 8. A · Читачі бачать узгоджений знімок зафіксованих версій рядків, а записувачі створюють нові версії
Повні покрокові розв’язки: тренуйте цю тему на examproblems.com.