Ўвод базы дадзеных у трэцяй нармальнай форме (3NF)

Трэцяя нармальная форма (3NF) з'яўляецца прынцып базы дадзеных , якая падтрымлівае цэласнасць дадзеных на аснове выкарыстання прынцыпаў нармалізацыі баз дадзеных , прадстаўленых першай нармальнай форме (1НФ) і другі нармальнай форме (2НФ).

Трэцяя нармальная форма патрабаванні

Ёсць два асноўных патрабаванні для базы дадзеных, каб быць у трэцяй нармальнай форме:

Аб першасным ключы залежнай

Давайце разгледзім далей, што мы маем на ўвазе той факт, што ўсе слупкі павінны залежаць ад першаснай ключа.

Калі значэнне слупка можа быць атрымана як з першаснага ключа і іншы слупка ў табліцы, гэта парушае 3NF. Разгледзім табліцу Employees з гэтымі слупкамі:

У абодвух LastName і FirstName залежаць толькі ад велічыні EmployeeID? Ну, можа залежаць ад LastName FirstName? Няма, таму што нічога якая ўласціва LastName б прапанаваць значэнне FirstName. Можа FirstName залежаць ад LastName? Няма яшчэ раз, таму што тое ж самае дакладна: тое, што LastName можа быць, яна не можа не забяспечыць намёк на значэнне FirstName. Такім чынам, гэтая табліца 3NF адпавядае.

Але разгледзім гэтую табліцу Транспарт:

Вытворца і мадэль могуць вывесці з VehicleID - але мадэль таксама можа атрымаць ад вытворцы, так як мадэль транспартнага сродку вырабляецца толькі канкрэтным вытворцам. Гэтая канструкцыя стала не з'яўляецца 3NF падатлівай, і, такім чынам, можа прывесці да анамалія дадзеных. Напрыклад, вы можаце абнавіць вытворца без абнаўлення мадэлі, прадстаўляючы недакладнасці.

Для таго, каб зрабіць яго сумяшчальным, мы павінны былі б перанесьці дадатковы слупок залежнага ў іншую табліцу і спасылацца на яго з дапамогай вонкавага ключа. Гэта прывядзе да двух табліцах:

Транспартныя сродкі Табліца

У прыведзенай ніжэй табліцы, ModelID знешні ключ да табліцы Мадэлі:

мадэлі Табліца

Гэтая новая табліца адлюстроўвае мадэлі для вытворцаў. Калі вы хочаце абнавіць любую інфармацыю аб аўтамабілі, спецыфічнай для мадэлі, вы маглі б зрабіць гэта ў гэтай табліцы, а не ў табліцы транспартных сродкаў.

Вытворныя поля ў мадэлі 3NF

Табліца можа ўтрымліваць вытворнае поле - той, які вылічаецца на аснове іншых слупкоў у табліцы. Напрыклад, разгледзім наступную табліцу віджэтаў заказаў:

Агульнае выкананне перапынкаў 3NF, паколькі яна можа быць атрымана шляхам множання цэны адзінкі на колькасць, а не цалкам залежыць ад першаснага ключа. Мы павінны выдаліць яго з табліцы для выканання трэцяй нармальнай формы.

На самай справе, так як гэта адбываецца, то лепш не захоўваць у базе дадзеных на ўсіх.

Мы можам проста вылічыць яго "на ляту" пры выкананні запытаў да базе даных. Напрыклад, мы маглі б раней выкарыстоўвалі гэты запыт для атрымання нумары замовы і сумы:

ВЫБАР ORDERNUMBER, Агульная АД WidgetOrders

Цяпер мы можам выкарыстоўваць наступны запыт:

ВЫБРАЦЬ ORDERNUMBER, UnitPrice * Колькасць AS Усяго з WidgetOrders

для дасягнення тых жа вынікаў, не парушаючы правілы нармалізацыі.