12 Coddovih pravila

**12 Kodovih pravila** čini skup od trinaest pravila koja je predložio Edgar F. Kod, sa ciljem da definiše šta je potrebno da poseduje jedan sistem za manipulaciju bazom podataka da bi ga mogli smatrati *relacionim* (u engleskoj literaturi RDBMS).

Kod je sročio ova pravila kao deo lične potrebe da spreči razbijanje svoje vizije relacione baze podataka, s obzirom da su prodavci baza podataka nastojali početkom osamdesetih godina dvadesetog veka da zapakuju postojeće proizvode u relacionu oblandu. Pravilo broj 12 je posebno bilo navedeno da se suprotstavi takvim nastojanjima. U suštini, pravila su toliko stroga da nijedan od popularnih "relacionih" sistema za manipulaciju bazama podataka ne ispunjava sve Kodove kriterijume.

## Pravila
**0.** Sistem se mora kvalifikovati kao *[[relacioni model|relacioni]]*, kao *[[baza podataka]]*, i kao *[[sistem za manipulaciju]]*.
:Da bi sistem nazvali relacionim sistemom za manipulaciju bazom podataka (RDBMS), on isključivo mora koristiti svoje *relacione* mogućnosti da *upravlja* *[[baza podataka|bazom podataka]]*.

**1.** *Pravilo informacije*:
:Sve informacije u bazi podataka moraju biti predstavljene na jedinstven način, svojim vrednostima u kolonama u okviru redova tabela.

**2.** *Pravilo garantovanog pristupa*:
:Svi podaci moraju biti dostupni bez dvosmislenosti. Ovo pravilo je u suštini reformulacija osnovnog zahteva za postojanjem primarnih ključeva. Ono traži da je svaka pojedinačna vrednost u bazi logički adresibilna navođenjem naziva tabele koja je sadrži, naziva kolone u kojoj se nalazi i vrednosti primarnog ključa reda koji je sadrži.

**3.** *Sistematično tretiranje null vrednosti*:
:Sistem mora dozvoljavati da svako polje može, po potrebi, ostati prazno (ili imati vrednost null). Posebno, mora podržavati predstavljanje "informacija koje fale ili se ne mogu primenti" koje je sistematično, različito od svih regularnih vrednosti (na primer, "različito od nule i bilo kog drugog broja," u slučaju brojevnih vrednosti), i nezavisno od tipa podataka. Takođe se naglašava da takve reprezentacije sistem mora tretirati dosledno.

**4.** *Aktivni, uvek dostupan katalog zasnovan na relacionom modelu*:
:Sistem sadrži opis baze podataka na logičkom nivou u vidu tabela, tj. relacioni katalog dostupan autorizovanim korisnicima kroz upotrebu njihovog standardnog jezika za upite. To znači da korisnici moraju biti u mogućnosti da pristupe strukturi baze podataka (katalogu) koristeći isti jezik za upite kojim se služe da bi pristupili samim podacima.

**5.** *Pravilo razumljivog podjezika*:
:Sistem mora da podržava bar jedan relacioni jezik koji 
::(a) Ima linearnu sintaksu,
::(b) može da se koristi i interaktivno i u okviru aplikativnih programa, 
::(c) podržava operacije definisanja podataka (uključujući definisanje pogleda), operacije manipulisanja podacima (ažuriranje podjednako kao i izdvajanje), pravila integriteta i autorizaciju, kao i operacije manipulisanja transakcijama (begin, commit, i rollback).

**6.** *Pravilo ažuriranja pogleda*:
:Sve poglede koje je teorijski moguće ažurirati, ažurira sistem.

**7.** *Unošenje, ažuriranje i uklanjanje podataka na nivou skupova*:
:Sistem mora da podržava skupovne *insert*, *update*, i *delete* operatore. To znači da se informacije iz relacione baze mogu izdvajati u skupovima koje čine podaci iz više redova i više tabela. Ovo pravilo traži da operacije dodavanja, ažuriranja i brisanja budu primenjive na bilo koji skup podataka koji se može izdvojiti iz baze, a ne samo na pojedinačni red u jednoj tabeli.

**8.** *Fizička nezavisnost podataka*:
:Promene na fizičkom nivou (način na koji se čuvaju podaci, da li su u pitanju nizovi ili povezane liste itd.) ne smeju zahtevati promene aplikacija zasnovanih na datoj strukturi.

**9.** *Logička nezavisnost podataka*:
:Promene na logičkom nivou (tabela, kolona, redova, i tako dalje) ne smeju zahtevati promene aplikacija koje su zasnovane na toj strukturi. Mnogo je teže postići logičku nego fizičku nezavisnost podataka.

**10.** *Nezavisnost od pravila integriteta*:
:Pravila integriteta moraju biti definisana nezavisno od aplikativnih programa i sačuvana u katalogu. Mora biti predviđena mogućnost njihove izmene u bilo kom trenutku bez nepotrebnog uticanja na postojeće aplikacije.

**11.** *Nezavisnost od distribucije*:
:Distribucija delova baze na različite lokacije mora biti nevidljiva za korisnike baze. Postojeće aplikacije moraju nastaviti da rade :
::(a) kada se prvi put uvodi distribucija baze; i
::(b) pri bilo kojoj sledećoj distribuciji podataka u sistemu.

**12.** *Pravilo zaštite podataka*:
:Ako sistem podržava upotrebu jezika koji rade na niskom nivou (manipulacija jednim slogom u datom trenutku), onda oni ne mogu biti korišćeni za napad na sistem, u smislu zaobilaženja pravila integriteta ili relacione sigurnosti.

## Reference