Шоста нормальна формаШоста нормальна форма (6НФ) — термін у теорії реляційних баз даних, який використовується двома способами. 6НФ (визначення К. Дейта)Крістофер Дж. Дейт і інші визначили шосту нормальну форму як нормальну форму, засновану на розширенні реляційної алгебри.[1][2][3] Реляційні оператори на кшталт join узагальнені для підтримки природного трактування інтервальних даних, як-от послідовності дат або моментів часу, наприклад у темпоральних базах даних[4][2][3]. Тоді шоста нормальна форма заснована на цьому узагальненому з'єднанні, як зазначено нижче:
Дейт і інші також дали наступне визначення:
Будь-яке відношення в 6НФ перебуває також у 5НФ. Шоста нормальна форма призначена для декомпозиції змінних-відношень до незвідних компонентів. Хоча це може бути порівняно неважливо для нетемпоральних змінних-відношень, воно може бути важливо при роботі з темпоральними змінними чи іншими інтервальними даними. Наприклад, якщо відношення включає ім'я постачальника, статус і місто, можна також захотіти додати темпоральні дані, як-от час, протягом якого ці значення є, чи були, валідними (наприклад, для історичних даних), але три значення можуть змінюватися незалежно один від одного та за різними ставками. Можна, наприклад, бажати відстежувати історію змін для статусу; перегляд виробничих витрат може виявити, що зміна була спричинена зміною постачальником міста, а отже, вони сплачують за доставку. Для подальших обговорень на тему «Темпоральна агрегація в SQL» див. також Zimanyi[7]. Для іншого підходу див. TSQL2.[8] ДКНФДеякі автори використовують термін шоста нормальна форма по-іншому: як синонім доменно-ключової нормальної форми (ДКНФ). Це використання передує роботі Дейта й інших[9]. ВикористанняШоста нормальна форма наразі використовується в деяких сховищах даних, де переваги переважають недоліки[10], наприклад, використовуючи якірне моделювання[en]. Хоча використання 6НФ призводить до розростання таблиць, сучасні бази даних можуть підрізати таблиці від запитів на вибірку (використовуючи процес, званий «ліквідацією таблиці»), де вони не вимагаються, а тому прискорюють запити на доступ лише до деяких атрибутів. ПрикладДля того, щоб таблиця перебувала в 6НФ, вона має спочатку відповідати 5НФ, а потім вимагається, що кожна таблиця задовольняє лише тривіальні залежності з'єднань. Візьмемо простий приклад[11] із таблицею вже в 5НФ: тут, у таблиці користувачів, кожен атрибут є непорожнім, а первинним ключем є ім'я користувача:
Таблиця перебуває в 5НФ, оскільки кожна залежність з'єднання передбачається потенційним ключем. Конкретніше, єдиними можливими залежностями з'єднань є: {ім'я користувача, статус}, {ім'я користувача, відділ}. Версія 6НФ виглядатиме як це:
Тим не менше, потрібно дуже подумати перш, ніж намагатися застосувати нормалізацію 6НФ, оскільки вона передбачає драматичне збільшення кількості таблиць і може не відповідати вашим потребам. Іншим прикладом, у якому можна продемонструвати 6НФ, є те, коли ми поглянемо на зайнятий простір. Для цього ми оберемо галузь охорони здоров'я з такою таблицею:
Галузь охорони здоров'я містить декілька спеціалізацій до максимального розвитку в цій галузі. Ними є: — резидент — стажист — спеціаліст. Підвищення до наступної позиції для будь-кого займає декілька років його чи її належного навчання. Якщо лікар практикувався на місці менше за необхідний період, він або вона не здатні просунутися в ранзі. Наприклад: Якщо Майкл Міллер, ортопед-стажист, працював у медичній сфері 3 роки та 11 місяців, він не зможе стати ортопедом-спеціалістом, оскільки мінімальний період для підвищення зі стажиста до спеціаліста складає 4 роки. Перехід від однієї позиції до іншої заснований на іспиті. Іспит, необхідний для просування від одного ступеня до іншого (наприклад: від стажиста до спеціаліста), можна скласти після періоду в 4 роки. Наступним кроком у застосуванні 6НФ для Таблиці 1 є усунути всі нетривіальні залежності з'єднання.
Тепер можна бачити, що перехід від 5НФ до 6НФ також зменшує простір, зайнятий таблицею. В дужках позначено, скільки місця займає кожне поле таблиці (в байтах).
Таблиця 1 = [366] (байтів) Можна бачити, що Таблиця 1, яка перебуває в 5НФ, займає загалом 366 байтів. Ця таблиця, переведена в 6НФ, складатиметься з таблиць Таблиця 2.1 і Таблиця 2.2. Останні дві займатимуть разом 326 байтів.
Таблиця 2.1 = [270]
Таблиця 2.2 = [56] => Таблиця 2.1 + Таблиця 2.2 = [326] (байтів) Можна бачити, що, в даному прикладі, 6НФ займає менше за 5НФ (конкретніше, менше на 40 байтів). Перехід на 6НФ зменшує зайнятий простір. Якщо початкова таблиця більша, після переходу на 6НФ, зменшений простір також буде більшим. На практиці, між іншим, накладні витрати рядка через таке розділення інформації в багатьох таблицях займають більше місця. Проте це не відволікає від підвищеної гнучкості, узгодженості — та складності запитів. Примітки
Джерела
Література
|