Трећи нормални облик

Treci Normalni Oblik



Ово је трећи део серије, Пет нормалних форми. Наслови прва два дела (туторијала) су Фирст Нормал Форм, а затим Сецонд Нормал Форм. У овом делу серије објашњава се Трећи нормални облик.

Објашњење прати линију приче: Отац је умро и оставио нешто новца за свог сина. Син је одлучио да новац уложи у продавницу. Продавница, позната и као продавница, је мало малопродајно предузеће које прима свакодневне артикле од добављача и продаје их појединачним купцима у комшилуку.







У овом тренутку, продавница је већ напуњена, а неке продаје су већ обављене. Син, који је власник предузећа, има неке запослене, који се у овом водичу називају службеницима. Власник и сваки запослени могу да примају залихе и продају након снимања производа.



Међутим, пре него што је радња почела, ни власник ни запослени нису знали ништа о нормалним формама. Дакле, све су евидентирали као трансакције у једној табели и једној свесци. Нису имали компјутер.



Ви, читаоче, завршили сте пет делова ове серије туторијала; сада сте програмер базе података. Власник продавнице је ваш пријатељ. Посетили сте радњу пре два дана и обучили власника и службенике да направе сто у његовом првом нормалном облику. Такође сте јуче посетили радњу и обучили их како да од првог нормалног облика направе табелу у другом нормалном облику.





Данас сте управо стигли у радњу у посету да бисте их обучили како да направе сто у трећем нормалном облику од другог нормалног облика. Све табеле које тренутно имају су у другом нормалном облику. Табеле (по називу и насловима колона) су:

Производи (ИД производа, ИД категорије, производ)
Категорије (ИД категорије, категорија)



Продаја (ИД продаје, купац, запослени, датум)
СалеДетаилс (ИД продаје, ИД производа, бројПродато, продајна цена)

Поруџбине (ИД поруџбине, добављач, запослени, датум)
Детаљи поруџбине (ИД поруџбине, ИД производа, бројКупљено, цена цена)

Појединачни или композитни тастери су подвучени.

Након сумирања онога што је учено у претходна два дана и пре него што сте могли било шта да урадите, власник пита:

„Шта је са бројевима телефона, адресама итд. за купце и запослене?

Шта је са количином на залихама, нивоом поновног наручивања, итд., за производе?
Да ли су им потребне посебне табеле или их треба уградити у садашње табеле?'

Ви, програмер базе података, одговарате:

„Честитам, власнике! Индиректно сте увели питање трећег нормалног облика.”

Наставите.

Друге неопходне колоне

Остале потребне колоне се прво додају претходним табелама, које су у 1НФ и 2НФ. Неки од претходних назива колона су измењени.

Као минимум, табела Категорије треба да има следеће колоне:

Категорије (ИД категорије, Назив категорије, опис)

Опис је кратак пасус који описује категорију. Ова табела категорија је већ у 1НФ, 2НФ и 3НФ. 3НФ је објашњен у наставку:

Као минимум, табела производа треба да има следеће колоне:

Производи (ИД производа, ИД категорије, ИД добављача, Назив производа, цена јединице, количина на залихама, ниво поновне поруџбине)

Како се сваки производ продаје, низак ниво (број) производа ће се достићи када производ треба поново наручити, тако да купци не би требало да долазе у продавницу и немају производ. Такво одсуство није добро за посао. куантитиИнСтоцк је број одређеног производа на залихама. Ово укључује оно што је у продавници и оно што је на полици.

цатегориИД и супплиерИД су страни кључеви. Зато имају цртицу подвучену уместо једноструке. Спољни кључ је објашњен у наставку. У претходном делу серије (Други нормални облик), ИД категорије је био део примарног кључа са једном подвлачењем због начина на који је до њега дошло. Међутим, из објашњења у наставку, било би јасно да би ИД категорије требало да буде страни кључ (са подвученом цртом).

Ова табела производа је већ у 1НФ, 2НФ и 3НФ. Погледајте зашто је то у 3НФ у наставку:

