Delo s tabelami

Stavek za kreiranje tabel CREATE TABLE
Sintaksa

> CREATE TABLE ime_tabele (
> atribtu1 tip1 [integritetne_omejitve],
> atribut2 tip2 [integritetne_omejitve],
> ...
> Primary Key (atributx, atributy, ...),
> Foreign Key (atributfk) References ime_starševske_tabele (atribut) On operacija1 akcija1 On operacija2 akcija2
> );

Najpogostejše integritetne omejitve so:

- NOT NULL,
- UNIQUE,
- CHECK pogoj,
- DEFAULT vrednost.

Pri opredeljevanju tujih ključev pod vrednost operacija1 vpišemo update, pod operacija2 pa delete. V obeh primerih pod akcija vpišemo eno od vrednosti: no action | cascade | set null | set default.

Kombinacija operacije in akcije pri opredelitvi tujih ključev določa tip referencialne integritete. Ta kombinacija opredeli odziv SUPB v primeru bodisi brisanja ali posodabljanje vrednosti starševskega zapisa.

- Če je akcija 'no action', potem SUPB prepreči brisanje vseh zapisov starševske tabele, v kolikor le ti imajo ustrezne zapise v otroški tabeli.
- Če je akcija 'cascade', potem SUPB hkrati z brisanjem zapisa starševske tabele izbriše tudi vse pripadajoče zapise v otroški tabeli.
- Če je akcija 'set null', potem SUPB pri brisanju zapisa starševske tabele, v vseh pripadajočih zapisih otroške tabele v vrednost zunanjega ključa vpiše vrednost NULL.
- Če je akcija 'default', potem SUPB pri brisanju zapisa starševske tabele, v vseh pripadajočih zapisih otroške tabele v vrednost zunanjega ključa vpiše privzeto vrednost.

Možni podatkovni tipi za atribute so odvisni od SUPB. V nekaterih SUPB lahko kreiramo domene ali uporabniško definirane tipe podatkov, ki pomagajo ohranjati konsistentnost podatkovnega tipa znotraj podatkovne baze.

Primer stavka SQL DDL za SUPB Firebird, ki naredi tabelo Praznik(PraznikID:N,ImePraznika:A20,Dan:N,Mesec:N,Opombao:A100)

> Create table Praznik(

> > PraznikID integer NOT NULL,
> > ImePraznika varchar(20) NOT NULL,
> > Dan integer NOT NULL CHECK (dan >=1 and dan<=31),
> > Mesec integer NOT NULL CHECK (mesec >=1 and mesec<=12),
> > Opomba varchar(100),

> Primary Key(PraznikID));

Primer stavka SQL DDL za SUPB Firebird, ki naredi tabelo Proslava Proslava(ProslavaID:A5,PraznikID→Praznik:N, Vsebina:A50, Opiso:A200, Cena:N)

> Create table Proslava(

> > ProslavaID char(5) not null,
> > PraznikID integer not null References Praznik (PraznikID) on delete cascade on update cascade,
> > Vsebina char(50) not null,
> > opis varchar(200),
> > cena float check (cena>=0),

> primary key (ProslavaID,PraznikID));

Prikaz narejenih table z isql (SUPB je Firebird)
Stavek za spreminjanje strukture tabel ALTER TABLE

Stavek ALTER TABLE se uporablja za:

- Dodajanje novih atributov v obstoječo tabelo

> > ALTER TABLE ime_tabele ADD atribut tip [integritetne omejitve];

- Brisanje atributov iz tabele

> > ALTER TABLE ime_tabele DROP atribut;

- Če je ta atribut uporabljen kot tuji ključ neke druge tabele, brisanje atributa NE USPE
- Če izbrišemo atribut, izbrišemo tudi VSE vrednosti tega atributa v tabeli.

- Dodajanje tujih ključev

> > ALTER TABLE ime_tabele ADD FOREIGN KEY ime_kljuca REFERENCES ime_starševske_tabele (ime_atributa) ON operacija1 akcija1 ON operacija2 akcija2;

Operacija1 = update, operacija2 = delete

Akcija1 oz. akcija2 = no action | cascade | set default | set null

Primer stavka, ki v tabelo praznik doda atribut Opis, ki je sestavljen in 30 znakov in prikaz spremenjene strukture tabele Praznik.
Stavek za brisanje tabele DROP TABLE

Značilnosti stavka DROP TABLE:

- Zelo zanimiv stavek.
- Najbolje dela takrat, ko si to najmanj želimo.
- Neprevidna uporaba tega stavka empirično dokazuje pomen rednega arhiviranja PB.
- Po izvedbi stavka DROP TABLE sta izbrisana struktura in vsebina tabele.
- Sintaksa je preprosta in praviloma enovita za vse SUPB:

> > DROP TABLE ime_tabele;

Primer stavka, ki izbriše tabelo Proslava:

> Drop Table Proslava;

Opomba: stavek DROP TABLE (praviloma) ne uspe, če je ta tabela starševska za neko drugo tabelo (če je njen ključ uporabljen kot tuji ključ druge tabele). Kljub temu uporabljate ta stavek skranje pazljivo!