Anda di halaman 1dari 11

Kali ini saya mau mengulas sedikit tentang materi yang telah saya pelajari dalam mata kuliah

basis
data, yaitu RDBMS ( Relational Data Base Management System )

1. Pengertian RDBMS
Sebuah sistem manajemen basisdata relasional atau dalam bahasa Inggrisnya dikenal sebagai
relational database management system (RDBMS) adalah sebuah program komputer (atau secara
lebih tipikal adalah seperangkat program komputer) yang didesain untuk mengatur/ memanajemen
sebuah basisdata sebagai sekumpulan data yang disimpan secara terstruktur, dan melakukan operasi-
operasi atas data atas permintaan penggunanya. Contoh penggunaan DBMS ada banyak sekali dan
dalam berbagai bidang kerja, misalnya akuntansi, manajemen sumber daya manusia, dan lain
sebagainya. Meskipun pada awalnya DBMS hanya dimiliki oleh perusahaan-perusahaan berskala
besar yang memiliki perangkat komputer yang sesuai dengan spesifikasi standar yang dibutuhkan
(pada saat itu standar yang diminta dapat dikatakan sangat tinggi) untuk mendukung jumlah data
yang besar, saat ini implementasinya sudah sangat banyak dan adaptatif dengan kebutuhan
spesifikasi data yang rasional sehinggal dapat dimiliki dan diimplementasikan oleh segala kalangan
sebagai bagian dari investasi perusahaan.

2. Sejarah RDBMS
Edgar F. Codd memperkenalkan istilah ini pada makalah seminarnya yang berjudul “A Relational
Model of Data for Large Shared Data Banks”. Salah satu definisi yang cukup dikenal secara luas atas
sebuah sistem basisdata relasional adalah 12 hukum Codd. Namun demikian, pada awal-awal
implementasinya banyak model relasional yang tidak mengikuti seluruh elemen-elemen yang
terdapat dalam hukum-hukum Codd tersebut yang menjadikan terminologinya berkembang untuk
mendeskripsikan sebuah tipikal sistem basisdata yang lebih luas. Dalam cakupan yang minimum
sistem tersebut memenuhi kriteria berikut: * menyajikan data pada pengguna dalam bentuk
relasional (ditampilkan dalam bentuk tabular, sebagai koleksi dari tabel dimana setiap tabel beriisi
sekumpulan baris dan kolom) * menyediakan operator relasioanl untuk memanipulasi data dalam
bentuk tabular Sistem yang pertama kalinya yang secara relatif memenuhi implementasi atas sebuah
model relasional adalah Pusat Studi Ilmiah IB, Inggris, di Peterlee; IS1 (1970-1972) dan implementasi
lain yang mengikutinya PRTV (1973-1979). Sistem yang pertama kalinya dijual secara komersil
sebagai RDBMS adalah Multics Relational Data Srore pada tahun 1978. Yang lainnya adalah Berkeley
Ingres QUEL dan IBM BS12.

3. Arsitektur RDBMS
Arsitektur RDBMS memiliki banyak karakteristik yang membedakan dari model penyimpanan data
lainnya. Perbedaan yang paling penting adalah pemisahan segi fisik dari segi logika suatu data. Dalam
RDBMS, seluruh data secara logika tersimpan di dalam tabel-tabel, yang merupakan kumpulan dari
baris dan kolom. Sistem pencarian data di dalam RDBMS menggunakan index yang merupakan
struktur data yang terpisah dari tabel dan menyimpan hanya nilai terstruktur dari kolom-kolom dan
alamat fisiknya. Disamping itu dengan didukung oleh penggunaan index dapat mempercepat proses
pencarian data di dalam database.

Faktor penting lainnya dari arsitektur RDBMS adalah integrity constraints. Dengan Integrity
Constraints tabel-tabel dihubungkan dengan key. Key adalah beberapa kolom atau kombinasi kolom
kolom yang secara unique mengidentifikasi setiap tabel. Sebuah key yang secara unique bagi suatu
tabel dapat berdiri sebagai kolom yang tidak unique bagi tabel lainnya. Integrity Constraints adalah
aturan "build in" yang secara otomatis berpengaruh dalam mempertahankan integritas database.

