Садржај
1.0 Базе: Увод у базе података
Шта су базе података?
Табеларна организација података
Повезане табеле
Базе и табеле - квиз
1.1 Базе: SQLite
SQLite и SQLite Studio
Креирање базе у SQLite Studio
SQLite и SQLite Studio - квиз
Креирање базе у SQLite Studio - задаци за вежбу
1.2 Базе: Дизајнирање базе података
База компаније за продају дигиталних композиција - подаци о композицијама
База компаније за продају дигиталних композиција - подаци о продаји
Дизајнирање базе података - квиз
2.0 - SQL: Читање података из базе
SQL: Читање података из табела
Читање података - квиз
2.1 SQL: Пројекција и селекција
Пројекција
Селекција
Пројекција и селекција - квиз
Пројекција и селекција - задаци (дневник)
2.2 SQL: Логички и релацијски оператори
Логички оператори
Релацијски оператори
Оператори - квиз
Оператори - задаци (дневник)
2.3 SQL: Изрази и функције - Додатно
Изрази
Функције
Изрази и функције - квиз
Изрази и функције - задаци (дневник)
2.4 SQL: Сортирање, уклањање дупликата, ограничавање броја врста
Сортирање
Ограничавање броја врста у резултату
Уклањање дупликата
Сортирање, уклањање дупликата, ограничавање одговора - квиз
Сортирање и ограничавање - задаци (дневник)
2.5 SQL: Агрегатне функције и груписање
Агрегатне функције
Груписање и израчунавање статистика појединачних група
Селекција након груписања
Агрегатне функције и груписање - квиз
Агрегатне функције и груписање - задаци (дневник)
2.6 SQL: Спајање табела
Спајање табела
Имплицитно спајање
Спајање и груписање
Врсте спајања
Спајање табела - квиз
Спајање - задаци (дневник)
2.7 SQL: Угнежђени упити
Угнежђени упити
Угнежђени упити - квиз
Угнежђени упити - задаци (дневник)
2.8 SQL: Сложенији угњеждени упити - Додатно
Корелисани подупити
Провера постојања
2.9 SQL: Погледи
Погледи
Погледи - квиз
Погледи - задаци (дневник)
3.0 SQL: Промена садржаја базе
Измене података у бази
3.1 SQL: Уписивање података у табеле
Уписивање података
Уписивање података прочитаних из базе
Уписивање података - квиз
3.2 SQL: Ажурирање података у табелама
Ажурирање података
Ажурирање података - квиз
3.3 SQL: Брисање података из табела
Брисање података
Брисање података - квиз

База компаније за продају дигиталних композиција – подаци о продаји

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

Спецификација

У компанији постоји неколико запослених особа. За сваког запосленог познати су следећи подаци:

  • име, презиме,

  • титула, тј. назив запослења,

  • датум рођења,

  • датум запослења,

  • адреса,

  • град,

  • држава/покрајина,

  • поштански кôд,

  • број телефона,

  • факс и

  • мејл.

Запослени имају свог надређеног и на тај начин су организовани у хијерархијску, дрволику структуру.

Чува се листа свих купаца. За сваког купца су познати следећи подаци:

  • име, презиме,

  • компанија у чије име купује (ако не купује сам за себе),

  • адреса,

  • град,

  • држава/покрајина,

  • поштански кôд,

  • телефон,

  • факс и

  • мејл.

За купца може бити задужен неко од запослених (он му пружа комплетну корисничику подршку).

Корисници врше наруџбине и у склопу сваке наруџбине могу да наруче и више композиција. За сваку наруџбину познати су следећи подаци:

  • датум наруџбине,

  • адреса наплате,

  • град наплате,

  • поштански кôд наплате,

  • држава/покрајина наплате и

  • укупна цена наруџбине.

За сваку наруџбину познат је и списак свих композиција на тој наруџбини.

Превођење спецификације у табеле

Јасно препознајмо врсту ентитета: запослени, купац и наруџбеница. Све ове врсте ентитета ћемо представити табелама. Свакој од њих ћемо, поред атрибута који тај ентитет природно описују, да придружимо по један вештачки целобројни примарни кључ, односно id. Тиме добијамо почетну листу табела и њихових колона (коју ћемо успут дорађивати).

  • Табела zaposleni ће да садржи следеће колоне:
    • id_zaposleni као примарни кључ,

    • ime, име запосленог,

    • prezime, презиме запосленог,

    • pozicija, титула тј. назив запослења,

    • datum_rodjenja, датум рођења,

    • datum_zaposlenja, датум запослења,

    • adresa, адреса,

    • grad, град,

    • drzava, земља и

    • mejl, мејл адреса.

  • Табела kupac ће да садржи следеће колоне:
    • id_kupac као примарни кључ,

    • ime, име купца,

    • prezime, презиме купца,

    • kompanija, компанија у чије име купује (ако не купује сам за себе),

    • adresa, адреса купца,

    • grad, град,

    • drzava, држава и

    • mejl, мејл адреса.

  • Табела narudzbenica ће да садржи следеће колоне:
    • id_narudzbenica као примарни кључ,

    • datum, датум наруџбине,

    • ukupan_iznos, укупан износ наруџбине.

