La **12 reguloj de Codd** estas aro da dek-tri (tiel) reguloj por datumbazaj sistemoj. Ilin proponis Edgar Frank Codd por difini, je kiuj kondiĉoj datumbaza sistemo nomiĝu "rilata" aŭ, pli precize, kiel "rilata datumbaz-mastruma sistemo" (RDBMS).

Codd vortigis tiujn regulojn komence de la 1980-aj jaroj.

La reguloj
----------

* **Regulo 0**: La sistemo devas esti rilata, datumbazo, kaj mastruma sistemo.

Por esti akceptita kiel rilata datumbaz-administra sistemo, la sistemo devas uzi nur siajn rilatajn kapablojn por administri (mastrumi) la datumbazon.
* **Regulo 1**: La informa regulo:

Ĉia informo en la datumbazo devas esti reprezentata en ununura maniero, per valoroj en kolumnoj ene de horizontaloj en tabeloj.
* **Regulo 2**: La regulo de garantiita aliro:

Ĉiuj datumoj devas esti alireblaj sen ambigueco. Tiu regulo esence estas alia vortigo de la baza postulo pri primaraj ŝlosiloj. Ĝi diras, ke ĉiu opa valoro en la datumbazo devas esti logike adresebla per specifado de la nomo de la koncerna tabelo, la nomo de la kolumno enhavanta ĝin kaj la primara ŝlosilo de la horizontala enhavanta ĝin.
* **Regulo 3**: sistema traktado de valoro "nenio" (NULL)

La DBMS devas permesi, ke ajna kampo enhavu nulon (nenion). Speciale, ĝia reprezentado de "manka informo" aŭ "neaplikebla informo" devas esti sistema kaj kongrua, kaj malsama al ĉiuj ordinaraj valoroj (ekzemple, en okazo de nombraj valoroj, malsama al la nombro nulo kaj al ĉiu alia nombro), kaj sendependa de datumtipoj. Implicitas, ke la DBMS devas manipuli tiajn reprezentaĵojn en unueca, kongrua maniero.
* **Regulo 4**: Aktiva enkomputila katalogo bazita sur la rilata modelo:

La sistemo devas provizi enkomputilan rilatan katalogon, alireblan al rajtigitaj uzantoj per la ordinara demandolingvo. Tio signifas, ke uzantoj povas aliri la strukturon (katalogon) de la datumbazo uzante la saman demandolingvon, kiun ili uzas por aliri la datumojn en la datumbazo.
* **Regulo 5**: Universala datuma sublingvo

La sistemo devas oferti almenaŭ unu rilatan lingvon, kiu
* havas linian sintakson
* estas uzebla kaj dialoge kaj el aplikaj programoj
* permesas la difinadon de datumoj (inkluzive de vidoj), la manipuladon de datumoj (ŝanĝo kaj lego), sekurecajn kaj integrecajn restriktojn kaj transakciajn operaciojn (komenco, plenumo kaj malfaro).

* **Regulo 6**: Ŝanĝo tra vidoj

Se vido al la datumbazo teorie estas manipulebla (ŝanĝebla), la sistemo devas kapabli ŝanĝi ĝin.
* **Regulo 7**: altnivelaj (plur-objektaj) enigo (aldono, ŝanĝo kaj forigo):

La sistemo devas oferti operatorojn por enigi, ŝanĝi aŭ forigi aron da datumoj samtempe. Tio signifas, ke datumoj povu esti legataj de rilata datumbazo en aroj konstruitaj el pluraj horizontaloj kaj/aŭ pluraj tabeloj. La regulo deklaras, ke enigo, ŝanĝo kaj forigo funkciu por ĉia legebla aro, ne nur por unu horizontalo en unu tabelo.
* **Regulo 8**: Sendependeco de fizikaj datumoj:

Ŝanĝoj je "fizika" nivelo (kiel datumoj estas registritaj, ekzemple en vektoroj aŭ ligitaj listoj) ne postulu ŝanĝon en aplikaĵo, kiu uzas la datumojn.
* **Regulo 9**: Sendependeco de logikaj datumoj:

Ŝanĝoj je "logika" nivelo (kiel datumoj estas organizitaj en tabeloj, kolumnoj, horizontaloj ktp.) ne postulu ŝanĝon en aplikaĵo, kiu uzas la datumojn. Logika sendependeco estas malpli facile atingebla ol fizika sendependeco.
* **Regulo 10**: integreca sendependeco:

Integrecaj restriktoj devas esti specifataj aparte de aplikaj programoj kaj memorataj en la katalogo. Devas esti eble ŝanĝi tiajn restriktojn laŭ bezono sen kaŭzi nenecesajn malavantaĝojn al aplikaĵoj.
* **Regulo 11**: sendependeco de distribuo:

La distribuiteco de partoj de la datumbazo al pluraj lokoj estu nevidebla al ĝiaj uzantoj. Ekzistantaj aplikaĵoj sukcese funkciu plu, kiam
* iu DBMS estas ŝanĝita al distribuita sistemo, aŭ
* jam distribuitaj datumoj estas redistribuitaj malsame ene de la sistemo.

* **Regulo 12**: regulo de nedifektado:

Se la sistemo ofertas malalt-nivelan (unu-objektan) uzo-interfacon, tiu interfaco ne permesu difektadon de la sistemo, ekzemple per preteriro de rilataj sekurecaj aŭ integrecaj restriktoj.
Tiuj ĉi reguloj estis difinitaj en la artikolo "Is Your DBMS Really Relational?" (ĉu via sistemo vere estas rilata) de Codd, publikigita en la revuo *ComputerWorld" en du partoj, je la 14-a kaj 21-a de oktobro 1985.*