Aturan-aturan integritas ini biasa dibuat atau dirancang oleh seorang perancang database.
Karakteristik penting lainnya dari arsitektur RDBMS adalah adanya "Optimizer". Optimizer adalah
sebuah sistem pakar yang bertugas untuk menentukan cara pemrosesan yang paling efesien bagi
suatu database.

4. Elemen-elemen RDBMS
Database:
Sekelompok tabel data berisi informasi yang berhubungan. Perhatikan bahwa suatu database dapat
terdiri dari satu tabel saja.

Table:
Sekelompok record data, masing-masing informasi yang sejenis. Dalam contoh catalog perpustakaan,
catalog itu sendiri merupakan tabel data.
Record :
Entri tunggal dalam tabel; entri tersebut terdiri dari sejumlah field data. Dalam catalog perpustakaan,
record adalah salah satu baris entri tunggal.

Field :
Item (kolom) tertentu dari data dalam record. Dalam satu buku telepon, sekurang-kurangnya dapat
dikenali empat field : nama keluarga, nama depan, alamat, dan nomor telepon.

Index :
Tipe tabel tertentu yang berisi nilai-nilai field kunci atau field (yang ditetapkan oleh pemakai) dan
pinter ke lokasi record yang sebenarnya. Nilai-nilai dan pointer ini disimpan dalam urutan tertentu
(sekali lagi ditetapkan oleh pemakai) dan mungkin digunakan untuk menyajikan data dalam urutan
database.

Query :
Perintah SQL yang dirancang untuk memanggil kelompok record tertentu dari satu tabel atau lebih
untuk melakukan operasi pada tabel. Meskipun perintah SQL dapat dijalankan langsung dari
program, query sebagai enjin perintah dan menyimpannya dalam database itu sendiri - ini berguna,
jika perintah-perintah SQL sering kita gunakan, sebagaimana perintah yang memanggil record untuk
laporan bulanan tertentu. Bila query disimpan dalam database, biasanya kompilasi. Kompilasi query
memperbaiki kinerja program kita kerana mesin database tidak harus menerjemahkan (atau
menguraikan) perintah SQL.

Filter (Pembatas Kondisi) :


Filter sebenarnya bukan merupakan bagian dari database, namun ia digunakan bersama urutan
indeks dan sort untuk menentukan data mana yang diproses atau ditampilkan. Filter adalah pembatas
kondisi yang dikenakan pada data

View :
View data terdiri atas jumlah record yang tampak (atau diproses) dan urutan penampilannya (atau
pemrosesannya). View khususnya dikendalikan oleh filter dan indeks.

5. Variasi Dinamis
Keluhan yang muncul dan dikenal secara umum terhadap keberadaan RDBMS adalah kenyataan
bahwa implementasi yang ada saat ini dipandang sebagai terlalu “statis”. Spekulasipun bermunculan
terhadap kemungkinan untuk membuat sebuah sistem basisdata generasi baru yang menggunakan
model “relasional secara dinamis” dengan kolom yang bisa dibuat secara dinamis, ukuran yang
berkembang secara dinamis, didefinisikan secara dinamis. Setiap baris dapat diimplementasikan
sebagai map (kamus ataupun larik asosiatif) dan kolom-kolom yang tidak dikenal secara sederhana
disajikan sebagai field kosong. Beberapa kalangan menganggap hal ini menyalahi model relasioal
murni, namun kalangan lain menyanggah bahwa sebuah penggunaan map hanyalah sebagai detil
implementasi saja. Sehingga dalam pandangan ini, sebuah “kolom yang tidak ditemukan/tidak ada”
secara sederhana hanyalah dipandang sebagai perihal interpretasi dan dianggap sebagai pilihan cara
penyajian saja.

RDBMS adalah kependekan dari Relational Database Management System.


RDBMS adalah program yang melayani sistem basis data yang entitas utamanya
terdiri dari tabel-tabel yang mempunyai relasi dari satu tabel ke tabel yang lain.

Suatu database terdiri dari banyak tabel. Tabel ini terdiri dari banyak field yang
merupakan kolomnya. Isi tiap baris dari tabel inilah merupakan data.

Untuk membuat sistem basis data yang terintegrasi maka antara satu tabel dengan
tabel lain mempunyai hubungan yang harus selalu diperlihara. Setiap tabel
mempunyai sebuah primary key, primary key ini kemudian dihubungkan dengan
tabel kedua dan menjadi foreign key untuk tabel kedua ini.

