Основні засади нормалізації даних

Нормалізація – процес перевірки і реорганізації сутностей та атрибутів з метою задоволення вимог до реляційної моделі даних. В результаті нормалізації повинна бути утворена структура даних, в якій інформація про кожний факт зберігається тільки один раз. Процес нормалізації – це послідовне приведення структури даних до нормальних форм. Існує шість різновидів нормальних форм. На практиці найчастіше використовують три форми: 1NF, 2NF, 3NF.

Нормальні форми базуються на понятті функціональної залежності. Атрибут В сутності Е функціонально залежить від атрибута А сутності Е тоді і тільки тоді, коли кожне значення А в Е пов’язане тільки з одним значенням В в Е і єдиним чином визначає В.

Повна функціональна залежність визначається як: Атрибут В сутності Е цілком функціонально залежить від множини атрибутів А сутності Е тоді і тільки тоді, коли В функціонально залежить від А і не залежить від підмножини А.

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

Приведення сутності до першої нормальної форми

Для приведення сутності до першої нормальної форми слід:

· Розділити складні атрибути на атомарні;

· Створити нову сутність;

· Перенести до неї всі атрибути, які повторюються;

· Вибрати або створити первинний ключ (РК) для нової сутності;

· Встановити ідентифікований зв’язок від попередньої сутності до нової;

· РК попередньої сутності стане зовнішнім ключем (FK) для нової.

Приведення сутності до другої нормальної форми

Для приведення сутності до другої нормальної форми слід:

· Виділити атрибути, які залежать тільки від частини первинного ключа, створити нову сутність;

· Перенести до неї всі атрибути, які залежать від частини ключа;

· Встановити ідентифікований зв’язок від попередньої сутності до нової. РК попередньої сутності стане зовнішнім ключем (FK) для нової.

Приведення сутності до третьої нормальної форми

Для приведення сутності до третьої нормальної форми слід:

· Створити нову сутність і перенести до неї атрибути з однією і тією ж залежністю від не ключового атрибуту;

· Використати атрибут(и), що визначають цю залежність, в якості первинного ключа нової сутності;

· Встановити неідентифікований зв’язок від нової сутності до попередньої.

· ERWin не містить механізму нормалізації БД, але підтримує вимоги до нормалізованої БД за рахунок уніфікації ключів, заборони повторювань назв атрибутів, таблиць та зв‘язків.

· Приклад нормалізованої БД відділу постачання м‘ясокомбінату наведено в додатку 3.

Питання для самоперевірки

1. Що таке повна і неповна функціональна залежність?

2. Що таке нормалізація даних Які форми нормалізації даних вам відомі?

3. Коли сутність знаходиться у першій нормальній формі?



4. Коли сутність знаходиться у другій нормальній формі?

5. Коли сутність знаходиться у третій нормальній формі?

Тест до модуля 2

1. Рекурсивним зв‘язком називається:

А) зв‘язок між полями однієї сутності;

Б) зв‘язок між записами однієї сутності;

В) зв‘язок між атрибутами однієї сутності;

Г) зв‘язок між екземплярами однієї сутності;

Д) зв‘язок між двома сутностями з використанням імені ролі.

2. Рекурсивний зв‘язок буває:

А) ієрархічним;

Б) поіменованим;

В) асоціативним;

Г) мережним;

Д) характеристичним.

3. Зв‘язок багато до багатьох означає, що:

А) багато записів батьківської сутності пов‘язано з багатьма записами дочірньої сутності;

Б) багато записів однієї сутності пов‘язано з багатьма записами іншої сутності;

В) багато екземплярів дочірньої сутності пов‘язано з багатьма екземплярами батьківської сутності;

Г) багато екземплярів однієї сутності пов‘язано з багатьма екземплярами іншої сутності;

Д) багато атрибутів однієї сутності пов‘язано з багатьма атрибутами іншої сутності.

4. Ім‘я ролі використовується для:

А) розв‘язання рекурсивних зв‘язків;

Б) розв‘язання зв‘язку багато до багатьох;

В) розв‘язання категоріального зв‘язку;

Г) розв‘язання декількох однотипних зв‘язків по одному ключу;

Д) забезпечення міграції зовнішніх ключів.

5. Мережна рекурсія відповідає зв‘язку типа:

А) один до багатьох;

Б) один до одного;

В) багато до багатьох;

Г) один до багатьох не ідентифікований;

Д) один до багатьох ідентифікований.

6. Ієрархічна рекурсія відповідає зв‘язку типа:

