Поставяне на база данни в трета нормална форма (3NF)

Третият нормален формуляр (3NF) е принцип на база данни, който поддържа целостта на данните, като се основава на принципите за нормализиране на базата данни, осигурени от First Normal Form (1NF) и Second Normal Form (2NF).

Трети изисквания за нормална форма

Има две основни изисквания за базата данни да бъде в трета нормална форма:

За зависимостта от първичния ключ

Нека да проучим по-нататък какво имаме предвид от факта, че всички колони трябва да зависят от първичния ключ.

Ако стойността на колоната може да се изведе както от първичния ключ, така и от друга колона в таблицата, тя нарушава 3NF. Обмислете таблицата за служителите с тези колони:

И двете имена и FirstName зависят само от стойността на EmployeeID? Е, може ли LastName да зависи от FirstName? Не, защото нищо присъщо на LastName няма да предложи стойността на FirstName. Може ли FirstName да зависи от LastName? Не, защото същото е вярно: каквото и да е LastName, то не може да даде намек за стойността на FirstName. Ето защо тази таблица е съвместима с 3NF.

Но разгледайте тази таблица "Превозни средства":

Производителят и Моделът биха могли да извлекат от идентификатора на превозното средство, но Моделът може да се получи и от производителя, тъй като моделът на автомобила е направен само от конкретен производител. Този дизайн на таблицата не съответства на 3NF и следователно може да доведе до аномалии в данните. Например можете да актуализирате производителя без да актуализирате модела, като въведете неточности.

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

Таблица за превозни средства

В таблицата по-долу идентификационният номер на модела е чужд ключ в таблицата с модели :

Таблица на моделите

Тази нова таблица показва модели на производителите. Ако искате да актуализирате всяка информация за превозно средство, специфична за модела, ще го направите в тази таблица, а не в таблицата за превозни средства.

Получени полета в модела 3NF

Една таблица може да съдържа извлечено поле - това, което се изчислява въз основа на други колони в таблицата. Например, разгледайте тази таблица с поръчки на джаджи:

Общото количество нарушава съответствието с 3NF, тъй като може да бъде получено чрез умножаване на единичната цена с количеството, вместо да зависи изцяло от първичния ключ. Трябва да го премахнем от масата, за да се съобразим с третия нормален формуляр.

Всъщност, тъй като се получава, е по-добре да не се съхранява в базата данни изобщо.

Можем просто да го изчислим "в движение" при извършване на заявки за бази данни. Например може да сме използвали преди това тази заявка за извличане на номера на поръчки и суми:

SELECT OrderNumber, Общо FROM WidgetOrders

Вече можем да използваме следната заявка:

SELECT OrderNumber, UnitPrice * Количество AS Общо от WidgetOrders

за постигане на същите резултати, без да се нарушават правилата за нормализиране.