Dengan relational database ini maka data akan secara konsisten disimpan di suatu
tabel, kemudian tabel lain yang membutuhkan data lainnya tinggal menghubungkan
melalui foreign key.

Sebagai contoh adalah database kampus yang terdiri tabel_mahasiswa,


tabel_makakuliah dan nilai.
Field dari tabel_mahasiswa adalah NIM, nama, alamat, tanggal lahir dengan
primary_key NIM
Field dari tabel_matakuliah adalah kode_matakuliah, nama_matakuliah, sks dengan
primary_key kode_matakuliah.
Untuk tabel nilai kita hanya perlu field NIM, kode_matakuliah dan nilai. Di sini NIM
dan kode_matakuliah merupakan foreign_key untuk tabel tabel_mahasiswa dan
tabel_matakuliah.

Berbagai macam relasi dalam database

1. one-to-one
2. one-to-many
3. many-to-many
RDBMS akan menjaga agar data-data yang menjadi kunci relasi yang foreign_key
dan primary_key ini merupakan data-data yang benar-benar berkaitan satu dengan
yang lain. Jika ada data yang salah relasinya, maka RDMBS akan menolak data
tersebut. Ini akan memudahkan pembuat program (software developer) dalam
melakukan coding karena dibantu pengecekan secara otomatis oleh RDBMS.

Database Model : Relation


Konsep Relational Database Model diajukan pertama kali oleh peneliti IBM, Dr. Edgar F.
Codd pada tahun 1969, dan merupakan database model yang paling banyak digunakan saat
ini.
Dr. Codd pada awalnya mencari cara baru untuk menangani data dalam jumlah besar. Namun
karena keterbatasan pada Hierarchical dan Network model yang umum digunakan saat itu, ia
menerapkan prinsip matematis dalam menyusun data-data tersebut. Dan karena memang
memiliki keahlian di bidang matematika, Dr.Codd berusaha mencari cara untuk
menyelesaikan permasalahan yang sering timbul dalam database model saat itu, seperti
redundansi data, hubungan antar data, dan ketergantungan kepada urutan di media
penyimpanan.

Dr.Codd mengajukan ide tentang relational model ini dalam sebuah paper berjudul “A
Relational Model of Data for Large Shared Databanks” pada Juni 1970. Relational Database
model berasal dari 2 cabang ilmu matematika : set theory dan first-order predicate logic.
Sebuah relational database menyimpan data dalam ‘relasi’, atau yang disebut juga tabel.
Setiap tabel terdiri dari tuple atau record dan atribut atau field. Urutan penyusunan dalam
media penyimpanan fisik tidak berpengaruh dalam model ini, dan setiap record di dalam tabel
diidentifikasi dengan sebuah field unik.
Relational Database Model inilah yang paling populer dan banyak diimplementasi dalam
berbagai aplikasi database saat ini, termasuk Oracle dan MySQL. Aplikasi database untuk
relational model, dikenal juga dengan Relational Database Management Systems (RDBMS).

RDBMS : Relational Database Management Systems


Relational Database Management Systems (RDBMS) adalah software/aplikasi yang
menggunakan relational database model sebagai dasarnya. Sejak 1970an, RDBMS sudah
banyak digunakan oleh berbagai vendor, dan dalam berbagai sistem hardware. Dua RDBMS
pertama adalah System R, yang dikembangkan oleh IBM, dan INGRES (Interactive Graphics
Retrieval System) yang dikembangkan oleh University of California di Berkeley. Keduanya
pada awal 1970an.
Setelah keunggulan Relational Database banyak dikenal, berbagai perusahaan mulai berlalih
dari hierarchical dan network database model ke relational database model. Pada tahun
1980an, Oracle RDBMS lahir, dan diikuti oleh pesaingnya saat itu, IBM DB2 RDBMS.

Jika pada tahun 1980an RDBMS hanya dapat digunakan dalam sistem mainframe perusahaan
besar, namun saat ini dengan semakin majunya perkembangan teknologi di sisi hardware,
PC-based RDBMS sudah banyak tersedia. MySQL RDBMS dapat diinstall di
komputer/laptop biasa.

Client-Server RDBMS Arsitektur