Као минимум, табела СалеДетаилс треба да има следеће колоне:

СалеДетаилс (ИД продаје, ИД производа, јединична продајна цена, количина, попуст)

Очекује се да ће вредност попуста бити нула већину времена. Попуст је попуст који продавница даје купцу.

Као минимум, табела ОрдерДетаилс треба да има следеће колоне:

Детаљи поруџбине (ИД поруџбине, ИД производа, цена јединице, цена, количина, попуст)

Очекује се да ће вредност попуста бити нула већину времена. Попуст овде је попуст који добављач даје продавници.

Као што се види у наставку, табела производа може се сматрати у 2НФ или 3НФ. Табеле Салес анд Ордер имају проблем са 3НФ. За објашњење проблема и решења користиће се само табела продаје. 3НФ за табелу поруџбина и табелу производа прате слично размишљање и само би се цитирали.

Приликом додавања колона, табела Продаја би била:

Продаја (ИД продаје, датумПродато име купца, телефон, адреса, град, регион, поштански број, држава, запослени)

Седам колона је заменило колону купаца у оригиналној табели. Пошто су купци људи у комшилуку, ћелије за колоне за град, регион (државу), поштански број и државу могу да остану празне, иако у овом чланку нису остављене празне.

Ова табела продаје је још увек у 2НФ пошто ни 1НФ ни 2НФ правила нису прекршена. Међутим, треба имати на уму да је у реду табеле са продајом купац (име) замењен са седам ћелија реда купца.

Напомена: адресна ћелија садржи кућни број, назив улице или пута и назив града, све одвојено зарезима. За град се може сматрати да се састоји од неколико градова. Иако зарези раздвајају ове одређене компоненте низа, оне формирају једну вредност ћелије, а не три вредности ћелије.

Колона запослених такође мора бити замењена са седам таквих колона. Међутим, то није урађено у овом водичу да би се уштедели време и простор за подучавање. Дакле, табела продаје са подацима може бити:

Табела продаје – 2НФ – Без ИД-а купца

Колона типа података СалеИД је цео број или, боље, аутоматски инкремент. Тип података колоне датеСолд је датум, а не број јер има знак „/“, који није цифра. Тип података за остале колоне, укључујући колону телефона, је стринг (или текст). Вредност телефона има знак „-“, који није цифра.

Имајте на уму да је за сваки ред купац (име), као што је било у претходном делу серије, замењен са седам ћелија, од којих је једна и даље име купца. То значи да су подаци о клијентима ентитет. Тренутно, име клијента идентификује својих осталих шест података у низу. Ако је ова табела програмирана, биће згодно идентификовати ентитет клијента у сваком реду целим бројем (не аутоматским повећањем). У том случају колона цустомерИД треба да претходи имену купца. Претходна табела постаје:

Табела продаје – 2НФ – Са ИД-ом купца

Постоје три корисничка ИД-а: 1, 2 и 3, при чему се 1 појављује пет пута за Џона Смита, 2 два пута за Џејмса Тејлора и 3 пута за Сузан Рајт.

Имајте на уму да се неки кориснички ИД-ови и њихови зависни подаци понављају.

Правила за трећу нормалну форму

Табела је у трећем нормалном облику ако се придржава следећих правила:

  1. Већ би требало да буде у Другом нормалном облику.
  2. И не би требало да има транзитивну зависност.

Онда један од службеника (запослених) пита: „Шта је то транзитивна зависност?“. А ви, програмер базе података, одговарате: „То је добро питање!“

Транзитивна зависност

Истина је да у низу СалеИД идентификује све вредности у реду; међутим, цустомерИД идентификује својих седам вредности података, али не идентификује преостале вредности које идентификује СалеИД у том реду. Другим речима, СалеИД зависи од десет вредности ћелије у сваком реду. Међутим, цустомерИД зависи од седам вредности ћелије у истом реду, али цустомерИД не зависи од СалеИД-а и других вредности од којих зависи СалеИД.