Сваки запослени има нула или једног надређеног, а може бити надређени за нула или више запослених. Дакле, постоји веза један-према-више од ентитета запослени до њега самог, међутим, та веза није ни по чему значајном различита од веза између два различита ентитета. Ову везу можемо реализовати додавањем колоне id_nadredjeni у табелу zaposleni којој се чува примарни кључ запосленог (који може бити и NULL). Та колона је уједно страни кључ у односу на табелу запослених.

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

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

На крају, свака наруџбеница садржи нула или више композиција, док се свака композиција може налазити на нула или више наруџбеница. Ову везу типа више-према-више морамо реализовати креирањем посебне табеле stavka_narudzbenice.

  • Табела stavka_narudzbenice ће да садржи следеће колоне:
    • id_kompozicija, примарни кључ композиције,

    • id_narudzbenica, примарни кључ наруџбенице,

    • kolicina, број тих композиција које се наручују и

    • cena, јединична цена те композиције у склопу те наруџбине (она може бити и различита у односу на тренутну јединичну цену те композиције).

Дизајн базе до којег смо дошли може да се прикаже и следећим дијаграмом:

Дијаграм базе

SQL дефиниције којима се креирају све наведене табеле и подешавају сви наведени услови интегритета (примарни и страни кључеви, недостајуће вредности) су следеће:

CREATE TABLE zaposleni (
   id_zaposleni     INTEGER     PRIMARY KEY AUTOINCREMENT
                                NOT NULL,
   prezime          VARCHAR (20) NOT NULL,
   ime              VARCHAR (20) NOT NULL,
   naziv            VARCHAR (30),
   id_nadredjeni    INTEGER,
   datum_rodjenja   DATETIME,
   datum_zaposlenja DATETIME,
   adresa           VARCHAR (70),
   grad             VARCHAR (40),
   drzava           VARCHAR (40),
   mejl             VARCHAR (60),
   FOREIGN KEY (id_nadredjeni)
   REFERENCES zaposleni (id_zaposleni) ON DELETE RESTRICT
                                       ON UPDATE RESTRICT
);

CREATE TABLE kupac (
    id_kupac     INTEGER       PRIMARY KEY AUTOINCREMENT
                               NOT NULL,
    ime          VARCHAR (40) NOT NULL,
    prezime      VARCHAR (20) NOT NULL,
    kompanija    VARCHAR (80),
    adresa       VARCHAR (70),
    grad         VARCHAR (40),
    drzava       VARCHAR (40),
    mejl         VARCHAR (60) NOT NULL,
    id_zaposleni INTEGER,
    FOREIGN KEY (id_zaposleni)
    REFERENCES zaposleni (id_zaposleni) ON DELETE RESTRICT
                                        ON UPDATE RESTRICT
);


CREATE TABLE narudzbenica (
    id_narudzbenica       INTEGER     PRIMARY KEY AUTOINCREMENT
                                      NOT NULL,
    id_kupac              INTEGER         NOT NULL,
    datum                 DATETIME        NOT NULL,
    ukupan_iznos          NUMERIC (10, 2) NOT NULL,
    FOREIGN KEY (id_kupac)
    REFERENCES kupac ON DELETE RESTRICT
                     ON UPDATE RESTRICT
);

CREATE TABLE stavka_narudzbenice (
    id_stavka       INTEGER         PRIMARY KEY AUTOINCREMENT
                                    NOT NULL,
    id_narudzbenica INTEGER         NOT NULL,
    id_kompozicija  INTEGER         NOT NULL,
    cena            NUMERIC (10, 2) NOT NULL,
    kolicina        INTEGER         NOT NULL,
    FOREIGN KEY (id_narudzbenica)
            REFERENCES invoice ON DELETE NO ACTION
                               ON UPDATE NO ACTION,
    FOREIGN KEY (id_kompozicija)
            REFERENCES kompozicija ON DELETE NO ACTION
                                   ON UPDATE NO ACTION
);

Преузимање попуњене базе

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

Након избора команде менија Database Add a database одабери постојећи фајл на диску. Након избора фајла, назив под којим ће се та база видети у нашем систему ће се попунити сам.

Креирање нове базе у систему SQLite Studio
Претходна лекција
Следећа лекција
A- A+
Тема
Темa

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.