Online kurs: Osnovi relacionih baza podataka. Mašinski fakultet Univerziteta u Nišu. Nedelja 3, resurs 2: Tipovi podataka. Primarni i strani ključ. Kreiranje baze i tabela. Realizacija: Milan Trifunović. http://160.99.22.125:9000/courses/course-v1:MEF+OKBP+2018-19_S3/about
2. MySQL Community Edition
• Besplatna verzija najpopularnijeg sistema
otvorenog koda za upravljanje relacionim bazama
podataka
• Softver otvorenog koda podrazumeva postojanje
izvornog koda koji svaki korisnik može pregledati,
modifikovati i poboljšavati
• Nastao u Švedskoj, trenutno u vlasništvu kompanije
Oracle Corporation
• Radi u klijent/server okruženju
3. SQL (Structured Query Language)
• Strukturirani jezik upita
• Standardni (ISO/IEC standard) jezik sistema za
upravljanje relacionim bazama podataka
• ISO (International Organization for Standardization)
• IEC (International Electrotechnical Commission)
• Nastao 1974. godine u IBM-u
• 1987. godine standardizovan od strane ISO
• Trenutno je aktuelna verzija standarda iz 2016.
godine
5. Numerički tipovi podataka
• Celi brojevi
• TINYINT (od -128 do 127)
• SMALLINT (od -32768 do 32767)
• MEDIUMINT (od -8388608 do 8388607)
• INT ili INTEGER, BIGINT
• Približni numerički tipovi
• FLOAT[(M,D)] – Mali (jednostruka preciznost (do 7
decimalnih mesta)) broj sa pokretnim zarezom
• DOUBLE[(M,D)] – Normalan (dvostruka preciznost (do
15 decimalnih mesta)) broj sa pokretnim zarezom
• M – ukupan broj cifara, D – broj cifara iza decimalne
tačke
6. Numerički tipovi podataka
• Tačni numerički tipovi
• INTEGER i njegove varijante
• DECIMAL[(M[,D])] – Broj sa fiksnim zarezom, osnovna
izračunavanja (+, -, *, /) sa preciznošću od 65 cifara
• DECIMAL se obično koristi za rad sa novčanim
vrednostima
7. Tipovi podataka za datum i vreme
• DATE – Datum, 'YYYY-MM-DD'
• DATETIME – Kombinacija datuma i vremena,
'YYYY-MM-DD HH:MM:SS'
• TIME – Vreme, 'HH:MM:SS'
• YEAR[(2|4)] – Godina kao dvocifreni ili
četvorocifreni broj
8. Tekstualni tipovi podataka
• CHAR(M)
• String (niz karaktera) fiksne dužine, brže učitavanje
• Prilikom smeštanja se dodaju space karakteri sve do
specificirane dužine
• M – dužina, do 255 karaktera
• VARCHAR(M)
• String promenljive dužine
• M – maksimalna dužina, do 65535 karaktera
• TINYTEXT, TEXT[(M)], MEDIUMTEXT, LONGTEXT
• Slično kao VARCHAR, nije moguće definisati
podrazumevanu vrednost za kolonu
9. Izbor tipa podataka
• Tekstualni tipovi dozvoljavaju unos slova, brojeva i
specijalnih karaktera
• Numeričke tipove podataka dodeljivati samo u
slučajevima kada se očekuje obrada podataka iz
kolone (vršenje izračunavanja)
• Plata (MEDIUMINT), Cena (Decimal(8,2)),
Ocena (TINYINT), …
• Broj telefona (VARCHAR), JMBG (CHAR(13)),
Broj indeksa (VARCHAR), …
• Kolonama u koje se smeštaju datum i/ili vreme
uvek dodeljivati odgovarajuće tipove podataka za
datum i vreme
10. Ostali atributi
• Kolona se može deklarisati kao NOT NULL (u istu se
mora upisati podatak prilikom dodavanja novog
reda) ili NULL
• NULL vrednost znači „nema podatka“
• Ako se ne navede ništa, pretpostavlja se da je NULL
atribut specificiran
• AUTO_INCREMENT
• Za kolone sa celobrojnim tipom podataka
• Prilikom dodavanja novog reda vrednost u koloni se
podešava na sledeću vrednost u nizu
• DEFAULT – Podrazumevana vrednost za kolonu
11. Primarni ključ
• Primarni ključ (PRIMARY KEY) – Kolona na osnovu
čijih vrednosti se može jednoznačno identifikovati
bilo koji red u tabeli
• Vrednosti u koloni moraju biti različite i ista je
deklarisana kao NOT NULL
• Prirodni (broj indeksa, JMBG, …) i veštački (id)
12. Strani ključ
• Strani ključ (FOREIGN KEY) – Kolona iz jedne tabele
(sekundarna tabela ili dete tabela) čije vrednosti
moraju da se „slažu“ sa, odnosno da odgovaraju,
vrednostima primarnog ključa u nekoj drugoj tabeli
(primarna tabela ili roditelj tabela)
13. Ustaljena praksa prilikom kreiranja
baze podataka
• Maksimalan broj karaktera za nazive baza podataka,
tabela, kolona i indeksa je 64 (nije isti za sve
sisteme)
• Reći što više sa što manje karaktera
• Nazivi ne treba da sadrže navodnike
• Nazivi ne treba da se završavaju space karakterom
• Nazivi baza podataka i tabela ne mogu sadržati
karaktere / . ili karaktere koji nisu dozvoljeni u
operativnom sistemu Windows prilikom davanja
naziva folderima i fajlovima
14. Ustaljena praksa prilikom kreiranja
baze podataka
• Nazivi baza i tabela nisu osetljivi na velika i mala
slova
• Prilikom kreiranja i referenciranja baza i tabela
treba koristiti nazive sa malim slovima
• Kod rezervisanih reči SQL-a ne pravi se razlika
između malih i velikih slova
• Rezervisane reči treba pisati velikim slovima
15. Ustaljena praksa prilikom kreiranja
baze podataka
• CHARACTER SET atribut specificira skup karaktera
koji se koristi
• Skup karaktera je skup simbola i šifriranja
• Za naše karaktere treba koristiti UTF-8
• COLLATE atribut specificira uparivanje za taj skup
karaktera
• Uparivanje je skup pravila za poređenje karaktera u
skupu karaktera
16. Opis sintakse
• Uglaste zagrade ([]) ukazuju na opcione reči ili klauzule
• Alternative su razdvojene vertikalnim linijama (|)
• Kada jedna od alternativa može biti izabrana, iste su
smeštene unutar uglastih zagrada
• Kada jedna od alternativa mora biti izabrana, iste su
smeštene unutar vitičastih zagrada ({})
• (...) ukazuje na izostavljanje dela iskaza, sa namerom
da se prosledi kraća verzija kompleksnije sintakse
• (...) takođe ukazuje da se prethodni element sintakse
iskaza može ponavljati
18. Kreiranje baze podataka
• CREATE DATABASE db_name;
• CREATE DATABASE poslovanje;
• SHOW DATABASES;
• U nazivima baza i tabela ne treba koristiti
• Srpske karaktere
• Razmake (space karaktere), ako se želi efekat razmaka
treba koristiti donju crtu (_)
19. Biranje i brisanje baze podataka
• USE db_name;
• Baza sa datim nazivom će se koristiti kao
podrazumevana (tekuća) baza za iskaze koji slede
• USE poslovanje;
• DROP DATABASE db_name;
• Briše sve tabele u bazi podataka sa datim nazivom i
nakon toga briše i samu bazu podataka
20. Mašine za skladištenje i tipovi
tabela
• 11 mašina za skladištenje koje rade kao
manipulatori za različite tipove tabela
• MyISAM upravlja netransakcionim tabelama
• Visoka brzina smeštanja i preuzimanja podataka
• InnoDB radi sa transakcionim tabelama i ima
mogućnosti izvršavanja, rollback-a i oporavka
prilikom havarije
• Podrazumevana mašina za skladištenje
• Radi zaključavanje na nivou redova prilikom transakcija
• Maksimum performansi kada obrađuje velike količine
podataka
• Podržava spoljne (strane) ključeve
22. Indeksi
• Indeksiraju se kolone
• Indeksi se koriste da bi se brzo pronašli redovi sa
određenom vrednošću u koloni
• Pravljenje indeksa usporava unošenje podataka.
Indeksirane kolone treba koristiti samo onda kada
su stvarno neophodne.
• KEY (ključ) je normalno sinonim za INDEX (indeks)
• UNIQUE (jedinstveni) indeks kreira ograničenje
takvo da sve vrednosti u indeksu (odnosno koloni
koja je indeksirana) moraju biti različite
23. Kreiranje tabele
CREATE TABLE firma (
id TINYINT(3) UNSIGNED NOT NULL,
naziv VARCHAR(100) NOT NULL,
mesto VARCHAR(50),
adresa VARCHAR(50),
telefon VARCHAR(20),
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
24. Kreiranje tabele koja sadrži strani
ključ
CREATE TABLE faktura (
id SMALLINT(5) UNSIGNED NOT NULL,
id_firme TINYINT(3) UNSIGNED NOT NULL,
datum DATE NOT NULL,
ulaz_izlaz CHAR(1) NOT NULL,
PRIMARY KEY (id),
KEY k_id_firme (id_firme),
CONSTRAINT fk_faktura_firma FOREIGN KEY (id_firme)
REFERENCES firma (id) ON DELETE CASCADE ON UPDATE
CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
25. Kreiranje baze i tabela – Vežba
• Kreirati bazu podataka nastava i učiniti je tekućom
• Kreirati tabele profesor i predmet
• Definisati nazive kolona tabela i tipove podataka za iste
• Definisati primarne ključeve tabela
• Predavanja iz jednog predmeta drži samo jedan profesor.
Jedan profesor može držati predavanja iz više predmeta.
• Tabela predmet sadrži strani ključ
26. Izmena strukture tabele i brisanje
iste
• ALTER TABLE faktura
ADD COLUMN primio VARCHAR(50);
• ALTER TABLE faktura
DROP COLUMN primio;
• ALTER TABLE stavke_fakture
MODIFY COLUMN kolicina DECIMAL(6,2);
• ALTER TABLE stavke_fakture
CHANGE COLUMN dan_cena cena DECIMAL(10,2);
• DROP TABLE tbl_name;