Таква зависност за цустумерИД је транзитивна зависност. И цустомерИД се назива страни кључ и подвучен је цртом у овој серији туторијала, Пет нормалних облика.

Претпоставимо да не-приме атрибут (вредност не-примарне ћелије) зависи од других не-приме атрибута, а не-приме атрибут у питању (нпр. цустомерИД и његови зависници) не зависи од примарног кључа и остатка ћелије вредности у реду. Онда је то транзитивна зависност.

Претходна табела Салес са страним кључем и његовим зависним елементима би изазвала рачуноводствене проблеме (аномалије).

Табела продаје Од 2НФ до 3НФ

Да бисте решили проблем који представља страни кључ и његови зависни кључеви, уклоните страни кључ и његове зависне елементе, да бисте формирали нову табелу без понављања. Међутим, чак и ако страни кључ не зависи од примарног кључа, примарни кључ зависи од страног кључа. Дакле, копија страног кључа мора остати у надређеној табели. Нова продајна табела, у овом тренутку, усаглашена је са 1НФ, 2НФ и 3НФ; то је матична табела. Нова подређена табела из претходне табеле продаје је такође усклађена са 1НФ, 2НФ и 3НФ. Име подређене табеле са страним кључем и његовим зависним елементима је Купци. Ако није могуће пронаћи одговарајуће име, онда је нешто пошло наопако са анализом. Нова табела продаје у 3НФ је:

Коначна табела продаје у 3НФ

Ова табела у 3НФ има исти број редова као она у 2НФ, али са мање колона.

Ознака табеле за ову коначну табелу продаје у 3НФ је:

Продаја (ИД продаје, датум продаје, ИД купца, ИД запосленог)

СалеИД је примарни кључ са једном подвученом линијом. цустомерИД је страни кључ, са подвученом цртом. ЕмплоиееИД је такође страни кључ са подвученом цртом. Имајте на уму да је ситуација запослених у табели Продаја у 2НФ иста као и ситуација са купцима. ЕмплоиееИД и његови зависни чланови морају бити повучени да би се формирала друга табела; остаје копија службеног ИД-а.

Напомена: салеИД, цустомерИД и емплоиееИД не чине сложени кључ. салеИД зависи од ИД-а купца и ЕмплоиееИД-а.

Однос између салеИД и цустомерИД је више-према-један.

Табела купаца у 3НФ

Ова табела има три реда уместо 9 редова у табели продаје 2НФ. У овој табели, ИД купца је примарни кључ. Исти је као страни кључ у табели Салес, али без понављања. Спољни кључ у табели Продаја и примарни кључ у табели Купци повезују обе табеле.

Поновљени редови у табели купаца су уклоњени да се не би прекршили 1НФ.

Као што читалац може да види, стављање табеле у 3НФ би такође решило проблем поновљених редова (редундантност).

Ознака табеле за табелу купаца је:

Купци (ИД клијента, име купца, телефон, адреса, град, регион, поштански број, држава)

Прегледана табела производа

Горе наведена табела производа у форми нотације је:

Производи (ИД производа, ИД категорије, ИД добављача, Назив производа, цена јединице, количина на залихама, ниво поновне поруџбине)

Примарни кључ овде је ИД производа. цатегориИД и супплиерИД су страни кључеви. Слично табели Купци, постоји табела Цатегориес, где је ИД категорије примарни кључ, а постоји табела Супплиер, где је СупплиерИД примарни кључ.

Ако ће вредности за ћелије за унитПрице, куантитиИнСтоцк и реордерЛевел остати фиксне, онда је табела Продуцтс, таква каква јесте, заиста у 3НФ. Ако ће се ове вредности мењати, онда је табела производа, таква каква јесте, у 2НФ. У овом делу серије туторијала, претпоставља се да те вредности остају фиксне током времена.

Све таблице

Сви столови су сада у 3НФ. Они су приказани као:

Запослени (ИД запосленог, име, телефон, адреса, град, регион, поштански број, држава, датум рођења, датум запошљавања, датум објављивања)

Добављачи (ИД добављача, име, телефон, адреса, град, регион, поштански број, држава)

