Първата нормална форма (1NF) определя основните правила за организирана база данни:
- Премахнете дублиращите се колони от същата таблица.
- Създавайте отделни таблици за всяка група от свързани данни и идентифицирайте всеки ред с уникална колона (първичният ключ).
Какво означават тези правила при размисъл за практическото създаване на база данни? Всъщност е съвсем просто.
Премахване на дублирането
Първото правило диктува, че не трябва да дублираме данни в същия ред на таблица. В рамките на общността на базата данни тази концепция се нарича атомност на таблица. Таблиците, които отговарят на това правило, се смятат за атомни. Нека разгледаме този принцип с класически пример: таблица в база данни с човешки ресурси, която съхранява връзката мениджър-подчинен. За целите на нашия пример ще наложим бизнес правилото, че всеки мениджър може да има един или повече подчинени, а всеки подчинен може да има само един мениджър.
Интуитивно, когато създаваме списък или електронна таблица за проследяване на тази информация, можем да създадем таблица със следните полета:
- мениджър
- Subordinate1
- Subordinate2
- Subordinate3
- Subordinate4
Припомнете обаче първото правило, наложено от 1NF: Премахване на дублиращи се колони от същата таблица. Ясно е, че колоните "Подчинен1" "Подчинен" са дублиращи. Отделете малко време и размишлявайте върху проблемите, повдигнати от този сценарий. Ако един мениджър има само един подчинен, подменюто2-подчинен4 колони е просто губи пространство за съхранение (ценна стока база данни). Освен това представете си случая, в който мениджърът вече има 4 подчинени - какво ще стане, ако поеме друг служител? Цялата структура на таблицата ще изисква промяна.
В този момент втората ясна идея обикновено се появява при начинаещите в базата данни: Не искаме да имаме повече от една колона и искаме да позволим гъвкаво съхранение на данни. Нека да опитаме нещо подобно:
- мениджър
- Подчинените
Полето "Подчинени" ще съдържа няколко записа във формата "Мери, Бил, Джо".
Това решение е по-близо, но също така е недостатъчно за марката. Колоната на подчинените все още е дублираща и неатомна. Какво се случва, когато трябва да добавим или премахнем подчинен? Трябва да прочетем и напишем цялото съдържание на таблицата. Това не е голяма работа в тази ситуация, но какво ще стане, ако един мениджър има сто служители? Също така усложнява процеса на избиране на данни от базата данни в бъдещи заявки.
Ето таблица, която отговаря на първото правило за 1NF:
- мениджър
- подчинен
В този случай всеки подчинен има само един запис, но мениджърите могат да имат няколко записа.
Идентифицирайте основния ключ
Сега, какво ще кажете за второто правило: идентифицирайте всеки ред с уникална колона или набор от колони (първичният ключ). Можете да разгледате таблицата по-горе и да предложите използването на подчинената колона като първичен ключ. Всъщност, подчинената колона е добър кандидат за първичен ключ поради факта, че правилата ни за бизнес посочват, че всеки подчинен може да има само един мениджър. Данните, които сме избрали да съхраняваме в нашата таблица обаче, правят това по-малко от идеално решение. Какво ще стане, ако наемем друг служител на име Джим? Как да съхраняваме връзката мениджър-подчинена в базата данни?
Най-добре е да използвате истински уникален идентификатор (като идентификационен номер на служител) като основен ключ. Нашата финална маса ще изглежда така:
- ID на мениджъра
- Подчинен идентификационен номер
Сега нашата маса е в първата нормална форма! Освен това има опции за поставяне на Вашата база данни във втора нормална форма, както и в трета нормална форма, ако сте развълнувани от още повече организация.