Normalisasi dalam SQL: 1NF, 2NF, 3NF & BCNF
Diterbitkan: 2021-03-12Normalisasi adalah proses sistematis untuk memastikan bahwa model basis data relasional efisien, cocok untuk kueri tujuan umum dan bebas dari karakteristik yang tidak diinginkan seperti anomali penyisipan, pembaruan, dan penghapusan, yang menyebabkan hilangnya integritas data. Proses normalisasi ini juga membantu menghilangkan redundansi data dan mengurangi kemungkinan inkonsistensi setelah operasi penyisipan, pembaruan, atau penghapusan apa pun.
Untuk pemahaman yang lebih baik, perhatikan skema berikut: Siswa (Nama, Alamat, Mata Pelajaran, Kelas)
Ada beberapa masalah atau inefisiensi dalam skema ini.
1) Redundansi : Alamat siswa diulang untuk setiap mata pelajaran yang dia ikuti.
2) Anomali Pembaruan : Kami mungkin telah memperbarui Alamat dalam satu tuple (baris) sementara membiarkannya tidak berubah di baris lainnya. Jadi kami tidak akan memiliki alamat unik yang konsisten untuk setiap siswa.
3) Anomali Penyisipan : Kami tidak akan mencatat Alamat siswa tanpa mendaftar setidaknya untuk satu Mata Pelajaran. Demikian pula, ketika seorang siswa ingin mendaftar untuk mata pelajaran baru, mungkin saja alamat yang berbeda dimasukkan.
4) Anomali Penghapusan : Jika seorang siswa memutuskan untuk menghentikan semua mata pelajaran yang terdaftar, maka alamat siswa tersebut juga akan hilang dalam proses penghapusan.
Oleh karena itu, penting untuk merepresentasikan data pengguna dengan relasi yang tidak membuat anomali setelah operasi penambahan, penghapusan, atau pembaruan tuple. Ini hanya dapat dicapai dengan analisis yang cermat terhadap batasan integritas, terutama dependensi data database.
Hubungan harus dirancang sedemikian rupa sehingga hanya atribut-atribut yang dikelompokkan yang ada secara alami bersama. Ini sebagian besar dapat dilakukan dengan pemahaman dasar tentang arti dari semua atribut data. Namun, kami masih memerlukan beberapa ukuran formal untuk memastikan tujuan desain kami.
Normalisasi adalah ukuran formal itu. Ini menjawab pertanyaan mengapa pengelompokan atribut tertentu akan lebih baik daripada yang lain.
Tujuh bentuk normal ada pada hari ini:
- Bentuk Normal Pertama (1NF)
- Bentuk Normal Kedua (2NF)
- Bentuk Normal Ketiga (3NF)
- Bentuk Normal Boyce-Codd (BCNF)
- Bentuk Normal Keempat (4NF)
- Bentuk Normal Kelima (5NF)
- Bentuk Normal Keenam atau Domain-key (6NF)
Baca: Jenis Tampilan dalam SQL
Daftar isi
Bentuk Normal Pertama (1NF atau Bentuk Minimal)
- Tidak ada urutan atas-ke-bawah ke baris dan urutan kiri-ke-kanan ke kolom.
- Tidak ada baris duplikat.
- Setiap persimpangan baris dan kolom berisi tepat satu nilai dari domain yang berlaku atau nilai nol. Kondisi ini menunjukkan bahwa semua nilai kolom harus berupa atom, skalar, atau hanya berisi satu nilai. Tidak ada pengulangan informasi atau nilai dalam beberapa kolom yang diperbolehkan di sini.
- Semua kolom teratur (yaitu baris tidak memiliki komponen tersembunyi seperti ID baris, ID objek, atau cap waktu tersembunyi).
Mari kita ambil contoh skema yang tidak dinormalisasi. Misalkan seorang desainer ingin mencatat nama dan nomor telepon pelanggan. Mereka mendefinisikan tabel pelanggan seperti yang ditunjukkan:
ID Pelanggan | Nama Depan | Nama belakang | Nomor telepon |
123 | Bima | saha | 555-861-2025 |
456 | kapil | Khanna | 555-403-1659, 555-776-4100 |
789 | kabit | Roy | 555-808-9633 |
Di sini, tidak dalam 1 NF. Kolom Nomor Telepon tidak bersifat atomik atau tidak memiliki nilai skalar, yaitu memiliki nilai lebih dari satu yang tidak diperbolehkan dalam 1 NF.
Untuk Membuatnya 1 NF
- Pertama-tama kita akan memecah (mengurai) tabel tunggal kita menjadi dua.
- Setiap tabel harus memiliki informasi tentang hanya satu entitas.
ID Pelanggan | Nama Depan | Nama belakang |
123 | Bima | saha |
456 | kapil | Khanna |
789 | kabit | Roy |
ID Pelanggan | Nomor telepon |
123 | 555-861-2025 |
456 | 555-403-1659 |
456 | 555-776-4100 |
789 | 555-808-9633 |
Grup nomor telepon yang berulang tidak terjadi dalam desain ini. Sebagai gantinya, setiap tautan Nomor Pelanggan-ke-Telepon muncul pada catatannya sendiri.
Checkout: Pertanyaan & Jawaban Wawancara SQL Paling Umum
Bentuk Normal Kedua
Setiap bentuk normal memiliki kriteria yang lebih membatasi daripada pendahulunya. Jadi setiap tabel yang berada dalam bentuk normal kedua (2NF) atau lebih tinggi, menurut definisi, juga dalam 1NF. Di sisi lain, tabel yang ada di 1NF mungkin atau mungkin tidak di 2NF; jika dalam 2NF, mungkin atau mungkin tidak dalam 3NF, dan seterusnya.
Sebuah tabel 1NF dikatakan berada dalam 2NF jika dan hanya jika tidak ada atribut nonprima yang secara fungsional bergantung pada bagian (subset yang tepat) dari kunci kandidat. (Atribut nonprima tidak termasuk dalam kunci kandidat mana pun.)
Perhatikan bahwa ketika tabel 1NF tidak memiliki kunci kandidat komposit (kunci kandidat terdiri dari lebih dari satu atribut), tabel secara otomatis berada dalam 2NF.
Periksa Apakah Hubungan R (A, B, C, D, E) dengan FD Ditetapkan sebagai { BC ? D, AC? JADI, B? E } dalam 2NF?
- Seperti yang kita lihat, penutupan AC adalah (AC)+ = {A, C, B, E, D} dengan menerapkan algoritma keanggotaan. Tetapi tidak satu pun dari himpunan bagiannya dapat menentukan sendiri semua atribut relasi, sehingga AC adalah kunci kandidat untuk relasi ini. Selain itu, baik A maupun C tidak dapat diturunkan dari atribut relasi lainnya, sehingga hanya akan ada 1 kunci kandidat yaitu {AC}.
- Di sini {A, C} adalah atribut prima dan {B, D, E} adalah atribut nonprima.
- Relasi R sudah dalam bentuk normal 1 karena DBMS relasional dalam 1NF tidak memungkinkan atribut multi-nilai atau komposit.
SM ? D dalam bentuk normal ke-2 karena BC bukan himpunan bagian yang tepat dari kunci kandidat AC,
AC? BE dalam bentuk normal ke-2 karena AC sendiri adalah kunci kandidat, dan
B ? E dalam bentuk normal ke-2 B bukan himpunan bagian yang tepat dari kunci kandidat AC.
Jadi relasi R yang diberikan berada dalam Bentuk Normal ke-2.
Bentuk Normal Ketiga
Sebuah tabel dikatakan dalam 3NF jika dan hanya jika untuk setiap dependensi fungsionalnya.
X → A , setidaknya salah satu dari kondisi berikut ini berlaku:
- X berisi A (yaitu, X → A adalah dependensi fungsional trivial), atau
- X adalah kunci super, atau
- A adalah atribut prima (yaitu, A hadir dalam kunci kandidat)
Definisi lain dari 3NF menyatakan bahwa setiap atribut bukan kunci dari R tidak bergantung secara transitif (yaitu bergantung langsung) pada kunci utama R. Ini berarti tidak ada atribut nonprima (bukan bagian dari kunci kandidat) yang secara fungsional bergantung pada atribut nonprima lainnya. Jika ada dua dependensi sedemikian rupa sehingga A ? B dan BC, maka dari FD ini dapat diturunkan A ? C. Ketergantungan AC ini bersifat transitif.
Contoh 3NF:
Perhatikan relasi berikut Order (Order#, Part, Supplier, UnitPrice, QtyOrdered) dengan himpunan FD yang diberikan:
Memesan# ? Suku Cadang, Pemasok, QtyOrdered dan Pemasok, Suku Cadang? Patokan harga)
Di sini Order# adalah kunci dari relasi tersebut.
Dengan menggunakan aksioma Amstrong, kita peroleh
Memesan# ? Bagian, Pesan? pemasok, dan pesanan? JumlahPesanan.
Memesan# ? Bagian, Pemasok dan Pemasok, Bagian ? Harga Satuan, keduanya memberikan Order# ? Patokan harga.
Jadi, kita melihat bahwa semua atribut nonprima bergantung pada kunci (Urutan#). Namun, ada ketergantungan transitif antara Order# dan UnitPrice. Jadi relasi ini tidak dalam 3NF. Bagaimana kita membuatnya di 3NF?
Kami tidak dapat menyimpan Harga Satuan Suku Cadang mana pun yang dipasok oleh Pemasok mana pun kecuali jika seseorang memesan Suku Cadang tersebut. Jadi kita harus menguraikan tabel untuk membuatnya mengikuti 3NF sebagai berikut.
Order (Order#, Part, Supplier, QtyOrdered) dan Price Master (Part, Supplier, UnitPrice).
Sekarang tidak ada ketergantungan transitif. Relasinya dalam 3NF.
Baca Juga: SQL untuk Ilmu Data
Pelajari Kursus Perangkat Lunak online dari Universitas top dunia. Dapatkan Program PG Eksekutif, Program Sertifikat Tingkat Lanjut, atau Program Magister untuk mempercepat karier Anda.
Kesimpulan
Masih ada lagi normalisasi, seperti BCNF, 4NF, 5NF dan 6NF. Singkatnya, BCNF tidak lain adalah perpanjangan dari 3NF, karena aturan terakhir 3NF tidak berlaku di sini. Semua dependensi fungsional harus memiliki atribut kunci di sebelah kiri dan tidak ada di sebelah kanan. (BCNF juga disebut 3.5NF). Namun, bentuk normal dari 4NF dan seterusnya jarang diterapkan dalam praktik reguler.
Jika Anda tertarik untuk mempelajari lebih lanjut tentang pengembangan tumpukan penuh, lihat Program PG Eksekutif upGrad & IIIT-B dalam Pengembangan Perangkat Lunak Tumpukan Penuh, yang dirancang untuk profesional yang bekerja dan menawarkan 500+ jam pelatihan ketat, 9+ proyek, dan penugasan, status Alumni IIIT-B, proyek batu penjuru praktis & bantuan pekerjaan dengan perusahaan-perusahaan top.
Apa itu normalisasi basis data?
Apa saja jenis-jenis bentuk normal?
Bentuk normal dikembangkan oleh Edgar F. Codd, bapak database relasional. Setiap bentuk normal adalah tingkat kebenaran logis keseluruhan dari model relasional dan melayani tujuan dalam desain database yang sebenarnya. Bentuk normal pertama, 1NF, adalah semua tentang desain tabel, dan melibatkan penghapusan duplikat dan memastikan bahwa setiap bagian data diwakili hanya sekali dalam tabel. Bentuk normal kedua adalah tentang kolom yang dapat digandakan - memecahnya menjadi beberapa tabel. Bentuk normal ketiga adalah tentang kelompok yang berulang - memecahnya menjadi beberapa tabel. Bentuk normal keempat adalah sekitar 1NF, 2NF, & 3NF - memastikan bahwa tabel bebas dari logika atau de-normalisasi.
Bagaimana cara menormalkan database?
Normalisasi database adalah proses memecahnya menjadi jumlah tabel terkecil. Pada akhirnya, database tidak akan memiliki bidang berulang dan tidak ada baris dengan informasi parsial. Tujuannya adalah untuk memastikan bahwa semua data ditautkan ke semua data lain yang relevan, dan ketika perubahan terjadi dalam satu catatan, semua catatan lain yang mungkin terkait juga berubah.