Производи (ИД производа, ИД категорије, ИД добављача, Назив производа, цена јединице, количина на залихама, ниво поновне поруџбине)
Категорије (ИД категорије, Назив категорије, опис)

Продаја (ИД продаје, датум продаје, ИД купца, ИД запосленог)
СалеДетаилс (ИД продаје, ИД производа, бројПродато, продајна цена)
Купци (ИД клијента, име купца, телефон, адреса, град, регион, поштански број, држава)

Поруџбине (ИД поруџбине, датум продаје, ИД добављача, ИД запосленог)
Детаљи поруџбине (ИД поруџбине, ИД производа, бројКупљено, цена цена)

До девет професионалних табела је направљено из само једне табеле коју су произвели почетници како би се спречили проблеми редундантности и рачуноводства (аномалије од уметања, брисања и ажурирања). Само почетнички сто би довео до финансијских губитака.

Тестирање особља

У овом тренутку, сви запослени, укључујући и власника, требало је да разумеју 1НФ, 2НФ и 3НФ. Међутим, они морају бити тестирани. Сви они, укључујући и власника, ће седети на различитим местима и завршити тест. Тест који се састоји од једног питања трајаће један сат, а гласи:

Питање: Користећи правила за 1НФ, 2НФ и 3НФ, докажите да је свих горе наведених девет табела већ у Првом нормалном облику, Другом нормалном облику и Трећем нормалном облику. Купци и добављачи не морају бити стварни субјекти. Подаци за табеле треба да резервишу нотације табеле.

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

Блиска и далека будућност

Док сте ви, програмер базе података, напољу, такође размислите који савет да им дате ако сви прођу тест.

Такође, док сте их обучавали, а сада када полажу тест, муштерије су долазиле и одлазиле без услужења. То није добро за посао, а ви, програмер базе података, то знате. Неки купци могу отићи у продавнице конкурената и више се никада не вратити.

Ви, програмер базе података, имате 30 година. Власник, као ваш пријатељ, такође има 30 година. Службеници (запослени) имају између 18 и 24 године. Све особине које су им биле потребне за рад код власника биле су: да су здрави, да знају читати и писати, да сабирају, одузимају, множе и деле. , и да могу да користе рачунар и Интернет.

Када је табела у 3НФ, већина рањивости је уклоњена из базе података. Многе комерцијалне базе података не прелазе 3НФ, а фирме или компаније су удобне.

Дакле, ако сви положе тест, замолићете службенике да оду и наставе да раде. Такође ћете им саветовати да сачувају делове својих плата како би могли да поседују своје продавнице. Сутра ћете наставити да обучавате само власника у 4НФ ​​и 5НФ. Са знањем 4НФ и 5НФ, све познате рањивости су уклоњене.

Евалуација

После једног сата, ви, програмер базе података, враћате се. Означите њихове скрипте. Одлична вест! Сви, укључујући и власника, имају по 100%. Ура! То је одлично!

Зато честитам свима вама: учитељици и ученицима.

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

Закључак

Табела је у првом нормалном облику, ако не крши ниједно од следећих правила:

  1. Све колоне у табели треба да имају јединствена имена заглавља.
  2. Свака ћелија мора имати само једну вредност.
  3. Вредности ускладиштене у колони треба да буду истог типа.
  4. Редови би требали бити различити.
  5. Редослед колона или редова није битан.

Табела је у другом нормалном облику, ако не крши ниједно од следећих правила:

  1. Табела већ мора бити у Првом нормалном облику.
  2. Не сме бити делимичне зависности.

Табела је у трећем нормалном облику, ако не крши ниједно од следећих правила:

  1. Мора већ бити у Другом нормалном облику.
  2. И не сме да има транзитивну зависност.

Ви, програмер базе података, кажете службеницима да су довољно научили. Дајете савете и тражите од њих да се врате на посао и по подразумеваној вредности остану на својим станицама.

Заказујете само састанак са власником, који ће се одржати сутра у његовој канцеларији за обуку о 4НФ и 5НФ.