Memahami normalisasi
Petunjuk / Saran
Lihat tab Teks dan gambar untuk detail selengkapnya!
Normalisasi adalah istilah yang digunakan oleh profesional database untuk proses desain skema yang meminimalkan duplikasi data dan memberlakukan integritas data.
Meskipun ada banyak aturan kompleks yang menentukan proses refaktor data ke dalam berbagai tingkat (atau bentuk) normalisasi, definisi sederhana untuk tujuan praktis adalah:
- Pisahkan setiap entitas ke dalam tabelnya sendiri.
- Pisahkan setiap atribut diskrit ke dalam kolomnya sendiri.
- Mengidentifikasi setiap instans entitas (baris) secara unik menggunakan kunci primer.
- Gunakan kolom kunci asing untuk menautkan entitas terkait.
Untuk memahami prinsip-prinsip inti normalisasi, misalkan tabel berikut mewakili spreadsheet yang digunakan perusahaan untuk melacak penjualannya.
| Nomor Pesanan | NamaPelanggan | CustomerAddress | ProductName | Harga Satuan | Jumlah |
|---|---|---|---|---|---|
| 1 | Jane Smith | 42 Oak St.Seattle | Widget A | 9.99 | 2 |
| 1 | Jane Smith | 42 Oak St.Seattle | Widget B | 4.49 | 1 |
| 2 | Bob Jones | 18 Pine Ave Portland | Widget A | 9.99 | 5 |
| 2 | Bob Jones | 18 Pine Ave Portland | Gadget X | 24,99 | 1 |
| 3 | Jane Smith | 42 Oak St.Seattle | Gadget X | 24,99 | 3 |
| 3 | Jane Smith | 42 Oak St.Seattle | Widget B | 4.49 | 2 |
Perhatikan bahwa pelanggan dan detail produk diduplikasi untuk setiap item individu yang dijual; dan bahwa nama pelanggan dan alamat pos, serta nama dan harga produk digabungkan dalam sel spreadsheet yang sama.
Sekarang mari kita lihat bagaimana normalisasi mengubah cara data disimpan.
Setiap entitas yang diwakili dalam data (pelanggan, produk, pesanan penjualan, dan item baris) disimpan dalam tabelnya sendiri, dan setiap atribut diskrit entitas tersebut berada di kolomnya sendiri.
Merekam setiap instans entitas sebagai baris dalam tabel khusus entitas menghapus duplikasi data. Misalnya, untuk mengubah alamat pelanggan, Anda hanya perlu mengubah nilai dalam satu baris.
Penguraian atribut ke dalam kolom individual memastikan bahwa setiap nilai dibatasi ke jenis data yang sesuai - misalnya, harga produk muSt.be nilai desimal, sementara jumlah item baris muSt.be angka bilangan bulat. Selain itu, pembuatan kolom individual memberikan tingkat granularitas yang berguna dalam data untuk kueri - misalnya, Anda dapat dengan mudah memfilter pelanggan kepada mereka yang tinggal di kota tertentu.
Instans setiap entitas diidentifikasi secara unik oleh ID atau nilai kunci lainnya, yang dikenal sebagai kunci utama; dan ketika satu entitas mereferensikan entitas lain (misalnya, pesanan memiliki pelanggan terkait), kunci utama entitas terkait disimpan sebagai kunci asing. Anda dapat mencari alamat pelanggan (yang disimpan hanya sekali) untuk setiap rekaman dalam tabel Pesanan dengan merujuk catatan yang sesuai dalam tabel Pelanggan . Biasanya, sistem manajemen database relasional (RDBMS) dapat menerapkan integritas referensial untuk memastikan bahwa nilai yang dimasukkan ke dalam bidang kunci asing memiliki kunci utama yang sesuai yang ada dalam tabel terkait - misalnya, mencegah pesanan untuk pelanggan yang tidak ada.
Dalam beberapa kasus, kunci (primer atau asing) dapat didefinisikan sebagai kunci komposit berdasarkan kombinasi unik dari beberapa kolom. Misalnya, tabel LineItem dalam contoh di atas menggunakan kombinasi unik OrderNo dan ItemNo untuk mengidentifikasi item baris dari urutan individual.