Kebutuhan akan database yang dapat diakses bersama-sama oleh banyak pengguna mulai
muncul di sekitar awal 1990an. Sebuah database terpusat, namun dapat diakses dari tiap
komputer yang berjauhan, membuat banyak RDBMS dikembangkan dengan arsitektur
Client-Server.
Dalam arsitektur Client-Server, sebuah komputer bertindak sebagai Database Server pusat.
Server inilah yang akan melayani segala permintaan dari komputer (Client) yang
membutuhkan akses ke database. Namun fisik database itu sendiri juga tidak harus di dalam
Server, bisa saja berada di tempat lain, namun terhubung ke Database Server untuk
memprosesnya.
MySQL juga menggunakan arsitektur Client-Server. Namun nantinya dalam tutorial ini, kita
akan menjalankan aplikasi server dan client di komputer yang sama. Namun pada dasarnya,
jika kita menjalankan MySQL Server di komputer, setiap komputer yang terhubung kedalam
jaringan dapat mengaksesnya dengan menggunakan MySQL Client. Lebih lanjut tentang hal
ini akan kita pelajari dalam tutorial selanjutnya.

Setelah Relational Database Model : Object-Oriented


Database Model
Walaupun RDBMS sudah populer, dan digunakan pada hampir semua keperluan seperti
bisnis, inventory, bank, dll, namun untuk kasus-kasus tertentu, Relational Database Model
dianggap masih kurang mendukung, khususnya untuk aplikasi baru seperti sistem informasi
geografis, dan multimedia. Sehingga mulailah dikembangkan berbagai model database
lainnya, seperti Object-Oriented Database dan Object-Relational Database.
Konsep Database Objek Model ini berasal dari dunia programming: OOP (Object Oriented
Programming), dimana setiap data dikaitkan dengan objek dari data tersebut. ODBMS
(Object Database Management System) juga sudah banyak beredar, seperti Versant
ODBMS oleh Versant Corporation, UniData dari IBM, dan VelocityDB.
Namun konsep Object Oriented Database ini belum terlalu populer digunakan, dan mungkin
saja nantinya hanya sebagai pelengkap dari relational database, yang untuk kasus per kasus
memerlukan sistem database khusus.

Demikian pembahasan singkat kita tentang pengertian database, database model dan
perkembangan RDBMS. Dalam tutorial selanjutnya, kita akan bahas lebih mendalam
konsep Teori Relational Database, sebelum mempraktekkannya dengan MySQL.
Sumber :

1. http://en.wikipedia.org/wiki/Database
2. http://en.wikipedia.org/wiki/Database_model
3. Michael J. Hernandez : Database Design for Mere Mortals, Addison Wesley, 2003

Pengertian Database dalam Relational


Database
Dalam relational database model,
sebuah database adalah kumpulan relasi yang saling terhubung satu sama
lainnya. Relasi adalah istilah dalam relational database, tapi kita lebih
familiar jika menyebutnya sebagai tabel. Selayaknya tabel yang memiliki
kolom dan baris, dalam relational database, kolom (column)
disebut attribute, sedangkan baris (row) disebut tuple. Hal ini hanya
sekedar penamaan, dan agar lebih gampang, kita hanya akan menggunakan
istilah tabel, kolom dan baris dalam tutorial ini, namun jika anda menemui
istilah relation, attribut dan tuple, itu hanya penamaan lain dari tabel,
kolom, dan baris.

Candidate Key (Kunci Kandidat)


Database dalam relational database dapat di sederhanakan
sebagai sekumpulan tabel yang saling terhubung. Setiap baris dari dalam
tabel setidaknya harus memiliki sebuah kolom yang unik. Unik disini
maksudnya tidak boleh sama. Contohnya, dalam tabel 4.1 : tabel
data_mahasiswa, kolom NIM (Nomor Induk Mahasiswa) akan menjadi
kandidat yang bagus, karena tidak mungkin ada 2 mahasiswa yang
memiliki NIM yang sama. NIM disini disebut juga dengan Candidate Key
(Kunci Kandidat). Candidate Key adalah satu atau beberapa kolom
dalam tabel yang bisa mengidentifikasi tiap baris dari tabel tersebut.
NIM Nama Tanggal Lahir No KTP Tempat Lah

101401030 Alex Ferdinand 29 Juni 1992 1373022906870002 Padang

120502045 Joko Suprianto 4 Maret 1994 3173020403940004 Jakarta


NIM Nama Tanggal Lahir No KTP Tempat Lah

