Чи є інструмент для перевірки нормалізації моєї бази даних до третьої нормальної форми?


20

Я дізнався про нормалізацію нещодавно і розумію, наскільки це важливо при впровадженні нової схеми.

Як я можу перевірити, чи відповідає моя база даних 2NF або 3NF?

Огляд вручну - це вірний варіант, але я шукаю тут автоматизований інструмент.

Я не шукаю інструмент "крапка та клацання", більше щось, що підкреслить можливі оптимізації, щоб зробити таблицю 3NF сумісною. Я думаю, він може використовувати статистику на основі хороших вибіркових даних та / або семантичного аналізу назв стовпців.


1
Сподіваюся, такого інструменту не існує. 2NF / 3NF не потрібно застосовувати. Конструюючи схему / модель, часто доводиться враховувати практичні аспекти та міркування щодо продуктивності, яка, як правило, викидає xNF у вікно
Philᵀᴹ

2
Чи означає, що нормалізація не використовується реально? Я планував використовувати його як вихідну точку, і буду розглядати денормалізацію, коли вона сповільнить продуктивність.
ack__

3
Дизайн схем - це більше мистецтво, ніж наука. Впевнені, що є основні правила, яких потрібно дотримуватися, але як тільки ти це зробиш достатньо, ти починаєш добре розуміти, що працює, а що ні. Майстерність.
datagod

Я не згоден з Філом. Нормалізація - це іноді шлях. В інший час зіркова схема краще. Це залежить від того, що ти робиш. Вам потрібно дуже багато таблиць, перш ніж автоматизація буде вартим.
Вальтер Мітті

Відповіді:


24

Нормалізація абсолютно використовується в реальному світі ... і, сподіваємось, ви знаєте, що 3NF - це лише третій із ... що зараз, 8? Але 3NF має бути легкою ціллю.

Однак ... я б ризикнув сказати, що такого інструменту не може бути.

Нормалізація технічно є атрибутом кожної таблиці. У межах даної бази даних різні таблиці можуть мати різний рівень нормалізації.

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

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

Таким чином, потрібно розуміння фактичних фактів ... що виходить за рамки автоматизованих інструментів.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

У світі, де всі викладачі викладали всі предмети, і кожен студент міг взяти будь-яку комбінацію, але не більше одного курсу з кожного предмету від кожного викладача, ця таблиця дійсно може бути сказана в 3NF. У реальному світі заявляти про претензію 3NF на цю таблицю є абсурдом.

Щоб зрозуміти, що це не в 3NF, потрібно розуміти природу фактів, які він представляє. У нашій реальності ця таблиця не буде 3NF, оскільки (серед інших причин) предмет та викладач асоціюються разом так, що не мають нічого спільного зі студентом. Якщо у нас є курси, де викладачі викладають предмети, що зберігаються в іншому місці в нашій базі даних, чому б ми копіювали обидва значення тут, а не іноземний ключ з іншої таблиці, що вказує, що студент був підписаний на курс? Якщо інструктор буде замінений, нам доведеться змінити кілька записів у декількох місцях.

Чим більше нормалізована база даних, тим суттєвіше вона відповідає дійсному світу та самому собі, і тим складніше, якщо факти бази даних будуть ненавмисно неправдивими. Дизайн баз даних - це мистецтво, але це, безумовно, і наука.

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


2
Дякую за цю детальну відповідь. Однак, слідуючи вашому прикладу, інструмент, який аналізує вибіркові дані, повинен мати можливість виявити, що значення "інструктора" багаторазово повторюються, а також з'являються в іншій таблиці, отже, припускаючи, що він може бути кандидатом на зовнішній ключ або будь-яку іншу зміну, зробив би цю таблицю 3nf сумісною, чи я щось пропускаю?
ack__

2
Щоправда, але ключовим словом все ще є «підказати». Інструмент міг запропонувати структурні зміни, шукаючи очевидну надмірність, але я все-таки стверджую, що справжнє надмірність та випадковість кореляції буде важким для такого інструменту для розмежування між. Потрібно знати реальний характер даних.
Майкл - sqlbot

