Normalisasi adalah proses mengorganisir data dalam sebuah database relasional dengan tujuan mengurangi atau menghilangkan anomali dan redundansi data. Normalisasi juga bertujuan untuk memperbaiki ketergantungan fungsional di antara atribut dalam sebuah tabel, sehingga struktur database menjadi lebih efisien dan terstruktur.
Tujuan Normalisasi
Tujuan utama dari normalisasi dalam database adalah untuk mengurangi redundansi dan menghindari anomali data yang mungkin terjadi pada database. Normalisasi bertujuan untuk membuat struktur database menjadi lebih efisien dan konsisten sehingga dapat memperbaiki kinerja database, mengurangi kehilangan data, serta memudahkan dalam pengelolaan dan pemeliharaan database.
Beberapa tujuan penggunaan normalisasi dalam database adalah sebagai berikut:
Mengurangi redundansi data : Normalisasi membantu menghilangkan duplikasi data yang tidak perlu dalam database, sehingga dapat menghemat ruang penyimpanan dan memastikan konsistensi data.
Menghindari anomali data : Normalisasi membantu menghindari terjadinya anomali data seperti insert, update, dan delete, yang dapat menyebabkan kehilangan data atau informasi yang salah.
Meningkatkan efisiensi dan kinerja database : Normalisasi membantu meningkatkan efisiensi dan kinerja database dengan mengoptimalkan penggunaan ruang penyimpanan dan mempercepat akses data.
Meningkatkan fleksibilitas database : Normalisasi dapat memudahkan dalam melakukan perubahan pada database tanpa harus merubah struktur keseluruhan dari database.
Dengan normalisasi, struktur database akan lebih efisien, konsisten, dan mudah untuk dikelola. Hal ini akan membantu meningkatkan kinerja dan efektivitas sistem informasi yang dibangun di atasnya.
Tahapan Normalisasi Database
Tahapan normalisasi database terdiri dari beberapa level, yaitu: Normalisasi 1NF (First Normal Form)
Bentuk Tidak Normal (Unnormalize)
Bentuk tidak normal (unnormalized) merupakan kumpulan data yang direkam tidak ada keharusan dengan mengikuti suatu format tertentu.
Pada bentuk tidak normal terdapat repeating group (Pengulangan Group), sehingga pada kondisi ini data menjadi permasalahan dalam melakukan manipulasi data (insert, update, dan delete) atau biasa disebut anomali.
Contoh tabel mahasiswa tanpa normalisasi dapat terlihat seperti ini:
NIM | Nama | Jurusan | Jenis Kelamin | Tanggal Lahir | Alamat | No. Telepon |
---|---|---|---|---|---|---|
123456 | Agus Budi | Informatika | Laki-laki | 12-01-1998 | Surabaya | 08123456789 |
123457 | Abdul Wahid | Sistem Informasi | Laki-laki | 01-02-1990 | Bandung | 0812345683 |
123458 | Kaori Mz | Informatika | Perempuan | 18-02-1998 | Tokyo | 08123456789 |
Tabel di atas memiliki beberapa masalah karena atribut Jurusan bersifat bergantung secara fungsional pada NIM, yaitu satu NIM hanya terkait dengan satu Jurusan saja. Sehingga, dapat terjadi redundansi data karena nilai Jurusan diulang-ulang pada setiap baris data.
Selain itu, tabel tersebut juga belum dipecah menjadi beberapa tabel dengan tema yang sama, seperti tabel mahasiswa, tabel jurusan, dan tabel fakultas. Hal ini membuat tabel menjadi kurang efisien dan sulit untuk dikelola ketika data semakin kompleks.
Normalisasi 1NF :
Tabel mahasiswa sebelumnya di-normalisasi menjadi 1NF dengan cara memastikan bahwa setiap kolom hanya berisi satu jenis nilai dan setiap baris atau tupel dalam tabel hanya berisi satu entitas atau objek. Berikut ini adalah contoh tabel yang sudah di-normalisasi menjadi 1NF:
NIM | Nama | Jenis Kelamin | Tanggal Lahir | Alamat | No. Telepon |
---|---|---|---|---|---|
123456 | Agus Budi | Laki-laki | 12-01-1998 | Surabaya | 08123456789 |
123457 | Abdul Wahid | Laki-laki | 01-02-1990 | Bandung | 0812345683 |
123458 | Kaori Mz | Perempuan | 18-02-1998 | Tokyo | 08123456789 |
Dalam tabel mahasiswa di atas, kolom Jurusan telah dihilangkan karena atribut Jurusan bersifat bergantung secara fungsional pada NIM, sehingga nantinya akan dibuatkan tabel baru untuk menyimpan informasi tentang jurusan masing-masing mahasiswa. Selain itu, kolom-kolom yang tidak berkaitan dengan mahasiswa seperti Fakultas juga tidak ditampilkan di dalam tabel mahasiswa. Hal ini bertujuan untuk memudahkan proses normalisasi pada struktur tabel yang lebih kompleks.
Normalisasi 2NF :
Tabel mahasiswa yang sudah di-normalisasi menjadi 1NF, kemudian dapat ditingkatkan normalisasinya menjadi 2NF (Second Normal Form). Normalisasi 2NF memerlukan pemisahan atribut-atribut yang bersifat fungsional secara parsial pada tabel. Atribut yang dipisahkan akan ditempatkan pada tabel terpisah, dengan atribut kunci utama yang sama dengan tabel asal. Berikut ini adalah contoh tabel mahasiswa yang sudah di-normalisasi menjadi 2NF:
Tabel Mahasiswa :
NIM | Nama | Jenis Kelamin | Tanggal Lahir | Alamat | No. Telepon |
---|---|---|---|---|---|
123456 | Agus Budi | Laki-laki | 12-01-1998 | Surabaya | 08123456789 |
123457 | Abdul Wahid | Laki-laki | 01-02-1990 | Bandung | 0812345683 |
123458 | Kaori Mz | Perempuan | 18-02-1998 | Tokyo | 08123456789 |
Tabel Jurusan :
NIM | Jurusan |
---|---|
123456 | Informatika |
123457 | Sistem Informasi |
123458 | Informatika |
Dalam contoh tabel mahasiswa di atas, atribut Jurusan telah dipisahkan ke dalam tabel Jurusan terpisah. Dengan cara ini, informasi tentang jurusan masing-masing mahasiswa disimpan dalam tabel yang terpisah dan dihubungkan dengan tabel Mahasiswa melalui atribut kunci utama NIM. Dengan demikian, tidak ada ketergantungan fungsional parsial pada tabel Mahasiswa, sehingga sudah memenuhi syarat normalisasi 2NF.
Normalisasi 3NF :
Setelah tabel Mahasiswa di-normalisasi menjadi 2NF, maka dapat dilanjutkan ke tahap normalisasi 3NF (Third Normal Form). Normalisasi 3NF memerlukan pemisahan atribut-atribut yang bersifat fungsional transitif pada tabel. Atribut yang dipisahkan akan ditempatkan pada tabel terpisah, dengan atribut kunci utama yang sama dengan tabel asal. Berikut ini adalah contoh tabel mahasiswa yang sudah di-normalisasi menjadi 3NF:
Tabel Mahasiswa :
NIM | Nama | Jenis Kelamin | Tanggal Lahir | Alamat | No. Telepon |
---|---|---|---|---|---|
123456 | Agus Budi | Laki-laki | 12-01-1998 | Surabaya | 08123456789 |
123457 | Abdul Wahid | Laki-laki | 01-02-1990 | Bandung | 0812345683 |
123458 | Kaori Mz | Perempuan | 18-02-1998 | Tokyo | 08123456789 |
Tabel Jurusan :
Kode Jurusan | Jurusan |
---|---|
TI | Teknin Informatika |
SI | Sistem Informasi |
Tabel Mahasiswa_Jurusan:
NIM | Kode Jurusan |
---|---|
123456 | TI |
123457 | SI |
123458 | TI |
Dalam contoh tabel mahasiswa di atas, atribut Nama Jurusan telah dipindahkan ke tabel Jurusan untuk menghindari ketergantungan transitif pada tabel Mahasiswa. Dengan cara ini, informasi tentang nama jurusan disimpan dalam tabel yang terpisah dan dihubungkan dengan tabel Mahasiswa melalui atribut Kode Jurusan. Tabel Mahasiswa_Jurusan menjadi tabel penghubung antara tabel Mahasiswa dan tabel Jurusan. Tabel Mahasiswa_Jurusan hanya berisi atribut NIM dan Kode Jurusan dan tidak memiliki atribut yang bergantung pada NIM atau Kode Jurusan. Dengan demikian, tabel Mahasiswa sudah memenuhi syarat normalisasi 3NF.
Perlu diingat bahwa normalisasi harus dilakukan dengan bijak dan tidak berlebihan. Terlalu banyak tahap normalisasi dapat membuat desain database menjadi terlalu rumit dan sulit untuk diakses. Selain itu, normalisasi juga tidak menjamin performa database yang lebih baik.
Oleh karena itu, penting untuk melakukan normalisasi dengan proporsional terhadap kebutuhan aplikasi dan pertimbangkan faktor-faktor seperti kompleksitas query, kinerja sistem, dan kebutuhan pengguna.