А) один до багатьох;

Б) один до одного;

В) багато до багатьох;

Г) один до багатьох не ідентифікований;

Д) один до багатьох ідентифікований.

7. Залежну дочірню сутність, яка пов‘язана з однією батьківською сутністю і зберігає її характеристики називають:

А) характеристичною;

Б) категоріальною;

В) поіменованою;

Г) асоціативною.

8. Залежну дочірню сутність, яка пов‘язана з декількома батьківськими сутностями і зберігає інформацію про зв‘язок між ними називають:

А) характеристичною;

Б) категоріальною;

В) поіменованою;

Г) асоціативною.

9. Залежну дочірню сутність, яка пов‘язана з декількома батьківськими сутностями, зберігає інформацію про зв‘язок між ними і містить тільки ключі батьківських сутностей називають:

А) характеристичною;

Б) категоріальною;

В) поіменованою;

Г) асоціативною.

10. Дочірню сутність в ієрархії наслідування називають:

А) характеристичною;

Б) категоріальною;

В) поіменованою;

Г) асоціативною.

11. Заборона вилучення екземпляра батьківської сутності, якщо є пов‘язані з ним екземпляри дочірньої сутності відповідає правилу цілісності посилань:

А) Child Delete- CASCADE ;

Б) Parent Delete- RESTRICT;

В) Child Delete-RESTRICT;

Г) Child Update- CASCADE ;

Д) Parent Update- RESTRICT;

Е) Child Update-RESTRICT;

Є) Child Insert- CASCADE ;

Ж) Parent Insert- RESTRICT;

З) Child Insert-RESTRICT.

12. Видалення всіх екземплярів дочірньої сутності при видаленні зв‘язаного з ними екземпляра батьківської сутності відповідає правилу цілісності посилань:

А) Child Delete- CASCADE ;

Б) Parent Delete- RESTRICT;

В) Child Delete-RESTRICT;

Г) Child Update- CASCADE ;

Д) Parent Update- RESTRICT;

Е) Child Update-RESTRICT;

Є) Child Insert- CASCADE ;

Ж) Parent Insert- RESTRICT;

З) Child Insert-RESTRICT.

13. Дозволяється доповнення дочірньої сутності новим екземпляром незалежно від наявності зв‘язаного екземпляра батьківської сутності, що відповідає правилу цілісності посилань:

А) Child Insert- SET NULL ;

Б) Parent Insert- NONE;

В) Child Insert-SET DEFAULT;

Г) Child Insert- NONE ;

Д) Parent Insert- SET DEFAULT;

Е) Child Update- SET NULL;

Є) Child Insert- CASCADE ;

Ж) Parent Insert- RESTRICT;

З) Child Insert-RESTRICT.

14. Заборона оновлення екземпляра батьківської сутності, якщо є пов‘язані з ним екземпляри дочірньої сутності відповідає правилу цілісності посилань:

А) Child Delete- CASCADE ;

Б) Parent Delete- RESTRICT;

В) Child Delete-RESTRICT;

Г) Child Update- CASCADE ;

Д) Parent Update- RESTRICT;

Е) Child Update-RESTRICT;

Є) Child Insert- CASCADE ;

Ж) Parent Insert- RESTRICT;

З) Child Insert-RESTRICT.

15. Встановлення значення по замовчуванню замість атрибута зовнішнього ключа в екземплярах дочірньої сутності при видаленні, пов‘язаного з ними, екземпляра батьківської сутності відповідає правилу збереження цілісності посилань:

А) Child Delete- SET NULL ;

Б) Parent Delete- NONE;

В) Child Delete-SET DEFAULT;

Г) Child Delete- NONE ;

Д) Parent Delete- SET DEFAULT;

Е) Child Delete- SET NULL;

Є) Child Delete- CASCADE ;

Ж) Parent Delete- RESTRICT;

З) Child Delete-RESTRICT.

16. Які правила збереження цілісності посилань відповідають не ідентифікованому зв‘язку при встановленні опції No Nulls.

А) RESTRICT;

Б) NONE;

В) SET DEFAULT;

Г) CASCADE;

Д) SET NULL.

Модуль 3. Лекції 10-16

1. Стандарти мови SQL для баз даних з розподіленим доступом.

2. Приклади побудови запитів до бази даних.

3. Моделювання тригерів скриптів та процедур, що зберігаються.

Лекція 10

Мова формування запитів SQL

Історія розвитку SQL

