110 likes | 283 Views
SQL DDL Structured Query Language – Data Description Language. Pozor: odvisnost od SUPB, veliko različnih implementacij SQL DDL. SQL DDL – osnovni stavki. Definiranje tabel (tabela, atributi, integritetne omejitve, tuji ključi) Kreiranje tabel – CREATE TABLE
E N D
SQL DDLStructured Query Language – Data Description Language Pozor: odvisnost od SUPB, veliko različnih implementacij SQL DDL
SQL DDL – osnovni stavki • Definiranje tabel (tabela, atributi, integritetne omejitve, tuji ključi) • Kreiranje tabel – CREATE TABLE • Spreminjanje tabel – ALTER TABLE • Brisanje tabel – DROP TABLE • Definiranje indeksov • Kreiranje sekundarnih indeksov – CREATE INDEX • Brisanje primarnega / sekundarnih indeksov – DROP INDEX • Definiranje uporabnikov, pravic • Kreiranje uporabnikov, skupin – CREATE USER • Dodeljevanje pravic – GRANT …. • Brisanje pravic – REVOKE ….
1. Delo s tabelami – CREATE TABLE Create Table ime_tabele ( atribut1 tip1 integritetne_omejitve, atribut2 tip2 integritetne_omejitve, … Primary Key (atributx, atributy, …) ); -najpogostejše integritetne omejitve: • NOT NULL • UNIQUE • CHECK pogoj • DEFAULT vrednost -možni podatkovni tipi za atribute: • Odvisni od SUPB
1. Delo s tabelami – CREATE TABLE(nad.) • Primer stavka za kreiranje tabele ProslavaProslava(ProslavaID:A5,PraznikIDPraznik:N, Vsebina:A50, Opiso:A500, Cenao:N) PB mySQL Create table Proslava ( ProslavaID Char(5) NOT NULL, Vsebina Char(50) NOT NULL, Opis Varchar(255), PraznikID Int NOT NULL, Cena Double, Primary Key (ProslavaID,PraznikID)) TYPE = MyISAM; PB FireBird Create Table "Proslava" ( "ProslavaID" Char(5) NOT NULL, "Vsebina" Char(50) NOT NULL, "Opis" Varchar(255), "PraznikID" Integer NOT NULL, "Cena" Float Check (>0), Primary Key ("ProslavaID","PraznikID") ); Posebnosti SUPB-jev: mySQL – nima integritetne omejitve Check, omogoča izbiro datotečne organizacije fizične datoteke: heap/myISAM/ISAM/…, označi le ne-opcijske atribute FireBird – ima integtitetno omejitev Check, označi le ne-opcijske artibute PostgreSQL – ima integritetno omejitev Check, označi opcijske in ne-opcijske atribute PB PosgreSQL Create table Proslava ( ProslavaID Char(5) NOT NULL, Vsebina Char(50) NOT NULL, Opis Varchar(255) NULL , PraznikID Integer NOT NULL, Cena Double precision NULL Check (>0 ), primary key (ProslavaID,PraznikID) );
1. Delo s tabelami – ALTER TABLE • Uporaba: • Dodajanje novih atributov v obstoječo tabelo • ALTER TABLE ime_tabele ADD atribut tip; • Brisanje atributov iz tabele • ALTER TABLE ime_tabele DROP atribut; • Dodajanje tujih ključev • ALTER TABLE ime_tabele ADD FOREIGN KEY ime_kljuca REFERENCES ime_tabele (ime_atrubuta) ON operacija1 akcija1 ON operacija2 akcija2;
1. Delo s tabelami – ALTER TABLE (nad.) • Primer stavka za kreiranje tujega ključa PraznikID tabele Proslava, ki referencira tabelo Praznik Proslava(ProslavaID:A5,PraznikIDPraznik:N, Vsebina:A50, Opiso:A500, Cenao:N) • mySQL: Alter table Proslava add Index IX_(PraznikID); Alter table Proslava add Foreign Key (PraznikID) references Praznik (PraznikID) on delete cascade on update cascade; • Firebird: Alter Table "Proslava" add Foreign Key ("PraznikID") references "Praznik" ("PraznikID") on update cascade on delete cascade ; • PostgreSQL: Alter table Proslava add foreign key (PraznikID) references Praznik (PraznikID) on update cascade on delete cascade ;
1. Delo s tabelami – DROP TABLE (nad.) • Zelo zanimiv stavek ): • Najbolje dela takrat, ko si to najmanj želiš • Stavek, ki empirično dokazuje pomen rednega arhiviranja PB • Sintaksa – preprosta in praviloma enovita za vse SUPB: DROP TABLE ime_tabele; • Primeri stavkov za brisanje tabele Proslava: • mySQL: drop table IF EXISTS Proslava; • Firebird: Drop Table "Proslava"; • PostgreSQL: Drop table Proslava;
2. Delo z indeksi • Kreiranje sekundarnih indeksov CREATE INDEX ime_indeksa ON ime_tabele (atribut1, atribut2, ..); • Brisanje sekundarnih indeksov DROP INDEX ime_indeksa; ali DROP INDEX ime_indeksa on ime_tabele; ali … • Primeri stavkov, ki za tabelo Proslava najprej naredijo sekundarni indeks ‘poCeni’, indeks je urejen padajoče – od najdražjih proslav do najcenejših in ga potem izbrišejo • mySQL: Create Index poCeni ON Proslava (Cena); Drop index poCeni on Proslava; • Firebird: Create DESCENDING Index "poCeni" ON "Proslava" ("Cena"); Drop Index "poCeni"; • PostgreSQL: Create index poCeni on Proslava using btree( Cena ); Drop index poCeni;
3. Definiranje uporabnikov, pravic • Definiranje uporabnikov CREATE USER ime_uporabnika; • Definiranje skupin uporabnikov CREATE GROUP ime_skupine; CREATE ROLE ime_skupine; • Dodajanje uporabnikov v skupino ALTER GROUP ime_skupine ADD USER ime_uporabnika; GRANT ime_skupine TO ime_uporabnika; • Dodajanje pravic GRANT pravica ON ime_tabele TO ime_uporabnika|ime_skupine; ali GRANT pravica ON ime_tabele TO GROUP ime_skupine; • Brisanje pravic REVOKE pravica ON ime_tabele TO ime_uporabnika; ali REVOKE pravica ON ime_tabele TO GROUP ime_skupine;
3. Definiranje uporabnikov, pravic • Primer PostgreSQL skripte za definiranje uporabniških pravic: Create group Informator; /* naredi skupino*/ Create user Skrbnik; /* kreira uporabnike */ Create user Matej; Create user Peter; Alter group Informator add user Matej; /* polni skupino */ Alter group Informator add user Peter; Grant select on Drzava to group Informator; /* dodeljuje pravice skupini */ Grant select on Praznik to group Informator; … Grant select on Drzava to Skrbnik; /* dodeljuje pravice uporabnikom */ Grant update on Drzava to Skrbnik; Grant delete on Drzava to Skrbnik; …
3. Definiranje uporabnikov, pravic(nad.) • Podobno v FireBird /* kreiranje skupine */ Create Role "Informator"; /* dodajanje uporabnikov v skupino */ Grant "Informator" to "Matej"; Grant "Informator" to "Peter"; /* definiranje pravic skupine */ Grant select on "Drzava" to "Informator"; Grant select on "Praznik" to "Informator"; Grant select on "Proslava" to "Informator"; Grant select on "Ima" to "Informator";