
- •Вступ до баз даних. Загальна характеристика основних понять
- •1.1. Розвиток основних понять представлення даних
- •Лекція 6
- •Друга стадія концептуального проектування бд. (Моделі даних субд. Представлення концептуальної моделі засобами моделі даних субд)
- •6.1. Представлення концептуальній моделі засобами моделі даних субд
- •6.2 Типові моделі даних субд і представлення концептуальної моделі
- •6.2.1. Мережева модель даних
- •6.2.2. Ієрархічна модель даних
- •6.2.3. Реляційна модель даних
- •6.2.4. Багатовимірна модель даних
- •6.3. Засоби автоматизованого проектування концептуальної моделі
- •Лекція 6
- •Друга стадія концептуального проектування бд. (Моделі даних субд. Представлення концептуальної моделі засобами моделі даних субд)
- •6.1. Представлення концептуальній моделі засобами моделі даних субд
- •6.2 Типові моделі даних субд і представлення концептуальної моделі
- •6.2.1. Мережева модель даних
- •6.2.2. Ієрархічна модель даних
- •6.2.3. Реляційна модель даних
- •6.2.4. Багатовимірна модель даних
- •6.3. Засоби автоматизованого проектування концептуальної моделі
- •Лекція 7
- •Формалізація реляційної моделі
- •7.1. Формалізований опис відношень і схеми відношень
- •7.2. Маніпулювання даними в реляційній моделі
- •7.3. Операції реляційної алгебри
- •Лекція 8
- •Використання формального апарату для оптимізації схем відношень
- •8.1. Проблема вибору раціональних схем відношень
- •8.2. Функціональні залежності (залежності між атрибутами відношення)
- •8.3. Декомпозиція схеми відношення
- •8.4 .Вибір раціонального набору схем відношень шляхом нормалізації
- •8.5. Приклад нормалізації до 3нф
- •8.6. Цілісна частина реляційної моделі. Реалізація умови цілісності даних в сучасних субд
- •Лекція 9
- •Фізичні моделі даних (внутрішній рівень)
- •9.1. Структура пам'яті еом
- •9.2. Представлення екземпляра логічного запису
- •9.3. Організація обміну між оперативною і зовнішньою пам'яттю
- •9.4. Структури зберігання даних у зовнішній пам'яті еом
- •9.4.1. Послідовне розміщення фізичних записів
- •Пошук запису із заданим значенням ключа
- •9.4.2. Розміщення фізичних записів у вигляді спискової структури
- •Пошук запису із заданим значенням ключа
- •9.4.3. Використання індексів (індексування)
- •Пошук і читання запису із заданим значенням ключа
- •Модифікація (коректування) запису
- •Видалення запису
- •Додавання запису
- •9.4.5. Розміщення записів з використанням хешування
- •Пошук запису із заданим значенням ключа і читання
- •Модифікації запису
- •Видалення запису
- •Додавання запису
- •9.4.6. Комбіновані структури зберігання
- •Лекція 10
- •Структура сучасної субд на прикладі Microsoft sql Server 2008
- •10.1 Загальна структура субд
- •10.2. Архітектура бази даних. Логічний рівень
- •Тип даних hierarchyid
- •Просторові типи даних
- •Індекси
- •Представлення
- •Складки
- •Обмеження
- •Правила
- •Значення за замовчуванням
- •10.3. Архітектура бази даних. Фізичний рівень
- •Файли і файлові групи
- •Сторінки і екстенти
- •Сторінки файлів даних
- •Організація таблиць та індексів
- •Управління роботою з екстентами і вільним місцем
- •Відстежування вільного місця
- •Лекція 11
- •Програмне забезпечення роботи з сучасними базами даних
- •11.1. Основні завдання програмного забезпечення баз даних
- •11.2. Проблеми створення і ведення реляційних баз даних
- •11.3. Поняття мови sql і його основні частини
- •11.3.1. Історія виникнення і стандарти мови sql
- •11.3.2. Переваги мови sql
- •11.3.2. Загальна характеристика sql
- •Термінологія
- •Різновиди sql
- •Лекція 12
- •Основні оператори мови sql. Інтерактивний sql
- •12.1. Загальне уявлення про основні оператори мови sql
- •12.2 Інтерактивний режим роботи з sql (інтерактивна sql)
- •12.3. Використання мови sql для вибору інформації з таблиці
- •12.4. Використання sql для вибору інформації з декількох таблиць
- •12.5. Використання sql для вставки, редагування і видалення даних у таблицях
- •Лекція 13
- •Використання мови sql у прикладних програмах
- •13.1. Програмний (вбудований) sql
- •13.2. Статичний sql
- •13.3. Динамічний sql
- •13.4. Інтерфейси програмування додатків (api). Db‑Library, odbc, oci, jdbc
- •Протокол odbc
- •Протокол jdbc
- •Бібліотека db-Library
- •Лекція 14
- •Напрями розвитку баз даних
- •14.1. Об'єктно-орієнтований підхід до організації баз даних
- •Об'єктно-орієнтоване програмування
- •Об'єктно-орієнтовані бази даних
- •Об'єктно-реляційні субд
- •14.2. Розподілені бази даних
- •14.3. Сховища даних
- •Основи криптології
Вступ до баз даних. Загальна характеристика основних понять
Лекція присвячена розгляду розвитку основних понять обробки даних, пов'язаного з постійним розширенням класів вирішуваних на ЕОМ завдань. Показується необхідність інтеграції даних при вирішенні декількома користувачами завдань, що використовують загальні дані. Вводиться поняття бази даних.
Мета лекції: показати, що із зміною вигляду вирішуваних на ЕОМ завдань в програмуванні виникає новий вигляд представлення даних, у тому числі такий вигляд, як бази дані.
1.1. Розвиток основних понять представлення даних
Будь-який обчислювальний процес є відображенням (по певному алгоритму) деяких вхідних даних у вихідні.
Співвідношення складності представлення оброблюваних даних і алгоритму обчислень визначає два класи завдань:
обчислювальні завдання – досить просте представлення даних і складний, багатоопераційний процес обчислень;
завдання обробки даних (необчислювальні завдання) – простий алгоритм обробки даних і складне представлення оброблюваних даних.
На початковій стадії навчання програмуванню основна увага приділяється розробці алгоритму рішення задачі. Проте часто виявляється, що можливість (або неможливість) рішення конкретної задачі залежить не лише від вибраного алгоритму, але і від того, які поняття використовуються для представлення оброблюваних даних.
Розглянемо простий приклад обчислення за формулою:
Y=X2+5X
де X і Y – певні числа, які є тут елементарними одиницями даних (елементами даних).
При програмуванні алгоритму рішення цієї задачі (програмування формули) використовується простий вигляд даних – проста змінна (X і Y представляються в програмі простими змінними). Відмітимо, що проста змінна в системах програмування характеризується певним типом її значень, які повинні вибиратися при програмуванні. Навіть у цьому простому випадку необхідно правильно вибрати типа змінної, причому від цього вибору може залежати можливість або неможливість рішення конкретної прикладної задачі (наприклад, для представлення конкретних даних не вистачить відведених розрядів).
Розглянемо інший приклад:
S=a1+a2+...+aN.
Рішення цієї задачі в загальному випадку неможливо отримати використовуючи лише прості змінні. Тут обробляється не окреме число, а послідовність чисел. В цьому випадку при програмуванні використовується такий вигляд даних, як масив – сукупність елементів, з кожним з яких пов'язаний впорядкований набір цілих чисел, названих індексами. Всі елементи повинні мати однакового типа їх значень, який і буде типом масиву. В цьому випадку числа a1, a2..., aN представляються в програмі масивом A(1), A(2)..., A(N).
Наведені приклади показують, що зміна вигляду завдань обумовлює необхідність використання інших видів даних.
Ранні мови програмування (ФОРТРАН, АЛГОЛ-60) були призначені для вирішення науково-технічних обчислювальних завдань. У цих мовах використовувалися лише вищезгадані види даних (прості змінні і масиви) що було сповна достатньо.
Починаючи з кінця 60-х років комп'ютери починають інтенсивно використовуватися для вирішення так званих необчислювальних завдань, пов'язаних з обробкою різного роду документів. Розглянемо появу нового вигляду даних на прикладі спрощених завдань обробки даних.
Завдання 1. Нарахування заробітної плати.
Розглядаємо завдання при двох спрощуючих припущеннях:
співробітникові нараховується заробітна плата на основі його окладу;
жодні податки і відрахування не враховуються.
Необхідні для вирішення цього завдання відомості про співробітника представлені в наступній картці НАРАХУВАННЯ:
Прізвище, ім'я, по батькові |
Оклад |
Кількість відпрацьованих днів в місяць |
Нарахована сума |
FIO |
O |
Ko |
S |
Для кожного працівника нарахована сума за певний місяць розраховується по наступній формулі:
S=KoO/Kr
де Kr – кількість робочих днів в даному місяці.
Для кожного співробітника відповідні дані мають конкретне значення, наприклад:
Іванов Іван Іванович |
1800 |
24 |
1800 |
Ці значення мають сенс лише у взаємозв'язку один з одним. Окремо вибране число 1800 втрачає свій змістовний сенс, тому використовувати такий вигляд даних, як проста змінна, тут не можна. В той же час набір відповідних значень, що характеризують конкретного співробітника, має різних типів (символьний і числовий), тобто використовувати для його представлення такий вигляд даних, як масив, також не можна. Таким чином, понять "Проста змінна" і "масив" недостатньо, аби представити відповідну картку.
Для опису аналогічних представлень даних в наочної області необчислювальних завдань вводиться ряд нових понять [1].
Елемент даних (поле) – найменша одиниця пойменованих даних.
Для даного прикладу елементами даних є FIO, O, Ko, S.
Для опису картки співробітника використовується поняття "Логічний запис".
Логічний запис – пойменована сукупність елементів даних (полів).
Екземпляр логічного запису – поточне значення елементів запису.
Для представлення всього набору карток співробітників використовується поняття "Логічний файл"
Логічний файл – пойменована сукупність всіх екземплярів записів заданого типа.
Приклад логічного файлу НАРАХУВАННЯ:
Таким чином, за допомогою введених понять можна описувати відповідні дані. Для відображення цих понять в сучасних мовах програмування, призначених як для обчислювальних завдань, так і для завдань обробки даних, введений новий вигляд даних.
У алгоритмічній мові Паскаль вводиться такий вигляд даних, як запис (RECORD) – складна змінна з декількома компонентами, які можуть мати різні типи. Крім того, доступ до компонентів запису (полів) здійснюється не по індексу, а по імені. При програмуванні завдання 1 мовою Паскаль логічний запис НАРАХУВАННЯ представляється виглядом даних RECORD, набір екземплярів логічних записів співробітників (логічний файл) представляється "фізичним" файлом, що формується засобами мови Паскаль і операційної системи.
Salary = RECORD
FIO: string;
O: real;
Ko: real;
S: real;
END;
Відзначимо важливу специфіку таких необчислювальних завдань. Для цих завдань характерні великі об'єми даних (велика кількість співробітників, велика кількість вироблюваних виробів і т. п.). Вказані дані, як правило, використовуються для вирішення завдання багато разів (зарплата нараховується постійно кожного місяця), тому дані повинні достатньо довго зберігатися в пам'яті ЕОМ. Для тривалого зберігання завжди використовується зовнішня пам'ять.
У зв'язку з цим рішення задачі 1 складається з двох етапів.
1. Введення вихідних даних і занесення їх в зовнішню пам'ять.
type
Salary = RECORD
FIO: string;
O: real;
Ko: real;
S: real;
END;
FSalary = File of Salary;
var
F: FSalary;
...
{ Введення вихідних даних }
repeat
write('Введіть кількість співробітників (не більш'
MAXN' ): ');
readln(N);
until (N>0) AND (N<=MaxN);
For I := 1 to N do
Begin
Write('Введіть прізвище співробітника з номером ',I': ');
ReadLn(Sotr[i].FIO);
Write('Введіть оклад співробітника з номером ', I, ': ');
ReadLn(Sotr[i].O);
Write('Введіть к-ть відпрацьованих днів співробітника з
номером ', I, ': ');
ReadLn(Sotr[i].Ko);
End;
{ Занесення даних в зовнішню пам'ять }
Assign(F, 'MyFile.fsf');
Rewrite(F);
For I := 1 to N do
Write(F, Sotr[i]);
Close(F);
...
2. Читання вихідних даних із зовнішньої пам'яті, розрахунок нарахованих сум і вивід на друк.
...
{ Читання даних із зовнішньої пам'яті }
Assign(F, 'MyFile.fsf');
Reset(F);
For I := 1 to N do
Read(F, Sotr[i]);
Close(F);
{ Розрахунок і друк нарахованих сум }
For I := 1 to N do
Begin
Sotr[i].S := Sotr[i].O * Sotr[i].Ko / Kr;
WriteLn(Sotr[i].FIO, ': ', Sotr[i].S);
End;
...
Представлені програми вирішують поставлену задачу при зроблених припущеннях. Необхідні для цього дані зберігаються у файлі MyFile.fsf, призначеному лише для вирішення цього завдання. Відзначимо, що в цьому випадку опис даних включений в прикладну програму. При зміні формату записів файлу необхідна зміна прикладної програми. Таким чином, програмна система, що вирішує поставлене завдання, визначає свої власні дані і управляє ними. Такі програмні системи називаються файловими системами [2] [3].
Завдання 2. Облік кадрового складу.
Тут обробляються відомості про співробітника, представлені в картці СПІВРОБІТНИК:
Прізвище, ім'я, по батькові |
Посада |
Рік народження |
Оклад |
Місце проживання |
FIO |
D |
G |
O |
M |
Рішення задачі складається з наступних етапів:
Введення вихідних даних і занесення їх в зовнішню пам'ять.
Читання вихідних даних із зовнішньої пам'яті з метою видалення, коректування або додавання запису.
...
{ Читання даних із зовнішньої пам'яті }
Assign(F, 'MyFile.fsf');
Reset(F);
IsFound := False;
For I := 1 to N do
Begin
Read(F, Sotr);
If Sotr.FIO = KeyFio Then
Begin
IsFound := True;
Sotr.D := 'Начальник відділу';
Seek(F, FilePos(F)-1);
Write(F, Sotr);
Break;
End;
If IsFound Then
WriteLn('Коректування успішно вироблене')
Else WriteLn('Співробітника ', KeyFio, 'не виявлено');
Close(F);
...
У даному випадку завдання 2 вирішується незалежно від завдання 1.
Завдання 3. Облік економії фонду оплати праці (ФОП) у зв'язку з хворобою співробітників.
Обробляються відомості, представлені записами ЕКОНОМІЯ ФОП:
Прізвище, ім'я, по батькові |
Оклад |
Кількість днів на лікарняному аркуші |
Неоплачена сума |
FIO |
O |
Kдв |
SN |
SN=KдвO/Kr.
Програма рішення задачі 3 аналогічна програмі рішення задачі 1.
Розглянемо типовий випадок, коли всі три вищезгадані програмні системи функціонують в одній організації. Відзначимо наступні принципові експлуатаційні недоліки:
Інформація дублюється. У трьох файлах присутні поля FIO, O, що призводить до істотної перевитрати пам'яті. При внесенні змін (наприклад, зміні прізвищу) доводиться вносити одне і те ж значення кілька разів в різні файли, що наводить до збільшення витрат машинного часу. Існує потенційна можливість суперечності даних (до одного файлу зміни внесені, в інший – ні).
Усунути перераховані недоліки можна, об'єднавши відповідні записи і створивши єдину інформаційну базу для всіх вищеназваних завдань. На перший погляд найприродніше об'єднати всі записи в одну, прибравши дублюючі поля. Отримуємо можливий варіант об'єднання:
FIO |
D |
O |
G |
Ko |
M |
Kдв |
S |
SN |
Дублювання інформації повністю прибране. Витрата пам'яті мінімальна. Недоліки усунені. Розглянемо, як в цьому випадку зміниться час вирішення завдань 1–3. Час рішення задачі прямо пропорційно об'єму прочитуваних із зовнішньої пам'яті даних.
Позначимо Ti, li, Ni відповідно час рішення, довжину запису, число записів i-й завдання (i = 1, 2, 3) при використанні окремих файлів для кожного завдання:
Ti≈C*li*Ni
де C – деякий коефіцієнт пропорційності.
Позначимо Ri, d, N відповідно час рішення i-й задачі (i = 1, 2, 3) при використанні файлу об'єднаних записів, довжину запису, число записів:
Ri≈C*d*N
Відмітимо, що N1 = N2 = N, N3 << N.
Тоді час рішення i-й задачі (i = 1, 2) при використанні об'єднаного файлу збільшиться в Ri / Ti ≈ d/li раз. Для нашого прикладу час вирішення завдань залежно від вибраної довжини полів може змінюватися в 2–3 рази. Таким чином, платою за виключення дублювання інформації є збільшення часу вирішуваних завдань. Відмітимо, що таке збільшення, як правило, є допустимим.
Час рішення задачі 3 збільшиться в R3/T3 ≈ d*N/l3*N3 раз. Оскільки для даного прикладу N3 << N, то R3 >> T3. Час рішення задачі 3 може збільшитися на декілька порядків, що абсолютно недопустимо.
Розглянемо інший варіант побудови єдиної інформаційної бази. Об'єднаємо записи завдань 1 і 2, запис завдання 3 залишимо окремо. Отримаємо два типи записів:
FIO |
D |
O |
G |
Ko |
S |
M |
||
FIO |
O |
Kдв |
SN |
|
|
В цьому випадку дублювання залишається (дублюються поля FIO, O). Але оскільки N3<<N, то загальний об'єм дублювання незначний. Час рішення задачі 1 і 2 в цьому випадку трохи зросте в порівнянні з варіантом окремих файлових систем, час рішення задачі 3 такий же, як і в початковому варіанті окремого файлу. Таке об'єднання дозволяє значно зменшити вплив недоліків і при цьому істотно збільшує час вирішення всіх завдань. Всі три завдання можна вирішувати, використовуючи загальну інформаційну базу з двох типів записів. Відзначимо, що двох приведених типів записів пов'язані один з одним по полю FIO (знаходяться в деякому відношенні). Відзначимо, що приведені варіанти інтеграції не вичерпують всі можливі способи інтеграції даних для приведених завдань і до питання вибору найкращого варіанту повернемося в подальших лекціях.
Тут дуже важливо, що в цьому випадку для вирішення вищезгаданих завдань використовується деякий новий вигляд даних, що формується на основі інтеграції записів.
Для опису цього вигляду даних вводиться нове поняття "База даних" [1].
База даних – сукупність екземплярів різних типів записів і стосунків між записами і елементами.
Базу даних можна визначити як сукупність тих взаємозв'язаних даних, що зберігаються разом за наявності такої мінімальної надмірності, яка допускає їх використання оптимальним чином для одного або декількох застосувань.
Таким чином, поява поняття "Бази даних" обумовлене виникненням нового класу необчислювальних завдань, при вирішенні яких використовуються загальні дані. Як основний критерій оптимальності функціонування бази даних, як правило, використовуються тимчасові характеристики реалізації запитів користувачів прикладними програмами.
Короткі підсумки. Розглянуто розвиток основних понять представлення даних. Описані класичні поняття програмування, пов'язані з даними (змінна, масив) і поява нових понять програмування (поле, запис, файл) як наслідок розширення кола вирішуваних завдань і їх віддзеркалення в системах програмування. Поставлено завдання інтеграції даних при використанні декількома завданнями загальних даних. Визначено поняття бази даних.