В сучасних СКБД звичайно підтримується єдина інтегрована мова, що вміщує всі необхідні засоби для роботи з БД, починаючи від її створення до забезпечення зручного інтерфейсу користувача БД. Стандартною мовою найбільш розповсюджених в теперішній час реляційних СКБД є мова структурованих запитів SQL. SQL - не процедурна мова, оператори якої вказують, які дії повинні виконуватись, а не спосіб їх виконання. Програмний код на SQL в декілька разів менший ніж програмний код написаний на процедурній мові. Це дозволяє виконувати обробку множини записів за один раз на відміну від обробки "запис за записом", що характерно для файлових систем.

SQL (Structured Query Language) — Структурована Мова Запитів — стандартна мова запитів в роботі з реляційними БД. Мова SQL з'явилася після реляційної алгебри. ЇЇ прототип було розроблено у кінці 70-х років в компанії IBM Research. Вона була реалізована в першому прототипі реляційної СКБД фірми IBM System R.

Перший міжнародний стандарт мови SQL був прийнятий у 1989 р. (далі будемо називати його SQL/89 або SQL1). Іноді стандарт SQL1 також називають стандартом ANSI/ISO.

В кінці1992 р. був прийнятий новий міжнародний стандарт мови SQL, який в подальшому будемо називати SQL/92 або SQL2. І він має деякі недоліки, але в той же час є значно точнішим та більш повним, ніж SQL/89. У теперішній час більшість виробників СКБД внесли зміни у свої продукти таким чином, щоб вони у більшій мірі задовольняли стандарту SQL2.

У 1999 році з'явився новий стандарт, який був названий SQL3. Якщо відмінності між стандартами SQL1 та SQL2 здебільшого були кількісними, то стандарт SQL3 має якісні суттєві переробки. У SOL3 були введені нові типи даних, при цьому передбачена можливість завдання складних структурованих типів даних, які точніше відповідають об'єктній орієнтації. Додано розділ, що вводить стандарти на події та тригери, яких раніше не торкались в стандартах, хоча вони давно широко використовувані в промислових СКБД. У стандарті визначені можливості чіткої специфікації тригерів як сукупності події та дії. В межах управління транзакціями сталося повернення достарої моделі транзакції, яка допускає точки збереження (savepoints), і можливість завдання в операторі відката ROOLBACK точок повернення, що дозволяє відкатувати транзакцію не до початку, а у проміжну, раніше збережену точку. Таке рішення збільшує гнучкість реалізації складних алгоритмів обробки інформації.

Структура SQL

На відміну від реляційної алгебри, де були представлені лише операції запитів до БД, SQL є повною мовою, в якій присутні не тільки операції запитів, але і оператори, відповідні мові опису даних (DDL — Data Definition Language). Крім того, мова SQL має оператори, які призначені для управління (адміністрування ) БД.

Відповідні розділи SQL наведені в таблицях 10.1 - 10.6.

Таблиця 10.1. Оператори визначення даних DDL

Оператор Зміст Дія
CREATE TABLE Створити таблицю Створює нову таблицю БД
DROP TABLE Видалити таблицю Видаляє таблицю БД
ALTER TABLE Змінити таблицю Змінює структуру існуючої таблиці або обмеження цілісності, що визначені для даної таблиці
CREATE VIEW Створити представлення Створює віртуальну таблицю, що відповідає SQL- запиту
ALTER VIEW Змінити представлення Змінює раніше створене представлення
Оператор Зміст Дія
DROP VIEW Видалити представлення Видаляє раніше створене представлення
CREATE INDEX Створити індекс Створює індекс для деякої таблиці , що забезпечує швидкий доступ за атрибутами, які входять в індекс
DRОР INDEX Видалити індекс Видаляє раніше створений індекс.

Таблиця 10.2. Оператори маніпулювання даними

Data Manipulation Language (DMP)

Оператор Зміст Дія
DELETE Видалити рядок Видаляє один або декілька рядків, що відповідають вимогам фільтрації, з базової таблиці. Узгоджується з принципами підтримки цілісності.
INSERT Вставити рядок Вставляє один рядок в базову таблицю. Дозволені модифікації оператора, при яких відразу декілька рядків можуть бути перенесені з однієї таблиці або запита до базової таблиці
UPDATE Відновити рядок Відновлює значення одного або декількох стовпців у одному або декількох рядках, що відповідають вимогам фільтрації.

Таблиця 10.3. Мова запитів Data Query Language (DQL)

Оператор Зміст Дія
SELECT Вибрати рядок Оператор, який замінює всі оператори реляційної алгебри та дозволяє сформувати результуюче відношення, що відповідає запиту