110901033 Susi Sulastri 17 September 1993 1273024709930001 Medan

100301021 Suparman 23 Februari 1992 3173022302920006 Jakarta

121401074 Tania Mutia 5 Oktober 1993 1373024510930006 Padang

110501023 Aprilia Susanti 7 Oktober 1993 1693024710930002 Pekanbaru

Tabel 4.1 : Tabel data_mahasiswa

Nomor KTP juga merupakan candidate key yang bagus, setidaknya setiap
orang akan memiliki Nomor KTP yang berbeda-beda. Namun dalam
beberapa kasus, nomor KTP tidak selalu ada, karena bisa saja seseorang
belum memiliki KTP karena sesuatu dan lain hal. Beberapa karakteristik
Candidate key : unik (tidak boleh berulang), tidak boleh memiliki nilai null
(kosong), nilai dari candidate key akan sangat jarang berubah.

Primary Key (Kunci Utama)


Dalam sebuah tabel, akan terdapat beberapa candidate key, namun hanya
ada 1 Primary key (kunci utama). Primary key adalah salah satu
candidate key yang kita nobatkan sebagai kolom unik untuk identifikasi
baris dalam tabel. Kolom ini tidak boleh berulang, dan tidak boleh kosong
(null). Dari tabel data_mahasiswa, NIM dapat kita tetapkan sebagai
primary key.

Foreign Key (Kunci Tamu)


Dalam sebuah database, biasanya akan terdapat beberapa tabel. Tabel-
tabel ini dapat dihubungkan satu dengan yang lainnya dengan kolom yang
merupakan bagian dari tabel lain. Foreign Key (Kunci Tamu) adalah
Primary key dari tabel lainnya yang terdapat di tabel saat ini. Di dalam
contoh tabel 4.2 : Tabel data_mahasiswa dapat terlihat bahwa NIM adalah
primary key dari tabel data_mahasiswa, dan kode_jurusan adalah primary
key pada tabel_jurusan. Kedua tabel tersebut dihubungkan oleh
kolom kode jurusan.
NIM Nama Tanggal Lahir No KTP Tempat La

101401030 Alex Ferdinand 29 Juni 1992 1373022906870002 Padang

120502045 Joko Suprianto 4 Maret 1994 3173020403940004 Jakarta

110901033 Susi Sulastri 17 September 1993 1273024709930001 Medan

100301021 Suparman 23 Februari 1992 3173022302920006 Jakarta

121401074 Tania Mutia 5 Oktober 1993 1373024510930006 Padang

110501023 Aprilia Susanti 7 Oktober 1993 1693024710930002 Pekanbaru

Tabel 4.2 : Tabel data_mahasiswa

Kode Jurusan Jurusan Alamat

01 Teknik Mesin Jl. Teknik No.0

02 Teknik Arsitektur Jl. Teknik No.0

03 Teknik Elektro Jl. Teknik No.0

04 Akuntansi Jl. Ekonomi No

05 Manajemen Jl. Ekonomi No

06 Ekonomi Pembangunan Jl. Ekonomi No

07 Kesehatan Masyarakat Jl. Kesehatan N

08 Psikologi Jl. Kesehatan N

09 Kedokteran Jl. Kesehatan N

10 Matematika Jl. MIPA No. 01

11 Kimia Jl. MIPA No. 02

12 Fisika Jl. MIPA No. 03

13 Farmasi Jl. MIPA No. 04

14 Ilmu Komputer Jl. MIPA No. 05


Tabel 4.3 : Tabel kode_jurusan

Dalam tabel_mahasiswa, kolom NIM adalah primary key, dan kolom kode
jurusan adalah foreign key. Kenapa tabel tersebut harus dipisah?
Jawabannya adalah agar tidak ada data yang redundan(ganda). Redundansi
data adalah salah satu kelemahan dari desain database yang kita buat.
Seandainya dari contoh tabel, nama Jurusan Ilmu Komputer berubah
menjadi Teknik Informatika, kita hanya tinggal merubah tabel_jurusan.

