- •1.Основні поняття. Бази даних, банк даних, інформаційна система. Традиційні файлові системи. Бази даних. Системи управління базами даних (субд). Компоненти банку даних.
- •2.Розподіл обов'язків в системах з базами даних. Історія розвитку субд. Класифікація банків даних. Переваги та недоліки субд.
- •3.Середовище бази даних. Трьохрівнева архітектура ansi-spark. Зовнішній рівень. Концептуальний рівень.
- •4.Внутрішній рівень. Мови баз даних. Моделі даних і концептуальне моделювання. Функції субд. Компоненти субд.
- •5.Етап концептуального проектування. Основні поняття концептуального проектування. Концептуальне проектування. Об'єкти і їх властивості. Взаємовідношення об'єктів.
- •6.Слабкі та складні сутності. Проведення етапу концептуального проектування субд.
- •8. Реляційна модель бази даних. Історія розвитку реляційної моделі. Структура реляційних даних. Відношення в базі та їх властивості. Типи даних.
- •9. Нормалізація відношень баз даних. Нормальні форми. Цілі нормалізації. Надлишковість даних і аномалії оновлення.
- •Шоста нормальна форма.Таблиця знаходиться у 6nf, якщо вона знаходиться у 5nf та задовольняє вимозі відсутності нетривіальних залежностей. Зазвичай 6nf ототожнюють з dknf.
- •10. Аномалії вставки. Аномалії вилучення.
- •11. Функціональні залежності. Процес нормалізації. Перша нормальна форма (1нф)
- •12. Друга нормальна форма (2нф).
- •14. Нормальна форма Бойса — Кодда
- •Null-значення
- •19 Мова sql. Формат sql-операторів. Маніпулювання даними
- •1. Формат sql-операторів
- •2. Маніпулювання даними
- •2.1. Вибірка всіх рядків
- •20. Вибірка всіх рядків. Вибірка рядків (речення where). Сортування результату (фраза order by).
- •2.2. Вибірка рядків (речення where)
- •2.3. Сортування результату (фраза order by)
- •21. Використання узагальнюючих функцій мови sql
- •22. Групування результатів (фраза Group), Обмеження на виконання групування (фраза having)
- •2.6. Обмеження на виконання групування (фраза having)
- •23. Підзапити
- •25. Особливості і синтаксис речень модифікації. Речення delete. Видалення одиничного запису. Видалення множини записів. Видалення з вкладеним підзапитом.
- •26 .Речення insert.
- •1. Вставка єдиною записи в таблицю
- •2. Вставка безлічі записів
- •1. Оновлення єдиною записи
- •2. Оновлення безлічі записів
- •3. Оновлення з підзапитом
- •28.Етап фізичного проектування. Основні структури зберігання та методи доступу до даних. Основні поняття. Невпорядковані послідовні файли.
- •29. Впорядковані послідовні файли. Хешовані файли. Індексно-послідовні файли.
- •31. Розподілені бази даних. Концепція розподілених баз даних. Розподілені транзакції. Реплікація даних. Розподілена оптимізація запитів.
- •32. Експертні системи та бази знань. Призначення експертних систем. Структура експертних систем. Представлення знань в експертних системах. Поняття експертної системи. Властивості знань.
Null-значення
Основне призначення баз даних полягає в тому, щоб зберігати і надавати інформацію про реальний світ. Для представлення цієї інформації в базі даних використовуються звичні для програмістів типи даних – Рядкові, чисельні, логічні і т.п. Однак у реальному світі часто зустрічається ситуація, коли дані невідомі або не повні. Наприклад, місце проживання або дата народження людини можуть бути невідомі (База даних розшукуваних злочинців). Якщо замість невідомої адреси доречно було б вводити порожній рядок, то що вводити замість невідомої дати? Відповідь – порожню дату – не цілком задовільний, тому що найпростіший запит "видати список людей у порядку зростання дат народження" дасть явно неправильних відповідь.
Для того щоб обійти проблему неповних або невідомих даних, в базах даних можуть використовуватися типи даних, поповнені так званим null-значенням. Null-значення – це, власне, не значення, а якийсь маркер, який показує, що значення невідоме.
Таким чином, у ситуації, коли можлива поява невідомих або неповних даних, розробник має на вибір два варіанти.
Перший варіант полягає в тому, щоб обмежитися використанням звичайних типів даних і не використовувати null-значення, а замість невідомих даних вводити або нульові значення, або значення спеціального виду – наприклад, домовитися, що рядок "Адреса невідома" і є ті дані, які потрібно вводити замість невідомої адреси. У будь-якому випадку на користувача (або на розробника) лягає відповідальність на правильне трактування таких даних. Зокрема, може знадобитися написання спеціального програмного коду, що у потрібних випадках "виловлював" би такі дані. Проблеми, що виникають при цьому очевидні – Не всі дані стають рівноправні, потрібен додатковий програмний код, "відслідковує" цю нерівноправність, в результаті чого ускладнюється розробка і супровід додатків.
Другий варіант полягає у використанні null-значень замість невідомих даних. За здавалося б природністю такого підходу ховаються менш очевидні і більш глибокі проблеми. Найбільш кидається в очі проблемою є необхідність використання тризначної логіки при оперуванні з даними, які можуть містити null-значення. У цьому випадку при неакуратному формулюванні запитів, навіть самі природні запити можуть давати неправильні відповіді. Є більш фундаментальні проблеми, пов'язані з теоретичним обгрунтуванням коректності введення null-значень, наприклад, незрозуміло взагалі, чи входять null-значення в домени чи ні.
Докладне обговорення проблем використання null-значень виходить за межі даної роботи. Можна тільки сказати про те, що це питання в теорії реляційних баз даних остаточно не вирішене. Основоположник реляційного підходу Кодд вважав null-значення невід'ємною частиною реляційної моделі. К. Дейт, один з найбільших теоретиків реляційної моделі виступає категорично проти null-значень (докладне обговорення проблем, що виникають при використанні null-значень наведено у книзі.
Практично всі реалізації сучасних реляційних СУБД дозволяють використовувати null-значення, незважаючи на їх недостатню теоретичну обгрунтованість. Таку ситуацію можна порівняти з ситуацією, що склалася на початку століття з теорією множин. Майже відразу після створення Кантором теорії множин, в ній були виявлені внутрішні суперечності (антиномії). Були розроблені більш суворі теорії, що дозволяють уникнути цих протиріч (конструктивна теорія множин). Однак у реальній роботі більшість математиків користується класичною теорією множин, тому що більш суворі теорії більш обмежені і негнучкий в застосуванні саме в силу своєї більшої строгості.
Думка автора (дуже скромне порівняно з думкою корифеїв реляційної теорії) полягає в тому, що бажано уникати null-значень. Тим не менш, приведемо тут опис тризначної логіки, необхідної для роботи з null-значеннями.
Тризначна логіка (3VL)
Оскільки null-значення позначає насправді той факт, що значення невідоме, то будь-які алгебраїчні операції (додавання, множення, конкатенація рядків і т.д.) повинні давати також невідоме значення, тобто null. Дійсно, якщо, наприклад, вага деталі невідома, то невідомо також, скільки важать 10 таких деталей.
При порівнянні виразів, що містять null-значення, результат також може бути невідомий, наприклад, значення істинності для виразу є null, якщо один або обидва аргументи є null. Таким чином, визначення істинності логічних виразів базується на тризначної логіці (three-valued logic , 3VL), В якій крім значень T – ІСТИНА і F – БРЕХНЯ, введено значення U – НЕВІДОМО. Логічне значення U – це те ж саме, що і null-значення. Тризначна логіка базується на наступних таблицях істинності:
AND |
F |
T |
U |
F |
F |
F |
F |
T |
F |
T |
U |
U |
F |
U |
U |
Таблиця 1 Таблиця істинності AND
OR |
F |
T |
U |
F |
F |
T |
U |
T |
T |
T |
T |
U |
U |
T |
U |
Таблиця 2 Таблиця істинності OR
NOT |
|
F |
T |
T |
F |
U |
U |
Таблиця 3 Таблиця істинності NOT
18.
Потенційний ключ для K для відношенняR — це підмножина множини атрибутів R, що характеризується такими двома властивостями:
Властивість унікальності.
Немає двох різних кортежіввR з однаковим значенням K.
Властивість мінімальності (ненадмірності).
Ніяка з підмножин K не володіє властивістю унікальності.
Правильно, що кожне відношення має, щонайменше, один потенційний ключ через те, що не містить двох однакових кортежів; тобто комбінація всіх атрибутів володіє властивістю унікальності і тому можливі два варіанти.
Або ця комбінація володіє властивістю мінімальності, тобто є потенційним ключем (єдиним).
Або існує як мінімум одна підмножина цієї комбінації, що явно володіє властивістю унікальності, а також мінімальності.
У відношенні може бути декілька потенційних ключів. Один з них може бути вибраний в якості первинного ключавідношення, тоді інші називають альтернативними ключами.
Зазвичай на практиці первинний ключ обирають виходячи з міркувань ефективності.
Потенційні ключі забезпечують основний механізм адресації на рівні кортежів. Тобто, єдиний гарантований спосіб точно вказати який-небудь кортеж — це вказати значення якогось потенційного ключа. В інструкції SQLце, зазвичай, робиться в частиніWHERE.
Таким чином потенційні ключі мають таке саме фундаментальне значення для успішної роботи реляційної системи, як адресація основної пам'яті для успішної роботи машини, на якій ця система встановлена.
Зовнішній ключ — атрибут (набір атрибутів) в деякому відношенніR, який відповідаєпервинному ключуіншого відношення або того ж таки відношення R.
В реляційних базах даних зовнішній ключ задається обмеженням FOREIGN KEY. Наприклад[1],
CREATE TABLE fools (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name CHAR(20),
folly_id INTEGER,
FOREIGN KEY(folly_id)
REFERENCES follies(id) ON DELETE CASCADE);