Трэцяя нармальная форма (3NF) з'яўляецца прынцып базы дадзеных , якая падтрымлівае цэласнасць дадзеных на аснове выкарыстання прынцыпаў нармалізацыі баз дадзеных , прадстаўленых першай нармальнай форме (1НФ) і другі нармальнай форме (2НФ).
Трэцяя нармальная форма патрабаванні
Ёсць два асноўных патрабаванні для базы дадзеных, каб быць у трэцяй нармальнай форме:
- База дадзеных павінна ўжо адказваць патрабаванням як 1NF і 2НФ .
- Усе слупкі базы дадзеных павінны залежаць ад першаснага ключа , а гэта азначае , што значэнне любога слупка можа быць атрымана толькі ад першаснага ключа.
Аб першасным ключы залежнай
Давайце разгледзім далей, што мы маем на ўвазе той факт, што ўсе слупкі павінны залежаць ад першаснай ключа.
Калі значэнне слупка можа быць атрымана як з першаснага ключа і іншы слупка ў табліцы, гэта парушае 3NF. Разгледзім табліцу Employees з гэтымі слупкамі:
- EmployeeID
- Імя
- Прозвішча
У абодвух LastName і FirstName залежаць толькі ад велічыні EmployeeID? Ну, можа залежаць ад LastName FirstName? Няма, таму што нічога якая ўласціва LastName б прапанаваць значэнне FirstName. Можа FirstName залежаць ад LastName? Няма яшчэ раз, таму што тое ж самае дакладна: тое, што LastName можа быць, яна не можа не забяспечыць намёк на значэнне FirstName. Такім чынам, гэтая табліца 3NF адпавядае.
Але разгледзім гэтую табліцу Транспарт:
- VehicleID
- вытворца
- мадэль
Вытворца і мадэль могуць вывесці з VehicleID - але мадэль таксама можа атрымаць ад вытворцы, так як мадэль транспартнага сродку вырабляецца толькі канкрэтным вытворцам. Гэтая канструкцыя стала не з'яўляецца 3NF падатлівай, і, такім чынам, можа прывесці да анамалія дадзеных. Напрыклад, вы можаце абнавіць вытворца без абнаўлення мадэлі, прадстаўляючы недакладнасці.
Для таго, каб зрабіць яго сумяшчальным, мы павінны былі б перанесьці дадатковы слупок залежнага ў іншую табліцу і спасылацца на яго з дапамогай вонкавага ключа. Гэта прывядзе да двух табліцах:
Транспартныя сродкі Табліца
У прыведзенай ніжэй табліцы, ModelID знешні ключ да табліцы Мадэлі:
- VehicleID
- вытворца
- ModelID
мадэлі Табліца
Гэтая новая табліца адлюстроўвае мадэлі для вытворцаў. Калі вы хочаце абнавіць любую інфармацыю аб аўтамабілі, спецыфічнай для мадэлі, вы маглі б зрабіць гэта ў гэтай табліцы, а не ў табліцы транспартных сродкаў.
- ModelID
- вытворца
- мадэль
Вытворныя поля ў мадэлі 3NF
Табліца можа ўтрымліваць вытворнае поле - той, які вылічаецца на аснове іншых слупкоў у табліцы. Напрыклад, разгледзім наступную табліцу віджэтаў заказаў:
- Нумар заказу
- Нумар кліента
- Цана за адзінку
- колькасць
- агульны
Агульнае выкананне перапынкаў 3NF, паколькі яна можа быць атрымана шляхам множання цэны адзінкі на колькасць, а не цалкам залежыць ад першаснага ключа. Мы павінны выдаліць яго з табліцы для выканання трэцяй нармальнай формы.
На самай справе, так як гэта адбываецца, то лепш не захоўваць у базе дадзеных на ўсіх.
Мы можам проста вылічыць яго "на ляту" пры выкананні запытаў да базе даных. Напрыклад, мы маглі б раней выкарыстоўвалі гэты запыт для атрымання нумары замовы і сумы:
ВЫБАР ORDERNUMBER, Агульная АД WidgetOrdersЦяпер мы можам выкарыстоўваць наступны запыт:
ВЫБРАЦЬ ORDERNUMBER, UnitPrice * Колькасць AS Усяго з WidgetOrdersдля дасягнення тых жа вынікаў, не парушаючы правілы нармалізацыі.