Садржај
Пример моделовања - факултет
Пример моделовања - продаја дигиталних композиција
Пројектни задатак - моделовање
Погледи
Пројектни задатак

Дизајн табела у бази података - ентитети и веза 1:M

Када имамо готов модел, пројекат на основу којег ћемо креирати базу података, потребан је још један корак пре него што приступимо самом систему за управљање базама података и кренемо са креирањем табела. Приликом тог корака јасно дефинишемо како ће изгледати табеле у бази са свим појединостима које су потребне да бисмо их успешно креирали и да би све прорадило.

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

Током овог корака долази до промене терминологије.

ЛОГИЧКИ МОДЕЛ, ЕРД

РЕЛАЦИОНА БАЗА ПОДАТАКА

Ентитет

Табела

Атрибут

Колона

Обавезан атрибут

Ограничење not null

Инстанца

Ред

Примарни јединствени идентификатор

Примарни кључ – primary key

Кандидат за примарни јединствени идентификатор

Колона са јединственим вредностима – unique

Веза

Страни кључ – foreign key

За сваки ентитет на моделу се креира једна табела у релационој бази података. Атрибути постају колоне те табеле. Називи колона не смеју да имају размаке, па свуда стављамо уместо размака доњу црту (_). Свака колона ће садржати податке истог типа. На пример, сви подаци у колони ime ће бити текстуалног типа, а сви подаци у колони godina_rodjenja ће бити бројеви.

Најчешће коришћени типови података:

  • INT – Цео број.

  • NUMERIC – Број који може да буде цео, а може да има децимале. Уколико се, на пример, наведе NUMERIC(5,2), то значи да ће број имати највише 5 цифара, од чега две децимале.

  • VARCHAR – Кратак текст. У загради може да се наведе број знакова, тако да је, на пример, VARCHAR(40) ознака за текстуални податак који има највише 40 знакова.

  • CHAR – Кратак текст фиксне дужине. У загради може да се наведе број знакова, тако да је, на пример, CHAR(13) ознака за текстуални податак који има тачно 13 знакова. Овај тип може да се користи за ЈМБГ. ЈМБГ ће се чувати као текст, а не као број, зато што би се водећа нула изгубила ако би се податак чувао као број.

  • DATE – Датум.

  • DATETIME – Датум и време.

Примарни јединствени идентификатор постаје примарни кључ: pkprimary key. Особина атрибута који су били кандидати за примарни јединствени идентификатор мора бити да су им вредности за сваку инстанцу ентитета јединствене. Колоне које њима одговарају имају ограничење јединствености: ukunique key.

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

Свака веза постаје додатна колона у једној од две повезане табеле са додатним ограничењем да је та колона страни кључ: fkforeign key.

Дизајн једне појединачне табеле подразумева да креирамо помоћну табелу у којој ћемо набројати све колоне, типове података и ограничења. Структура ове помоћне табеле на основу које ћемо креирати табелу у бази података одговара команди CREATE TABLE језика SQL. Овом командом се креира табела у релационој бази података. Језик SQL је специјализован језик за рад у бази података и биће касније детаљно обрађен. Овде се наводи само један пример команде овог језика да би се разумела структура помоћне табеле коју креирамо током процеса мапирања. Погледајмо пример ентитета AUTOR.

../_images/slika_231a.png

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

../_images/tabela_231a.png

Само илустративно, следи команда CREATE TABLE језика SQL којом се креира ова табела у релационој бази податакa.

CREATE TABLE autori
(id_autora INT PRIMARY KEY,
ime VARCHAR(20) NOT NULL,
prezime VARCHAR(20) NOT NULL,
godina_rodjenja INT,
drzava_rodjenja VARCHAR(30)
)

Уколико имамо два ентитета повезана везом 1:М у једну од њих се додаје додатна колона која је страни кључ. Страни кључ се додаје као колона у ону табелу која је на страни „више“. Погледајмо следећи пример. Један издавач је објавио више књига. Нема смисла уз податке о издавачу чувати шифре свих књига које је објавио. Како је једну књигу објавио један издавач, онда уз податке о књизи можемо да чувамо и податак о томе ко ју је објавио. Тај податак је идентификација, шифра издавача – id_izdavaca.

Напомена: Овај модел је исправан уколико се узме у обзир претпостaвка да су сви примерци исте књиге у библиотеци од истог издавача.

../_images/slika_231b.png

Следе помоћне табеле, односно дизајн будућих табела у бази података, за ове ентитете. Прво се креира табела која нема страни кључ, односно она која је на крају „један“ када посматрамо везу између ентитета.

../_images/tabela_231c.png ../_images/tabela_231b.png

Да се подсетимо, два правна лица не могу да имају исти назив, тако да вредности у колони naziv морају да буду јединствене и зато смо навели кључ uk. Такође, две издавачке куће сигурно неће имати исти веб-сајт.

Само информативно, следе одговарајуће CREATE TABLE команде. Уколико шифра, ID, има седам цифара, таквих бројева има 107, па је то број различитих вредности, тј. број могућих различитих редова у одговарајућој табели. Страни кључ, колона id_izdavaca, у табели knjige показује на примарни кључ, колону id_izdavaca, табеле izdavaci.

CREATE TABLE izdavaci
(id_izdavaca INT PRIMARY KEY,
naziv VARCHAR(20) NOT NULL UNIQUE,
grad VARCHAR(20) NOT NULL,
adresa VARCHAR(50),
veb_sajt VARCHAR(30) UNIQUE
)

CREATE TABLE knjige
(id_knjige INT PRIMARY KEY,
naziv VARCHAR(20) NOT NULL UNIQUE,
id_izdavaca INT NOT NULL REFERENCES izdavaci(id_izdavaca)
)

У релационој бази се ове две табеле приказују како је илустровано на следећој слици.

../_images/slika_231c.png

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

../_images/slika_231d.png

У овом примеру се примарни и страни кључ зову исто. То не мора да буде случај, па следи исти пример, само са различитим називима колона. Обрати пажњу на називе колона.

../_images/slika_231e.png

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

../_images/tabela_231e.png ../_images/tabela_231d.png

Само информативно, следе одговарајуће CREATE TABLE команде.

CREATE TABLE izdavaci
(id INT PRIMARY KEY,
naziv VARCHAR(20) NOT NULL UNIQUE,
grad VARCHAR(20) NOT NULL,
adresa VARCHAR(50),
veb_sajt VARCHAR(30) UNIQUE
)

CREATE TABLE knjige
(id INT PRIMARY KEY,
naziv VARCHAR(20) NOT NULL UNIQUE,
id_izdavaca INT NOT NULL REFERENCES izdavaci(id)
)
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+