DDL-naredbe

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 34

DDL naredbe

ZADACI
Kreiranje Tabela
• Imena tabela i imena kolona moraju da počinju
slovom i da budu maksimalno 128 karaktera
• Imena moraju da sadrže samo A-Z, a-z, 0-9, _, $, #
karaktere
• Jedan korisnik ne može da ima dva objekta sa istim
imenom
• Imena ne smeju biti rezervisane reči kao DEFAULT,
INDEX, TABLE, NUMBER itd
• Možete kreirati tabele ukoliko imate
CREATE TABLE privilegiju
• Generalna sintaksa:

CREATE TABLE [schema.]tabela


(kolona tip [DEFAULT izraz]
Sintaksa [,...]);

• Primer:
CREATE TABLE lokacija
(id int,
ime varchar(20));
SQL server
tipovi
Šema
• Šema je skup objekata koji imaju isto ime kao i korisnik
• Objekti šeme uključuju tabele, poglede, sekvence, sinonime,
procedure
CREATE SCHEMA svi_zaposleni;
• Primer: Kao korisnik user1 pristupate tabelama korisnika user2
SELECT *
FROM user_2.zaposleni;
• Ukoliko pokušate da kreirate tabelu sa istim imenom, dobijate
poruku o grešci
CREATE TABLE lokacija
....
Msg 2714, Level 16, State 6, Line 1
There is already an object named 'location' in the database.
DEFAULT opcija
• Default je vrednost koja se upiše u kolonu ukoliko
korisnik ne odredi vrednost prilikom INSERT iskaza
• DEFAULT vrednost može da bude literal, izraz, SQL
funkcija kao getdate() ('YYYY-MM-DD
hh:mm:ss.mmm’) ali ne i ime druge kolone
• DEFAULT vrednost se definiše prilikom kreiranja tabele
CREATE TABLE narudzbine
(id int,
klijent_id int,
nar_datum datetime DEFAULT getdate(),
slanje_datum datetime,
total decimal(7,2),
vrsta_plac varchar(20) DEFAULT ‘KES');
Kreiranje tabele-još pravila

• Nije moguće da se uradi rollback posle kreiranja


tabele, zato što CREATE TABLE izaziva implicitni
COMMIT
• Morate da uradite DROP tabele da bi je izbrisali
• Table su automatski kreirane u korisnikovoj šemi
ukoliko ne definišete ime druge šeme
• Tabele nisu automatski dostupne svim korisnicima
• Potrebno je da se eksplicitno dodele privilegije
koristeći GRANT komandu
Alter Table

• Modifikuje strukturu tabele dodavanjem kolone,


uklanjanjem kolone ili izmenom definicije postojeće
kolone
• Dodavanje kolone:
ALTER TABLE tabela
ADD kol tip[DEFAULT izraz] [, kol tip]...;
• Primer:
ALTER TABLE narudzbine
ADD info text;
• Kolona se dodaje na kraj
• Ukoliko tabela već poseduje podatke, novoj koloni se
inicijalno dodeljuju null vrednosti za sve redove
Alter Table

• Moguće je promeniti tip podatka, veličinu kolone


• Modifikacija kolone:
ALTER TABLE tabela
ALTER COLUMN kol tip [, kol tip]...;
• Primer:
• Izmena tipa
ALTER TABLE narudzbine
ALTER COLUMN info varchar(150);
Alter Table

ALTER TABLE narudzbine


ALTER COLUMN info varchar(150);

• Moguće je povećati širinu ili preciznost numeričkih podataka ili


širinu karakternih podataka
• Moguće je smanjiti širinu kolone samo ukoliko sadrži null
vrednosti ili tabela nema nijedan red
Brisanje kolone

ALTER TABLE tabela


DROP COLUMN kol;

• Primer:
ALTER TABLE narudzbine
DROP COLUMN info;
Brisanje tabele

• DROP TABLE iskaz uklanja podatke i definiciju tabele iz


baze podataka
• Kada izvršite iskaz DROP TABLE sledeće operacije se
izvrše:
➢Izbrišu se podaci i struktura tabele
➢Uradi se commit svih nezavršenih transakcija
➢Uklone se svi indeksi povezani sa tabelom
• Nije moguće uraditi rollback posle DROP TABLE zato što
se izvrši implicitni commit
Kreiranje ograničenja (constraints)

• Ograničenja mogu da se definišu kada se kreira tabela


• Ograničenja mogu biti definisana ili na nivou tabele ili
kolone
• Generalna sintaksa:
CREATE TABLE [šema.]tabela(
kol1 tip [DEFAULT izraz] [kol1_ograničenje], ....
[tabela_ograničenje] [,....]
);
Ograničenja na nivou kolone i
tabele

• Na nivou kolone: odnosi se na jednu kolonu i


definiše se unutar specifikacije te kolone
kolona,…, [CONSTRAINT ime_ograničenja]
tip_ograničenja,…
• Na nivou tabele: odnosi se na jednu ili više kolona i
definiše se odvojeno od definicije kolona u tabeli
kolona,...
[CONSTRAINT ime_ograničenja] tip_ograničenja
(kolona,...),
PRIMARY KEY ograničenje

• Jedinstveno identifikuje red u tabeli


• Može se definisati na nivou kolone i na nivou tabele

CREATE TABLE odeljenja


(odelj_id int,
naziv varchar(30) NOT NULL, ...
CONSTRAINT odelj_id_pk PRIMARY KEY (odelj_id));
NOT NULL ograničenje

• Definiše se samo na nivou kolone

CREATE TABLE Zaposleni


(zap_id int,
ime varchar(20), ....
posao varchar(20) NOT NULL, ...);

• Ukoliko ne dodelite ime ograničenju, server ga automatski


kreira
UNIQUE ograničenje

• Definiše se ili na nivou tabele ili na nivou kolone

CREATE TABLE projekat


(proj_id int,
proj_ime varchar(30), ...,
CONSTRAINT ime_uk UNIQUE (proj_ime));
FOREIGN KEY ograničenje

• Moguće je definisati ga ili na nivou tabele ili na nivou kolone


• Ključne reči povezane sa ovim ograničenjem su:
• FOREIGN KEY: Definiše kolonu u dete tabeli kada se definiše na
nivou tabele. Ova ključna reč se ne koristi kada se definiše
ograničenje na nivou reda.
• REFERENCES: Identifikuje tabelu roditelja i njegovu PRIMARY ili
UNIQUE KEY kolonu
• ON DELETE CASCADE: Specifikuje da zavisan red u dete tabeli
mora da se izbriše ukoliko se odgovarajući red u roditeljskoj tabeli
izbriše
• ON DELETE NULL: Konvertuje FOREIGN KEY vrednosti u null kada
se vrednost roditeljskog ključa izbriše
FOREIGN KEY ograničenje

CREATE TABLE Zaposleni


(zap_id int PRIMARY KEY, ....
odelj_id int,
CONSTRAINT odelj_id_fk FOREIGN KEY
(odelj_id)REFERENCES Odeljenje (odelj_id)
ON DELETE CASCADE);
CHECK ograničenje

• Definiše uslov koji svaki red mora da zadovolji


• Moguće je imati više CHECK ograničenja za kolonu
CREATE TABLE Zaposleni
(zap_id int,
ime varchar(30), ...
plata money,
CONSTRAINT plata_chk CHECK (plata >= 500),
...);
• Moguće je definisati CHECK ograničenje ili na nivou kolone ili na
nivou tabele
CREATE TABLE Zaposleni
(zap_id int PRIMARY KEY,
ime varchar(20) NOT NULL,
Kompletan prezime varchar(30),

primer posao varchar(20) NOT NULL,


plata money,
mgr_id int,
premija real,
dat_zap datetime DEFAULT
getdate(),
odelj_id int CONSTRAINT
odelj_fk REFERENCES
odeljenje(odelj_id),
CONSTRAINT plata_chk CHECK
(plata >= 500));
ALTER TABLE...ADD CONSTRAINT

• Moguće je dodati ograničenje u postojeću tabelu


ALTER TABLE Zaposleni
ADD CONSTRAINT mgr_fk FOREIGN KEY (mgr_id)
REFERENCES Zaposleni(zap_id);
• Sva ograničenja kreirana na ovaj način se kreiraju na nivou tabele
• Kao posledica, nije moguće dodeliti NOT NULL ograničenje na ovaj
način
• Moguće ga je dodeliti uz pomoć ALTER TABLE ALTER COLUMN iskaza

ALTER TABLE Odeljenje


ALTER COLUMN naziv varchar(30) NOT NULL;
DISABLE ili ENABLE ograničenja

ALTER TABLE employee


NOCHECK CONSTRAINT mgr_fk;

ALTER TABLE employee


CHECK CONSTRAINT mgr_fk;

• Ako onemogućite PRIMARY KEY ili UNIQUE ograničenje,


jedinstveni indeks se automatski briše
Uklanjanje ograničenja

• Koristi se DROP CONSTRAINT sa ALTER TABLE iskazom


• Primer:
ALTER TABLE Zaposleni
DROP CONSTRAINT mgr_fk;
Kreiranje indeksa

• Indeks je objekat baze podataka koji može da ubrza


dohvatanje redova
• Indeks daje direktan i brzi pristup redovima tabele
• Kada nema indeksa u tabeli, cela tabela se pretražuje
• DBMS automatski koristi i održava indekse
• Indeks smanjuje zahtev za disk I/O korišćenjem indeksovane
putanje
• Indeksi se kreiraju automatski ili manuelno
• Unique indeks se automatski kreira kada kreirate PRIMARY
KEY ili UNIQUE kolonu
Kreiranje indeksa

• Manuelno kreiranje indeksa - sintaksa:


CREATE INDEX ime_ind
ON tabela (kol1 [, kol2]...);
• Primer:
CREATE INDEX odelj_id_idx
ON Zaposleni (odelj_id);
• Kreiranje indeksa je moguće ukoliko imate CREATE INDEX
privilegije
• Više indeksa ne znači brži pristup
• Svaki commit nad DML operacijama nad
tabelom zahteva ažuriranje indeksa
Performanse • Više indeksa, više napora DBMS-u da
i indeksi ažurira indekse
• Kreiranje indeksa treba da se zasniva na
sledećim uslovima:
➢Ukoliko kolona sadrži puno različitih
vrednosti
➢Ukoliko kolona sadrži puno null
vrednosti
➢Jedna ili više kolona se često koristi u
JOIN ili WHERE uslovu
➢Tabela je velika i većina upita dohvata
samo 2-4% redova
• Indekse ne treba kreirati kada:
Performanse ➢Tabela je mala
i indeksi ➢Kolona se ne koristi često u
uslovima iskaza
➢Tabela se često ažurira
• Kreiranje check ograničenja za telefonski broj:
CREATE TABLE contacts
(
l_name VARCHAR2(30),
p_number VARCHAR2(30)
CONSTRAINT p_number_format
CHECK ( REGEXP_LIKE ( p_number, '^\(\d{3}\) \d{3}-
\d{4}$' ) )

Primer );

-- first two statements use valid phone number format


INSERT INTO contacts (p_number)
VALUES( '(650) 555-5555' );
INSERT INTO contacts (p_number)
VALUES( '(215) 555-3427' );
-- remaining statements generate check contraint errors
INSERT INTO contacts (p_number)
VALUES( '650 555-5555' );
INSERT INTO contacts (p_number)
VALUES( '650 555 5555' );
INSERT INTO contacts (p_number)
VALUES( '650-555-5555' );
INSERT INTO contacts (p_number)
VALUES( '(650)555-5555' );
INSERT INTO contacts (p_number)
VALUES( ' (650) 555-5555' );
Pogledi

• Pogled je logička tabela zasnovana na drugoj tabeli ili


drugom pogledu
• Pogled nema svoje podatke
• Tabele na osnovu kojih se kreira pogled se zovu osnovne
tabele
• Pogled je smešten u formi SELECT iskaza
Korišćenje pogleda
• Prednosti korišćenja pogleda:
➢Ograničavanje pristupa podacima tako što selektivno prikazuje kolone
iz tabele
➢Kreiranje jednostavnih upite za dohvatanje rezultata komplikovanih
upita
➢Daje korisnicima pristup podacima na osnovu zahteva
• Postoji dve vrste pogleda:
➢Jednostavni pogledi: dohvataju podatke iz samo jedne tabele i ne
sadrže funkcije niti grupisanje
➢Kompleksni pogledi: dohvataju podatke iz više tabela ili sadrže funkcije
ili grupisanje
Kreiranje pogleda

CREATE [OR REPLACE] [FORCE | NO FORCE] VIEW ime


[(alias[, alias]...)]
AS podupit
[WITH CHECK OPTION [CONSTRAINT ime_ogranicenja]]
[WITH READ ONLY [CONSTRAINT ime_ogranicenja]];
Kreiranje jednostavnih pogleda

CREATE VIEW zap_vu (zapno, zime, godpl, odno) AS


SELECT zap_id, ime, plata * 12, odelj_id
FROM Zaposleni;

CREATE VIEW zap_vu (zapno, zime, godpl, odno) AS


SELECT zap_id, ime, plata * 12, odelj_id
FROM Zaposleni
WHERE odelj_id = 1001;

You might also like