Referential Integrity
Referential Integrity berkaitan erat dengan foreign key. Pada
dasarnya Referential Integrity adalah penerapan aturan bahwa untuk
setiap foreign key yang terdapat pada suatu tabel, harus ada nilainya di
tabel asal kolom tersebut. Dalam contoh kita, pada tabel 4.2 dan 4.3 setiap
kode_jurusan dalam tabel data_mahasiswa harus ada nilainya dalam tabel
kode_jurusan. Di dalam tabel data_mahasiswa kita tidak bisa memasukkan
nilai 20, karena di tabel kode_jurusan, kode jurusan 20 belum diinput. Dan
jika kita ingin menghapus suatu jurusan dari tabel_jurusan, semua
mahasiswa harus terlebih dahulu sudah tidak ada yang memiliki kode
jurusan tersebut.

Index
Index dalam database adalah sebuah struktur data yang
diimplementasikan oleh RDBMS untuk mempercepat proses pembacaan
data. Index lebih kepada penerapan algoritma dari masing-masing aplikasi
database, dan diterapkan ke dalam kolom dari tabel yang kita inginkan.
Mirip Index yang ada di belakang buku, index seolah-olah daftar cepat
untuk mencari sesuatu oleh RDBMS. Kita dapat mendeklarasikan kolom
mana saja yang akan di index.
Untuk MySQL, kolom yang ditetapkan sebagai primary key akan otomatis
di-index. Tetapi dalam satu tabel, bisa saja terdapat beberapa kolom yang
di index. Pertanyaannya, jika index digunakan untuk mempercepat proses
pembacaan, kenapa tidak semua kolom saja kita index? Jawabannya,
karena index sendiri juga memiliki kelemahan.
Ketika data baru ditambahkan atau terdapat data yang akan dirubah, index
yang tersimpan untuk tabel tersebut harus dibuat ulang, sehingga
memperlama proses penambahan data. Namun untuk tabel yang jarang
bertambah, index menawarkan perfoma yang cepat untuk pembacaan data.

Normalisasi Database
Normalisasi database (Database normalization) adalah proses
penyusunan kolom dan tabel untuk meminimalkan redundansi data (data
yang berulang). Normalisasi biasanya akan membagi tabel besar menjadi
beberapa tabel kecil yang saling terhubung. Hal ini dilakukan agar mudah
dalam mengatur, dan mengorganisasi data yang ada.
Contohnya, untuk tabel data_mahasiswa, jika terjadi perubahan nama
jurusan, misalnya dari Ilmu Komputer menjadi Teknik Informatika, maka
kita harus merubah satu-satu tiap mahasiswa. Namun jika di bagi menjadi
2 tabel, kita hanya tinggal merubah baris no urut 14 dari tabel
kode_jurusan menjadi Teknik Informatika. Dan otomatis setiap mahasiswa
yang memiliki kode_jurusan 14, adalah mahasiswa Teknik Informatika.

Normalisasi database memiliki beberapa tahapan. Dari wikipedia,


normalisasi database setidaknya memiliki 9 tahapan. Pada setiap tahapan,
ada syarat yang harus dipenuhi, sampai sebuah tabel tidak lagi memiliki
kolom yang redundant. Kita tidak harus mengikuti semua tahap, biasanya
hanya dibutuhkan 3 tahapan normalisasi untuk membuat sebuah desain
database sederhana. Proses normalisasi database tidak akan kita bahas
disini, namun setidaknya kita mengetahui bahwa normalisasi database
adalah proses untuk mendesain database agar terorganisir.

Entity Relationship Diagram (ERD)


Entity Relationship Diagram adalah diagram untuk menggambarkan
desain database yang akan dibuat. Di dalam ERD akan terlihat semua
tabel yang akan dirancang, primary key masing-masing tabel, serta foreign
key, dan kolom-kolom apa saja yang nantinya tersedia. ERD memiliki
berbagai versi, baik yang berbentuk balon, maupun tabel. ERD inilah
sebagai blueprint dari database yang akan dirancang.

tulah beberapa istilah yang sering di temui untuk pembahasan mengenai relational database,
yang dapat digunakan sebagai dasar untuk mempelajari MySQL dan memaksimalkan
penggunaannya. Selanjutnya kita akan membahas tentang SQL (Structured Query Language),
bahasa wajib yang diketahui untuk mempelajari MySQL.
Sumber:

1. http://en.wikipedia.org/wiki/Relational_database
2. http://en.wikipedia.org/wiki/Database_normalization
3. Michael J. Hernandez : Database Design for Mere Mortals, Addison Wesley, 2003
4. Clare Churcher: Beginning Database Design From Novice to Professional, Apress,
2007