Таблиця 10.4. Засоби управління транзакціями

Оператор Зміст Дія
COMMIT Завершити транзакцію Завершити комплексну взаємопов'язану обробку інформації, об'єднану у транзакцію
ROLLВAСК Відкатити транзакцію Відмінити зміни, проведені у процесі виконання транзакції
SAVEPOINT Зберегти проміжну точку виконання транзакції Збереження проміжного стану БД, відмічання його для подальшого повернення до нього

Таблиця 10.5. Засоби адміністрування даних

Оператор Зміст Дія
ALTER DATABASE Змінити БД Змінити набір головних об'єктів у базі даних, обмежень, що стосуються всієї бази даних
ALTER DBAREA Змінити область зберігання БД Змінити раніше створену область зберігання
ALTER PASSWORD Змінити пароль Змінити пароль для всієї бази даних
CREATE DATABASE Створити БД Створити нову базу даних, визначивши основні параметри для неї
CREATE DBAREA Створити область зберігання Створити нову область зберігання та зробити її доступною для розміщення даних
DROP DATABASE Видалити БД Видалити існуючу базу даних (тільки в тому випадку, коли є права на виконання цієї дії)
DROP DBAREA Видалити область зберігання БД Видалити існуючу область зберігання (якщо в ній в теперішній час відсутні активні дані)
GRANT Надати права Надати права доступу на ряд дій над деяким об'єктом БД
REVOKE Позбавити прав Позбавити прав доступу до деякого об‘єкту або деяким діям над об‘єктом

Таблиця 10.6. Програмний SQL

Оператор Зміст Дія
DECLARE Визначає курсор для запиту Задає деяке ім'я і визначає пов'язаний з ним запит до БД, який відповідає віртуальному набору даних
OPEN Відкрити курсор Формує віртуальний набір даних, що відповідає опису вказаного курсору та теперішньому стану БД
FETCH Зчитати рядок із множини рядків, визначених курсором Зчитує черговий рядок, який задається параметром команди з віртуального набору даних, що відповідають відкритому курсору
CLOSE Закрити курсор Закриває доступ до віртуального набору даних, які відповідають вказаному курсору
PREPARE Підготувати оператор SQL до динамічного виконання Генерує план виконання запиту, який відповідає заданому оператору SQL
EXECUTE Виконати оператор SQL, що раніше був підготовлений до динамічного виконання Виконує раніше підготовлений план запиту

В промислових СКБД набір основних операторів розширений за рахунок включення операторів визначення та запуску збережуваних процедур та операторів визначення тригерів.

Питання для самоперевірки

1. З яких частин складається стандарт SQL2 ?

2. В чому полягає відміна сучасного стандарту SQL2 від стандарту SQL1?

3. Що нового з‘явилося в стандарті SQL3 порівняно зі стандартом SQL2?

4. Як в сучасному стандарті враховані особливості клієнт-серверних БД?

Лекція 11

Оператор вибору SELECT

Мова запитів (Data Query Language) в SQL складається з одного оператора SELECT. Цей єдиний оператор вибору реалізує всі операції реляційної алгебри. Однак один і той же запит може бути реалізований декількома способами, які можуть суттєво відрізнятися часом виконання, хоча будуть формувати однакові результати.

Головною перевагою оператора вибору SELECTвSQL є те, що він в значній мірі звільняє користувача від необхідності створення процедур пошуку даних (маємо на увазі процедури написані на процедурній мові). Синтаксис оператора SELECT має наступний вигляд:

SELECT [ALL [DISTINCT](|*)

FROM

[WHERE ]

[GROUP BY ]

[HAVING ]

[ORDER BY ]

SELECT– перше слово всіх повідомлень SQL, за допомогою якого проводиться пошук даних в одній або декількох таблицях БД. За ключовим словом SELECT йдуть назви всіх полів (в тому числі вирахуваних), які слід включити в результуючу вибірку. Використовуючи знак * після SELECT, можна автоматично включити в запит всі поля вихідної таблиці.

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

DISTINCTвиключає повторні значення поля в наборі записів, які знайдені за допомогою SQL. DISTINCT, при визначенні дублікату, враховує тільки співпадання полів у вибраних записах повідомлення на відміну від DISTINCTROW, який вилучає запис з вибірки при дублюванні всього запису в цілому. Тобто, DISTINCTROW – виключити з вибірки дублікати записів.

FROMвказує, яка таблиця (або таблиці) вміщує необхідні нам поля.

JOINозначає зв’язок між записами, які знаходяться в різних таблицях. JOIN використовується разом с ключовими словами INNER, LEFT і RIGHT, які вказують тип зв’язку між таблицями.

WHEREозначає умовивибору – критерії, використовувані при відборі записів для включення у вибірку.

За WHERE йде вираз з операцією порівняння. В результуючу вибірку входять тільки ті записи, для яких вираз має значення “ІСТИНА”.

GROUP BY (назва поля, полів) означає створення групи за вказаним полем (полями).

HEVING (умова) створює умову для групи.

ORDER BY (назва поля, полів) забезпечує упорядкування за вказаним полем (полями).

Необхідно пам’ятати, що SQL це не програмний продукт, а загальний стандарт для формулювання запитів до баз даних. Хоча більшість версій SQL використовує одні й ті ж самі основні елементи, їх не можна назвати ідентичними. Кожна СКБД має свою версію SQL і слід пам‘ятати, що один і той же запит до БД можна реалізувати різними способами.

Предикати оператора SELECT

SQL вміщує спеціальні предикати, які використовуються для запису виразів порівняння в реченнях WHERE та HAVING.

Предикат Like.

Цей предикат дозволяє використовувати логіку заміни у виразах. За предикатом Like йде рядок шаблонів, який може вміщувати довільну послідовність символів. Символ “%” замінює групу символів, “_” – один символ, “#” – одну довільну цифру. В наступному прикладі використовується слово % Київ %. Цей шаблон дозволяє включати до вибірки будь-який елемент даних, в якому зустрічається слово Київ. Наприклад: Київ Траст, Київські каштани, Київ & Дніпро:

Where [Фірма] LIKE “% Київ %”

Предикат Like часто використовують стосовно дат. В наступному прикладі наводиться пошук всіх дат, що відносяться до грудня 2004 року:

Where [Дата] LIKE “12/%/2004”

Предикат In.

Цей предикат дозволяє визначити, чи знаходиться елемент даних у переліку даних. Наступний вираз має значення “істина”, якщо значенням поля “Місто” є одне з трьох міст, що входять до предиката In:

Where [Місто] In (“Київ”, “Харків”, “Одеса”)

Порядок слідування елементів всередині дужок на дію предиката In не впливає.

Предикат Between…And.

Цей предикат може бути корисним при відборі значення, яке знаходиться всередині визначеного інтервалу. Наприклад, наступний вираз має значення “Істина”, якщо значення поля Кількість знаходиться між 100 і 500:

Where [Кількість] >= 100 And [Кількість] <= 500

Предикати використовуються в операторах умови WHERE та HAVING.

Сукупні функції SQL

Сукупні (Агрегативні) функції SQL наведені в таблиці 11.1. Вони автоматично оперують з поточним набором даних при формуванні запиту. В якості аргументу в агрегативних функціях використовується назва поля (колонки), тобто, функція оперує з множиною даних, які знаходяться у стовпчику таблиці. Як аргумент може виступати також вираз, утворений арифметичними операціями над назвами полів. Наприклад, для підрахунку загальної виручки за певний період можна використати наступний вираз:

Сума= Sum ( [Ціна]*[Кількість]).

Агрегативні функції використовують аналогічно назвам полів в операторі SELECT. Тобто, їх записують серед переліку полів і формують відповідні заголовки в отриманому, в наслідок виконання запиту, наборі даних. З функціями SUM та AVG можуть використовувати виключно числові поля. З функціями COUNT, MAX та MIN використовують, як числові, так і символьні поля. При виборі, в якості аргументів, символьних полів функції MAX та MIN будуть транслювати їх в еквівалент ASCII коду і обробляти у алфавітному порядку.

Таблиця 11.1. Агрегативні функції SQL

Назва операції Операція
Avg ( ) Середнє арифметичне
Count ( ) Кількість записів
First ( ) Значення першого запису
Last ( ) Значення останнього запису
Min ( ) Найменше значення
Max ( ) Найбільше значення
Sum ( ) Сума всіх записів

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

Питання для самоперевірки

5. В чому полягає призначення оператора SELECT?

6. Які речення складають оператор SELECT?

7. В яких реченнях оператора SELECT використовують предикати умови?

8. Як забезпечити групування даних вибраних оператором SELECT?

9. Які функції називають агрегативними?

10. Які дані таблиці розглядають в якості аргументів агрегативних функцій?

Лекція 12




6731261397354368.html
6731326667876173.html
    PR.RU™