Sunteți pe pagina 1din 6

Baze podataka ::: 1/1

DDL (Data Definition Language)


• DDL je podskup SQL seta naredbi, koji služ i za definisanje fizičke strukture baze podataka.
• Pomoću DDL-a, u SQL server bazi mož emo praviti sve vrste objekata (baze podataka, tabele, poglede,
funkcije, uskladiš tene procedure, okidače itd.)
• Osnove rada sa CREATE komandom:
CREATE <object type> <object definition>

Kreiranje baze podataka


CREATE DATABASE database_name
[ ON
[ < filespec > [ ,...n ] ]
[ , < filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]

< filespec > ::=


[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ ,...n ]

(sa mrež e učitati SQL Server Help, koji se nalazi na PEGAZ-u: \\STUDENTI\STUDENT\BAZE\mssql Books
Online. Startovati fajl tsqlref.chm, i u indeksu pronaći sintaksu naredbe)
Svaki student kreira svoju bazu podataka, na sledeći način:
CREATE DATABASE prvoslovoimenaiprezime
USE prvoslovoimenaiprezime

Zatim ćemo pogledati statistiku vezanu za novokreiranu bazu podataka, koriš ćenjem uskladiš tene procedure
sp_helpdb:
exec sp_helpdb prvoslovoimenaiprezime

Ponovo pogledati u help-u da li postoji unos za sp_helpdb.

Kreiranje tabela
CREATE TABLE
[ database_name.[ owner ] . | owner. ] table_name
( { < column_definition >
| column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }
| [ { PRIMARY KEY | UNIQUE } [ ,...n ]
)

[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]

< column_definition > ::= { column_name data_type }


[ COLLATE < collation_name > ]
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ ROWGUIDCOL]
[ < column_constraint > ] [ ...n ]

< column_constraint > ::= [ CONSTRAINT constraint_name ]


{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
Baze podataka ::: 2/2

[ WITH FILLFACTOR = fillfactor ]


[ON {filegroup | DEFAULT} ] ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression )
}
< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ASC | DESC ] [ ,...n ] ) }
[ WITH FILLFACTOR = fillfactor ]
[ ON { filegroup | DEFAULT } ]
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}

Kreirati sledeće tabele:


AUTOR (ID, naziv_imepr, kontakt_tel)
IZDAO (ID, ID_albuma)
ALBUM (ID_albuma, naziv, format, pakovanje, godina, kolicina)

Krenućemo od tabele ALBUM:


CREATE TABLE Album (
ID_albuma numeric(18, 0) IDENTITY (1, 1) NOT NULL PRIMARY KEY,
naziv nvarchar(50) NOT NULL,
format_izd char(2) DEFAULT 'CD',
pakovanje nvarchar(10) NULL,
godina varchar(4) NOT NULL,
kolicina int NOT NULL)

Odmah mož emo proveriti š ta smo uradili, pokretanjem uskladiš tene sistemske procedure:
exec sp_help album

… ili Object Browser-om, sa leve strane Query Analyzer-a – nakon kreiranja tabele osvež iti prikaz u stablu tako š to
ćemo Object Browser dovesti u fokus, pa pritisnuti F5.
Kreiranje tabele AUTOR:
CREATE TABLE Autor (
ID numeric(18, 0) IDENTITY (1,1) NOT NULL PRIMARY KEY,
naziv_imepr nvarchar(30) NOT NULL,
kontakt_tel numeric (10, 0) NULL )

Na kraju tabela IZDAO:


CREATE TABLE Izdao (
ID numeric(18, 0) NOT NULL,
ID_albuma numeric(18, 0) NOT NULL,
CONSTRAINT PK_Izdao PRIMARY KEY
(
ID,
ID_albuma
)
)
Baze podataka ::: 3/3

Kreiranje objekta DEFAULT (MOŽ ETE PRESKOČITI!!!)


Podrazumevanu vrednost koju primenjujemo u tabelama mož emo kreirati i u obliku objekta, i kasnije primenjivati
viš e puta.
Sintaksa (pronaći u help-u):
CREATE DEFAULT default
AS constant_expression

Ako ž elimo da promenimo podrazumevanu vrednost tako š to ćemo najpre kreirati objekat DEFAULT pa ga
naknadno primeniti, to ćemo, na naš em primeru, uraditi ovako:
CREATE DEFAULT pakovanjedflt AS 'Kutija'

sp_bindefault pakovanjedflt, 'album.pakovanje'


(izvrš iti sp_help album)

Izmene strukture baze podataka


ALTER DATABASE
ALTER DATABASE database
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name
| REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
| MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}

Koristi se ređe nego sledeća naredba, ALTER TABLE, i služ i izmeni same baze podataka. Odnosi se pre svega na
neke fizičke aspekte skladiš tenja baze.

ALTER TABLE
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ ,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
}
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ] [ WITH VALUES ]
| [ IDENTITY [ (seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ < column_constraint > ] [ ...n ]
< column_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
Baze podataka ::: 4/4

[ WITH FILLFACTOR = fillfactor ]


[ ON { filegroup | DEFAULT } ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression )
}
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ,...n ] ) }
[ WITH FILLFACTOR = fillfactor ]
[ ON {filegroup | DEFAULT } ]
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| DEFAULT constant_expression
[ FOR column ] [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}

Kako bismo dodali novu kolonu? Pretpostavimo da nam je potrebna kolona ADRESA u tabeli AUTOR. Promenu
ćemo izvesti na sledeći način:
ALTER TABLE AUTOR
ADD Adresa nvarchar(30) NULL

