Ставање на база на податоци во трета нормална форма (3NF)

Третата нормална форма (3NF) е принцип на базата на податоци кој го поддржува интегритетот на податоците преку градење принципи за нормализација на базата на податоци обезбедени од Прва нормална форма (1NF) и Second Normal Form (2NF).

Трети барања за нормален облик

Постојат две основни барања за база на податоци да биде во трета нормална форма:

За примарната клучна зависност

Ајде да истражиме понатаму она што го подразбираме со фактот дека сите колони мора да зависат од примарниот клуч.

Ако вредноста на колоната може да се изведе од примарниот клуч и од друга колона во табелата, таа ја прекршува 3NF. Размислете за Табела на Вработени со овие колони:

Дали BothNameName и FirstName зависат само од вредноста на EmployeeID? Па, дали LastName зависи од FirstName? Не, бидејќи ништо што е инхерентно во LastName би укажало на вредноста на FirstName. Може ли FirstName да зависи од LastName? Не повторно, бидејќи истиот е вистина: без оглед на LastName, тоа не можеше да даде знак за вредноста на FirstName. Затоа, оваа табела е компатибилна со 3NF.

Но,

Производителот и моделот може да произлезат од VehicleID - но Моделот исто така може да произлезе од Производителот, бидејќи моделот на возилото го прави само одреден производител. Овој дизајн на табели е не-3NF компатибилен и може да резултира со аномалии на податоци. На пример, може да го ажурирате производителот без да го ажурирате моделот, воведувајќи неточности.

За да биде усогласена, ние ќе треба да ја преместам дополнителната зависна колона во друга табела и да ја повикаме користејќи странски клуч. Ова ќе резултира со две табели:

Табела за возила

Во табелата подолу, ModelID е странски клуч за табелата Модели :

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

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

Изведени полиња во моделот 3NF

Табела може да содржи изведено поле - оној што се пресметува врз основа на други колони во табелата. На пример, разгледајте ја оваа табела на нарачки за графичка контрола:

Вкупниот прекинува усогласеност со 3NF, бидејќи може да се изведе со множење на единечната цена со количината, наместо да биде целосно зависна од примарниот клуч. Ние мораме да го отстраниме од табелата за да се усогласиме со третата нормална форма.

Всушност, бидејќи е изведено, подобро е да не се чува во базата на податоци на сите.

Ние едноставно можеме да го пресметаме "во лет" при извршување на барањето на базата. На пример, ние можеби претходно го користевме ова барање за да ги добиеме броевите на редот и да ги изнесуваме:

SELECT OrderNumber, Вкупно од WidgetOrders

Сега можеме да го користиме следното барање:

SELECT OrderNumber, UnitPrice * Quantity AS Вкупно од WidgetOrders

да ги постигнат истите резултати без да ги прекрши правилата за нормализација.