@ack__: бути у 3-й нормальній формі чи ні - це властивість відношення не пари чи множини відношень. Тож я не можу бачити, що встановлення відносин із зовнішнім ключем має щось спільне з 3-ю нормальною формою.
чудо173

Я думаю, що більш важливим питанням є те, що визначити багатоколонкові функціональні залежності є проблематичним. якщо значення можуть бути однаковими і все ж являють собою різні об'єкти (тобто там, де беруть участь складені ключі). Розглянемо таблицю: (address_text, місто, state_province, mail_code, country). Зараз це не нормалізується. (місто, штат_провірити) -> (країна). Отже, щоб повністю нормалізуватись, ми повинні розбити це на щонайменше три таблиці, можливо, чотири (обробка поштовим кодом!), Але складові клавіші роблять це проблематичним для виявлення на льоту. Також комп. Ключі є ключовими для ідеї nf, тому не ігноруючи їх!
Кріс Траверс

Чи може хтось пояснити, чому "У світі, де студент міг би пройти курс лише з одного предмету, а всі викладачі викладали всі предмети, ця таблиця справді може бути сказана в 3NF" Це, мабуть, підтверджує, що студенти -> предмет і нічого більше. Почуття, що ключовим у цій таблиці буде тоді (студенти, викладач), чи не перерве 3NF? Чим допомагає нам кожен вчитель, що викладає кожен предмет?
Дрю Верлі

5

Частина сенсу використання формальних методів при розробці реляційної теорії полягала в розробці процедур, які можна було б автоматизувати. Я впевнений, що CJ Date виходить прямо і говорить про це у своєму вступі до систем баз даних .

Кілька інструментів CASE, випущені наприкінці 1980-х або на початку 1990-х років, можуть отримати будь-яку можливу схему 5NF або шляхом аналізу діаграм ER, або за допомогою статистичного аналізу зразкових даних.

Visio Enterprise Architect (я думаю) є відносно недавнім інструментом.


Приємно. Я дійсно шукав обидва способи аналізу схеми (діаграма ER та вибірковий аналіз даних). Чи знаєте ви про інше програмне забезпечення, окрім Visio? У мене немає (поки) ліцензії на це.
ack__

1
Але ваші діаграми ER по суті є діаграмами об'єктної моделі. Це не зовсім те саме, що взяти існуючу базу даних і визначити, чи нормалізується вона з неї.
Кріс Траверс

2
Аналіз таблиць із зразковими даними та пропозиціями щодо нормалізації був особливістю Access, і в ранніх версіях, якщо я добре пам’ятаю.
ypercubeᵀᴹ

@Chris: так, я мав на увазі діаграми ER для семантичного аналізу.
ack__

@ypercube: Дякую за підказку, я погляну на Access.
ack__


2

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


Дійсно, буде зроблено певний огляд вручну, я не очікую, що інструмент може зробити це повністю автоматично. Але я впевнений, що більшу частину роботи можна автоматизувати, проаналізувавши наявні дані в БД (принаймні, зразки цього) та / або ім'я / тип полів.
ack__

1
Як? Нормалізація визначається залежностями приєднання та функціональними залежностями. Функціональна залежність в основному легко визначається як: для кожного можливого значення суперкера в функціональній залежності існує рівно одне значення. Ви не можете потрапити туди, автоматизувавши огляд даних, тому що лише тому, що для вашого поточного набору є функціональна залежність, це не означає, що новий ключ відповідає. Це дуже схоже на старий розподіл кореляції проти причинного зв'язку. Ви не можете викликати функціональну залежність, спостерігаючи, що зараз знаходиться в базі даних.
Кріс Траверс

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

Можливо. Але візьмемо реальний приклад, який є досить пекельним реляційним дизайном: адреси. Як слід нормалізувати поштові адреси? Скільки таблиць слід запропонувати? Наскільки я розумію 3NF, вам потрібні таблиці для країн, штатів / провінцій та міст. Я не знаю, чи мають сенс розбивки поштового індексу / міста, але вони, мабуть, є. Але як ви аналізуєте наявні дані та визначаєте, що (місто, штат) -> країна? Як визначити, чи / якщо не поштові індекси глобально стосуються цих конструкцій?
Кріс Траверс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.