Proverimo efekat naredbe (i kasnije proveravamo):


sp_help Autor

(Primetićemo da je duž ina kreiranog polja 60 umesto 30 – zbog prirode tipa podataka nvarchar. Taj tip podataka
skladiš ti UNICODE podatke koji zauzimaju po DVA bajta)
Pretpostavimo da sada ž elimo da ne dozvolimo NULL vrednosti u toj koloni, i da hoćemo da povećamo š irinu
kolone na 40 UNICODE karaktera:
ALTER TABLE AUTOR
ALTER COLUMN Adresa nvarchar(40) NOT NULL

Na kraju, izbriš imo tu kolonu:


ALTER TABLE AUTOR
DROP COLUMN Adresa

OGRANIČ ENJA (Constraints) se takođe mogu postaviti iz DDL-a. Ograničenja (restrikcije) obezbeđ uju da
vaši podaci ispunjavaju određ ena pravila vezana za integritet podataka.
Postoje TRI TIPA ograničenja:
• ograničenja entiteta (vezana su za redove, ne vode računa o kolonama nego o čitavim redovima. Tipičan
primer ovakvog ograničenja je ograničenje primarnog ključa koji je slož en – zabranjuje se ponavljanje
kombinacije kolona, a ne pojedinačne vrednosti. To je, dakle, ograničenje koje se definiš e nad REDOM.
Primer: naš a tabela IZDAO koja je na kraju imala definisano ograničenje entiteta)
• ograničenja domena (ograničavaju se vrednosti koje se mogu pojaviti u pojedinim kolonama (na primer,
količina nečega mora biti veća ili jednaka nuli, ocena studenta je od 6 do 10… )
• ograničenja referencijalnog integriteta (vrednost podatka u jednoj koloni zavisi od postojanja takve
vrednosti u drugoj koloni – u istoj ili (češ će) drugoj tabeli)
Baze podataka ::: 5/5

Metode za implementaciju ovih ograničenja na SQL serveru su različite. Izdvajamo:


• ograničenja tipa PRIMARY KEY,
• ograničenja tipa FOREIGN KEY,
• ograničenja tipa UNIQUE (poznata kao ALTERNATE KEY),
• ograničenja tipa CHECK,
• ograničenja tipa DEFAULT,
• pravila,
• podrazumevane vrednosti.

Primary key
Videli smo kako se putem DDL skripta implementira ograničenje primarnog ključa (PRIMARY KEY) prilikom
stvaranja tabele. Međutim, ako smo zaboravili da kreiramo primarni ključ ranije, mož emo to učiniti naknadno,
preko ALTER TABLE.
Hajde prvo da obriš emo primarni ključ u tabeli Autor. To ćemo učiniti komandom DROP CONSTRAINT. Da bismo
mogli da obriš emo ograničenje, moramo znati NJEGOVO IME, koje se dodeljuje automatski pri stvaranju
ograničenja. Uskladiš tenom procedurom sp_help mož emo videti ovo ime – poslednji set rezultata, druga kolona.
ALTER TABLE Autor
DROP CONSTRAINT PK__Autor__30F848ED (najpre sa sp_help pogledati tačan naziv PK-a, jer se
razlikuje od mašine do mašine!!!)

Ponovo ćemo dodati to ograničenje na sledeći način:


ALTER TABLE Autor
ADD CONSTRAINT PK_Autor PRIMARY KEY (ID)

Foreign key
Mož emo dodati ograničenja spoljnog ključa putem DDL skripta. Putem ovog ograničenja implementira se pravilo
referencijalnog integriteta. Pretpostavimo da ž elimo da povež emo tabele AUTOR i IZDAO, te IZDAO i ALBUM. To
ćemo učiniti sledećim iskazima (kombinovaćemo ON UPDATE i ON DELETE, čisto da bismo videli š ta je sve
moguće uraditi):
ALTER TABLE Izdao
ADD CONSTRAINT
FK_Izdao_Album FOREIGN KEY (ID_albuma) REFERENCES Album (ID_albuma)
ON UPDATE CASCADE
ON DELETE NO ACTION

ALTER TABLE Izdao


ADD CONSTRAINT
FK_Izdao_Autor FOREIGN KEY (ID) REFERENCES Autor (ID)
ON DELETE CASCADE

Unique
"Mlađi brat" ograničenja PRIMARY KEY – mož e biti definisano viš e ovih ograničenja po tabeli, a njihov je smisao u
tome š to ne dozvoljavaju ponavljanje vrednosti po koloni za koje je definisano. Rezervisana reč UNIQUE prilikom
kreiranja tabele. Kasnije, prilikom izmene:
ALTER TABLE Album
ADD CONSTRAINT AK_naziv UNIQUE (naziv)

Check
Definiš e pravila za unos u vrednosti kolonu – implementacija domenskog ograničenja:
ALTER TABLE Album ADD CONSTRAINT
CK_Album CHECK (kolicina>0)
Baze podataka ::: 6/6

DROP
Služ i za brisanje objekata iz baze. Sintaksa: DROP <object type> <object name>. Moramo najpre skloniti
ograničenja spoljnog ključa:
alter table izdao
drop constraint FK_Izdao_Album

alter table izdao


drop constraint FK_Izdao_Autor

… a onda mož emo brisati tabele:


drop table album, autor, izdao

i na kraju:
drop database prvoslovoimenaiprezime

S-ar putea să vă placă și