Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чичкань.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.15 Mб
Скачать
      1. Вступ до баз даних. Загальна характеристика основних понять

Лекція присвячена розгляду розвитку основних понять обробки даних, пов'язаного з постійним розширенням класів вирішуваних на ЕОМ завдань. Показується необхідність інтеграції даних при вирішенні декількома користувачами завдань, що використовують загальні дані. Вводиться поняття бази даних.

Мета лекції: показати, що із зміною вигляду вирішуваних на ЕОМ завдань в програмуванні виникає новий вигляд представлення даних, у тому числі такий вигляд, як бази дані.

      1. 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].

База даних – сукупність екземплярів різних типів записів і стосунків між записами і елементами.

Базу даних можна визначити як сукупність тих взаємозв'язаних даних, що зберігаються разом за наявності такої мінімальної надмірності, яка допускає їх використання оптимальним чином для одного або декількох застосувань.

Таким чином, поява поняття "Бази даних" обумовлене виникненням нового класу необчислювальних завдань, при вирішенні яких використовуються загальні дані. Як основний критерій оптимальності функціонування бази даних, як правило, використовуються тимчасові характеристики реалізації запитів користувачів прикладними програмами.

Короткі підсумки. Розглянуто розвиток основних понять представлення даних. Описані класичні поняття програмування, пов'язані з даними (змінна, масив) і поява нових понять програмування (поле, запис, файл) як наслідок розширення кола вирішуваних завдань і їх віддзеркалення в системах програмування. Поставлено завдання інтеграції даних при використанні декількома завданнями загальних даних. Визначено поняття бази даних.