12 hukum Codd

**12 Hukum Codd** adalah sekumpulan 12 aturan yang diajukan oleh Edgar F. "Ted" Codd, pionir di bidang model relasional untuk basisdata, yang didisain untuk menetapkan kriteria-kriteria yang dibutuhkan dari sebuah sistem manajemen basisdata agar dapat dikatakan sebagai *relasional*, misalnya RDBMS.

Codd mengajukan hukum-hukum ini sebagai bagian dari kampanye personal yang dilakukannya untuk melindungi visinya atas konsep basisdata relasional agar tidak menjadi bias, sebagaimana banyak vendor-vendor database yang berseteru pada awal tahun 1980-an dalam mempaketkan produk-produk basisdata dengan kata-kata *relasional*. Dalam kenyataannya, keduabelas hukum tersebut sangat ketat, bahkan sebuah sistem yang hanya memiliki antarmuka berbasis bahasa SQL pun gagal memenuhi kriteria-kriteria yang ditetapkan.

## Hukum-hukum Codd
**Hukum 0:** Suatu sistem harus memenuhi kualifikasi sebagai *relasional*, sebagai *basisdata*, dan sebagai sebuah *sistem manajemen*:
:Agar sebuah sistem dapat dikatakan sebagai sistem manajemen basisdata relasional (RDBMS), sistem tersebut harus menggunakan fasilitas *relasional*-nya secara penuh untuk memanajemen basisdata.

**Hukum 1:** Hukum informasi:
:Seluruh informasi yang terdapat dalam basisdata harus bisa direpresentasikan hanya dalam satu cara, yaitu dalam bentuk nilai-nilai yang terisi dalam bentuk tabular baris dan kolom.

**Hukum 2:** Hukum Jaminan akses:
:Seluruh data harus bisa diakses tanpa ada kerancuan (ambiguity). Hukum ini merupakan penegasan dari kebutuhan mendasar atas sebuah kunci primer. Hukum tersebut menjelaskan bahwa setiap nilai skalar dalam basisdata haruslah memiliki alamat secara logikal dengan cara menspesifikasikan nama dari tabel, nama dari kolom, dan nilai kunci primer dari baris data dalam tabel tersebut.

**Hukum 3:** Perlakuan sistematik terhadi nilai NULL:
:Sebuah sistem manajemen basisdata harus mengijinkan setiap field terisi dengan nilai NULL (kosong). Secara lebih spesifik, ia harus mendukung representasi dari "Hilangnya informasi dan Ketidakbergunaan informasi" secara sistematis, membedakan secara jelas dari nilai-nilai yang lain (contoh: "perbedaan antara nol dengan nilai-nilai numerik lain," dalam kasus nilai-nilai numerik), dan tipe data yang bersifat independen. Termasuk pula representasi tersebut harus dapat dimanipulasi oleh DBMS melalui langkah-langkah yang sistematis.

**Hukum 4:** Katalog online yang aktif haruslah berbasis model relasional:
:Sistem harus mendukung sebuah katalog relasional yang bersifat online, inline yang bisa diakses untuk pengguna yang sah dalam arti melalui bahasa kueri reguler. Lebih jelas lagi, pengguna harus dapat mengakses struktur data tersebut (katalog) dengan cara yang sama menggunakan bahasa kueri yang digunakan pula untuk mengakses data.

**Hukum 5:** Hukum sub-bahasa data yang komprehensif:
:Sistem harus mendukung setidaknya satu bahasa relasional yang
::(a) Memiliki sintaksis linear
::(b) Dapat digunakan baik secara interaktif maupun melalui program aplikasi
::(c) Mendukung operasi pendefinisian data (termasuk pendefinisan view), operasi manipulasi data, aspek kemanan dan pembatasan integritas, operasi-operasi manajemen transaksi (begin, commit, dan rollback).

**Hukum 6:** Hukum pembaruan/update view:
:Semua view yang secara teoretis dapat diupdate dalam implementasinya juga harus dapat diupdate oleh sistem.

**Hukum 7:** Level tingkat tinggi dalam operasi insert, update, dan delete:
:Sistem harus mendukung serangkaian operasi-operasi *insert*, *update*, and *delete* dalam satu masa waktu yang sama.

**Hukum 8:** Data secara fisik bersifat independen:
:Perubahan pada level fisik (bagaimana suatu data disimpan, menggunakan larik ataupun senarai berantai dsb.) harus tidak mengakibatkan perubahan pada struktur di sisi aplikasi pada level yang lebih tinggi.

**Hukum 9:** Data secara logikal bersifat independen:
:Perubahan pada level logikal (Tabel, kolom, baris) harus tidak mengakibatkan perubahan pada level struktur di sisi aplikasi pada level ang lebih tinggi. Hukum ini secara relatif lebih sulit dicapai daripada hukum 8.

**Hukum 10:** Integritas data bersifat independen:
:Integritas data harus dispesifikasikan secara terpisah dari program aplikasi dan disimpan dalam katalog/struktur dan harus memungkinkan untuk melakukan perubahan terhadap struktur tersebut ketika dibutuhkan tanpa memengaruhi aplikasi yang telah ada.

**Hukum 11:** Distribusi yang bersifat independen:
:Distribusi atas sebagian dari basisdata ke berbagai lokasi harus dapat diatur sedemikian rupa sehingga tidak terlihat oleh pengguna dari basisdata tersebut. Begitu pula aplikasi-aplikasi yang ada harus tetap dapat beroperasi secara normal seperti biasanya ketika:
::(a) saat versi dari DBMS yang terdistribusi pertamakali diperkenalkan; dan/ataupun
::(a) ketika data-data yang terdistribusi tersebut diredistribusikan ke seluruh sistem.

**Hukum 12:** Hukum nonsubversion:
:Jika sebuah sistem menyediakan antarmuka tingkat rendah, maka antarmuka tersebut tidak dapat digunakan untuk menggagalkan sistem, sebagai contoh, membypass aturan-aturan yang terkait dengan keamanan data, ataupun integritasnya.

## Rujukan