Садржај
2.8 SQL: Сложенији угњеждени упити - Додатно
3.0 SQL: Промена садржаја базе
3.2 SQL: Ажурирање података у табелама
3.3 SQL: Брисање података из табела
6.0 Библиотека Flask - пројектни задатак

Табеларна организација података

Најраспрострањенији модел представљања података у базама је релациони модел, који подразумева да су сви подаци записани у табелама. Табеле имају своје ћелије, организоване у хоризонталне редове (врсте) и вертикалне колоне.

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

id

ime

prezime

pol

datum_rodjenja

razred

odeljenje

1

Петар

Петровић

м

2006-07-01

1

1

2

Милица

Јовановић

ж

2006-04-03

1

1

3

Лидија

Петровић

ж

2006-12-14

1

1

4

Петар

Миловановић

м

2005-12-08

2

1

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

Уобичајно је да се за назив табеле и називе колона користе слова енглеске абецеде, која ми још називамо и „шишана латиница“. У овим називима није препоручено да се користи размак, па се уместо размака појављује доња црта (_). Сам садржај табеле може да садржи текст писан словима енглеске абецеде, нашим латиничним или, као у претходном примеру, нашим ћириличним словима. Када се упознајемо са неком новом базом података, било би доста значајно да се на почетку упознамо и са тим како су у њој забележени подаци, тј. које писмо се користи, да бисмо на исправан начин могли да радимо са базом и претражујемо податке.

Примећујемо да су појединачни ученици смештени по редовима, док свака колона садржи неки посебан податак о ученицима:

  • прва колона id садржи редни број ученика у табели,

  • друга колона ime садржи име,

  • трећа колона prezime садржи презиме,

  • четврта колона pol садржи пол,

  • пета колона datum_rodjenja садржи датум рођења,

  • шеста колона razred садржи разред у који ученик иде и

  • седма колона odeljenje садржи одељење ком ученик припада.

Оваква организација је карактеристична за све табеле у базама података — по редовима се складиште посебне инстанце (јединке, објекти), док се по колонама складиште њихови атрибути (својства, карактеристике). Сама табела представља ентитет којим се описују све инстанце са заједничким својствима. На пример, ентитет ucenik описује све појединачне ученике, Петра Петровића, Милицу Јовановић, Лидију Петровић, Петра Миловановића и тако редом.

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

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

Станка Матковић

лако се издваја име као текст пре размака, и презиме као текст после размака

Уна Јована Вајић

прве две речи су име, а само једна реч је презиме

Теодор Вон Бург

друге две речи су презиме, а само једна реч је име

Примарни кључ

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

Уколико нам треба да знамо редни број реда, онда морамо да уведемо колону за редни број, као што смо то учинили у претходном примеру, и да онда ми сами (непосредно или кроз апликацију коју правимо) водимо рачуна о томе како ћемо уписивати редне бројеве.

Генерално нам у пракси за сваку табелу треба једна колона или група колона преко којих можемо једнозначно да одређујемо поједине редове у табели. Таква колона или група колона се назива примарни кључ те табеле.

Могло би се можда помислити да су у табели ученика име и презиме ученика такви подаци, међутим, то није случај, јер је сасвим могуће да два ученика чак и у истом одељењу имају исто име и презиме. Свака особа у Србији се једнозначно може идентификовати својим јединственим матичним бројем грађана и додавање ЈМБГ у нашу табелу ученика би нам омогућило њихово једнозначно идентификовање на основу ЈМБГ. Међутим, могуће је да не знамо ЈМБГ свих ученика или да не желимо да такве личне податке чувамо у нашој бази. Стога је у приказаној табели ученика уведена прва колона у којој се чува редни број ученика. Пошто ћемо ми сами (тј. наша апликација) да додељујемо редни број, водићемо рачуна да се не понавља, тако да може да се користи као јединствени идентификатор ученика у оквиру базе. На пример, када се помене „ученик број 4“, јасно је да се ради о Петру Миловановићу, мушког пола, који је рођен 8. децембра 2005. године и који иде у друго један одељење.

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

ISBN

naziv_udzbenika

978-86-17-17869-5

Основи програмирања – Програмски језик C#

978-86-17-18654-6

Рачунарство и информатика – за 3. разред гимназија

978-86-7991-383-8

Веб програмирање

978-86-17-19392-6

Рачунарство и информатика – за 4. разред гимназија

978-86-7991-411-8

Програмирање – класе и објекти

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

broj_banke

broj_racuna

iznos_plate

543

100001230099123

70000

543

100004588899812

56000

225

100001230099123

72000

225

200200200557711

56500

Некада су подаци који се намећу као примарни кључеви одређени националним или међународним стандардима. На пример, за идентификовање особа у Србији користи се ЈМБГ, док се у Америци користи тзв. SSN (social security number). За идентификовање места у САД користи се ZIP код. За идентификовање књига, као што смо видели, користи се међународни ISBN.

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

И пре појаве рачунара је постојала пракса да се приликом уписа у евиденцију додељује број под којим је нешто уписано. У папирним књигама у којима се воде евиденције често се налазе табеле у којима је једна од колона „број уписа“ или „редни број“.

Све у свему, два основна начина за избор примарног кључа су:

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

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

За разлику од коришћења постојећих података за примарне кључеве (ЈМБГ, SSN, ZIP код, ISBN), генерисани кључеви су тесно везани за нашу базу података и немају друго значење.

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

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

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

Зашто се овај модел зове релациони?

Релација у математици се дефинише као скуп уређених н-торки. На пример, релација „бити дељив“ на скупу {2, 3, 4, 5, 6} може да се представи као скуп уређених парова {(4, 2), (6, 2), (6, 3)}.

Када н-торке које чине релацију запишемо једну испод друге, добијамо табелу. Редовима табеле одговарају н-торке које су у релацији. Стога се у базама података термини табела и релација често користе као синоними.

дељеник

делилац

4

2

6

2

6

3

Јаку математичку основу савремених релационих база података поставио је Едгар Код (енгл. Edgar Codd) почетком 1970-их, кроз два формализма позната као релациона алгебра и релациони рачун.

Индекси и како функционишу?

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

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

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+