Mengapa orang database melanjutkan tentang normalisasi?
Apa itu? Bagaimana itu membantu?
Apakah itu berlaku untuk apa pun di luar database?
Mengapa orang database melanjutkan tentang normalisasi?
Apa itu? Bagaimana itu membantu?
Apakah itu berlaku untuk apa pun di luar database?
Normalisasi pada dasarnya adalah untuk mendesain skema database sedemikian rupa sehingga data duplikat dan berlebihan dapat dihindari. Jika beberapa bagian data diduplikasi di beberapa tempat di database, ada risiko data diperbarui di satu tempat tetapi tidak di tempat lain, yang menyebabkan kerusakan data.
Ada sejumlah tingkat normalisasi dari 1. bentuk normal sampai 5. bentuk normal. Setiap bentuk normal menjelaskan cara menghilangkan beberapa masalah tertentu, biasanya terkait dengan redundansi.
Beberapa kesalahan normalisasi umum:
(1) Memiliki lebih dari satu nilai dalam sel. Contoh:
UserId | Car
---------------------
1 | Toyota
2 | Ford,Cadillac
Di sini kolom "Mobil" (yang merupakan string) memiliki beberapa nilai. Itu menyinggung bentuk normal pertama, yang mengatakan bahwa setiap sel seharusnya hanya memiliki satu nilai. Kami dapat menormalkan masalah ini dengan memiliki baris terpisah per mobil:
UserId | Car
---------------------
1 | Toyota
2 | Ford
2 | Cadillac
Masalah dengan memiliki beberapa nilai dalam satu sel adalah rumit untuk diperbarui, rumit untuk membuat kueri, dan Anda tidak dapat menerapkan indeks, batasan, dan sebagainya.
(2) Memiliki data non-kunci yang redundan (mis. Data diulang secara tidak perlu dalam beberapa baris). Contoh:
UserId | UserName | Car
-----------------------
1 | John | Toyota
2 | Sue | Ford
2 | Sue | Cadillac
Desain ini menjadi masalah karena nama diulang setiap kolom, meskipun nama selalu ditentukan oleh UserId. Ini secara teoritis memungkinkan untuk mengubah nama Sue di satu baris dan bukan yang lain, yang merupakan korupsi data. Masalahnya diselesaikan dengan membagi tabel menjadi dua, dan membuat hubungan kunci utama / kunci asing:
UserId(FK) | Car UserId(PK) | UserName
--------------------- -----------------
1 | Toyota 1 | John
2 | Ford 2 | Sue
2 | Cadillac
Sekarang sepertinya kita masih memiliki data yang berlebihan karena UserId berulang; Namun kendala PK / FK memastikan bahwa nilai tidak dapat diperbarui secara independen, sehingga integritas aman.
Apakah itu penting? Ya itu sangat penting. Dengan memiliki database dengan kesalahan normalisasi, Anda membuka risiko mendapatkan data yang tidak valid atau rusak ke dalam database. Karena data "hidup selamanya", sangat sulit untuk menyingkirkan data yang rusak saat pertama kali masuk ke database.
Jangan takut dengan normalisasi . Definisi teknis resmi dari tingkat normalisasi cukup tumpul. Itu membuatnya terdengar seperti normalisasi adalah proses matematika yang rumit. Namun, normalisasi pada dasarnya hanyalah akal sehat, dan Anda akan menemukan bahwa jika Anda mendesain skema database menggunakan akal sehat biasanya akan dinormalisasi sepenuhnya.
Ada sejumlah kesalahpahaman seputar normalisasi:
beberapa percaya bahwa database yang dinormalisasi lebih lambat, dan denormalisasi meningkatkan kinerja. Ini hanya berlaku dalam kasus yang sangat khusus. Biasanya database yang dinormalisasi juga yang tercepat.
terkadang normalisasi digambarkan sebagai proses desain bertahap dan Anda harus memutuskan "kapan harus berhenti". Tetapi sebenarnya tingkat normalisasi hanya menggambarkan masalah spesifik yang berbeda. Masalah yang diselesaikan dengan formulir normal di atas NF ke-3 adalah masalah yang cukup langka di tempat pertama, jadi kemungkinan besar skema Anda sudah dalam 5NF.
Apakah itu berlaku untuk apa pun di luar database? Tidak secara langsung, tidak. Prinsip normalisasi cukup spesifik untuk database relasional. Namun tema umum yang mendasari - bahwa Anda tidak boleh memiliki data duplikat jika contoh yang berbeda bisa tidak sinkron - dapat diterapkan secara luas. Ini pada dasarnya adalah prinsip KERING .
Aturan normalisasi (sumber: tidak diketahui)
... Jadi bantu aku Codd.
sumber
Yang terpenting, ini berfungsi untuk menghapus duplikasi dari catatan database. Misalnya jika Anda memiliki lebih dari satu tempat (tabel) di mana nama seseorang bisa muncul, Anda memindahkan nama ke tabel terpisah dan mereferensikannya di tempat lain. Dengan cara ini jika nanti Anda perlu mengganti nama orang, Anda hanya perlu menggantinya di satu tempat.
Ini penting untuk desain database yang tepat dan dalam teori Anda harus menggunakannya sebanyak mungkin untuk menjaga integritas data Anda. Namun ketika mengambil informasi dari banyak tabel Anda kehilangan beberapa kinerja dan itulah mengapa terkadang Anda bisa melihat tabel database yang dinormalisasi (juga disebut diratakan) digunakan dalam aplikasi kinerja kritis.
Saran saya adalah mulai dengan tingkat normalisasi yang baik dan lakukan de-normalisasi hanya jika benar-benar diperlukan
PS juga periksa artikel ini: http://en.wikipedia.org/wiki/Database_normalization untuk membaca lebih lanjut tentang subjek dan tentang apa yang disebut bentuk normal
sumber
Normalisasi prosedur yang digunakan untuk menghilangkan redundansi dan ketergantungan fungsional antar kolom dalam sebuah tabel.
Ada beberapa bentuk normal, umumnya ditunjukkan dengan angka. Jumlah yang lebih tinggi berarti lebih sedikit redundansi dan ketergantungan. Setiap tabel SQL dalam 1NF (bentuk normal pertama, cukup banyak menurut definisi) Normalisasi berarti mengubah skema (sering mempartisi tabel) dengan cara yang dapat dibalik, memberikan model yang secara fungsional identik, kecuali dengan redundansi dan ketergantungan yang lebih sedikit.
Redundansi dan ketergantungan data tidak diinginkan karena dapat menyebabkan ketidakkonsistenan saat memodifikasi data.
sumber
Ini dimaksudkan untuk mengurangi redundansi data.
Untuk diskusi yang lebih formal, lihat Wikipedia http://en.wikipedia.org/wiki/Database_normalization
Saya akan memberikan contoh yang agak sederhana.
Asumsikan database organisasi yang biasanya berisi anggota keluarga
bisa dinormalisasi sebagai
dan meja keluarga
Normalisasi Hampir Lengkap (BCNF) biasanya tidak digunakan dalam produksi, tetapi merupakan langkah perantara. Setelah Anda meletakkan database di BCNF, langkah selanjutnya biasanya adalah De-normalisasi dengan cara yang logis untuk mempercepat kueri dan mengurangi kompleksitas penyisipan umum tertentu. Namun, Anda tidak dapat melakukan ini dengan baik tanpa menormalkannya dengan benar terlebih dahulu.
Idenya adalah bahwa informasi yang berlebihan direduksi menjadi satu entri. Ini sangat berguna di bidang seperti alamat, di mana Tn. Chris mengirimkan alamatnya sebagai Unit-7 123 Main St. dan Ny. Chris mencantumkan Suite-7 123 Main Street, yang akan muncul di tabel asli sebagai dua alamat berbeda.
Biasanya, teknik yang digunakan adalah menemukan elemen berulang, dan mengisolasi bidang tersebut ke dalam tabel lain dengan id unik dan mengganti elemen berulang dengan kunci utama yang mereferensikan tabel baru.
sumber
Mengutip Tanggal CJ: Teori itu praktis.
Penyimpangan dari normalisasi akan mengakibatkan anomali tertentu dalam database Anda.
Penyimpangan dari Bentuk Normal Pertama akan menyebabkan anomali akses, artinya Anda harus mendekomposisi dan memindai nilai individual untuk menemukan apa yang Anda cari. Misalnya, jika salah satu nilainya adalah string "Ford, Cadillac" seperti yang diberikan oleh respons sebelumnya, dan Anda mencari semua kejadian "Ford", Anda harus membongkar string dan melihat substring. Ini, sampai batas tertentu, mengalahkan tujuan penyimpanan data dalam database relasional.
Definisi Bentuk Normal Pertama telah berubah sejak tahun 1970, tetapi perbedaan tersebut tidak perlu menjadi perhatian Anda untuk saat ini. Jika Anda mendesain tabel SQL menggunakan model data relasional, tabel Anda secara otomatis akan berada dalam 1NF.
Penyimpangan dari Bentuk Normal Kedua dan seterusnya akan menyebabkan anomali pembaruan, karena fakta yang sama disimpan di lebih dari satu tempat. Masalah ini membuat beberapa fakta tidak mungkin disimpan tanpa menyimpan fakta lain yang mungkin tidak ada, dan oleh karena itu harus ditemukan. Atau ketika fakta berubah, Anda mungkin harus mencari semua lokasi di mana fakta disimpan dan memperbarui semua tempat itu, jangan sampai Anda berakhir dengan database yang bertentangan dengan dirinya sendiri. Dan, ketika Anda pergi untuk menghapus baris dari database, Anda mungkin menemukan bahwa jika Anda melakukannya, Anda menghapus satu-satunya tempat di mana fakta yang masih diperlukan disimpan.
Ini adalah masalah logis, bukan masalah kinerja atau masalah ruang. Terkadang Anda bisa mengatasi anomali pembaruan ini dengan pemrograman yang cermat. Kadang-kadang (sering) lebih baik mencegah masalah sejak awal dengan mengikuti bentuk normal.
Terlepas dari nilai dalam apa yang telah dikatakan, harus disebutkan bahwa normalisasi adalah pendekatan dari bawah ke atas, bukan pendekatan dari atas ke bawah. Jika Anda mengikuti metodologi tertentu dalam analisis data Anda, dan dalam desain awal Anda, Anda dapat dijamin bahwa desain tersebut paling tidak sesuai dengan 3NF. Dalam banyak kasus, desain akan dinormalisasi sepenuhnya.
Di mana Anda mungkin benar-benar ingin menerapkan konsep yang diajarkan di bawah normalisasi adalah ketika Anda diberikan data warisan, dari database warisan atau dari file yang terdiri dari catatan, dan data dirancang dengan ketidaktahuan sama sekali tentang bentuk normal dan konsekuensi kepergian. dari mereka. Dalam kasus ini, Anda mungkin perlu menemukan penyimpangan dari normalisasi, dan memperbaiki desain.
Peringatan: normalisasi sering diajarkan dengan nuansa religius, seolah-olah setiap penyimpangan dari normalisasi penuh adalah dosa, pelanggaran terhadap Codd. (permainan kata kecil di sana). Jangan beli itu. Saat Anda benar-benar mempelajari desain database, Anda tidak hanya akan tahu cara mengikuti aturan, tetapi juga tahu kapan aman untuk melanggarnya.
sumber
Normalisasi adalah salah satu konsep dasar. Artinya ada dua hal yang tidak saling mempengaruhi.
Dalam database secara khusus berarti bahwa dua (atau lebih) tabel tidak berisi data yang sama, yaitu tidak memiliki redundansi.
Pada pandangan pertama, itu sangat bagus karena peluang Anda untuk membuat beberapa masalah sinkronisasi mendekati nol, Anda selalu tahu di mana data Anda, dll. Tapi, mungkin, jumlah tabel Anda akan bertambah dan Anda akan mengalami masalah untuk menyilangkan data dan untuk mendapatkan beberapa hasil ringkasan.
Jadi, pada akhirnya Anda akan menyelesaikan desain database yang tidak dinormalisasi murni, dengan beberapa redundansi (ini akan berada di beberapa tingkat kemungkinan normalisasi).
sumber
Normalisasi adalah langkah proses formal bijak yang memungkinkan kita mendekomposisi tabel database sedemikian rupa sehingga redundansi data dan anomali pembaruan diminimalkan.
Proses Normalisasi
Kesopanan
Bentuk normal pertama jika dan hanya jika domain dari setiap atribut hanya berisi nilai atom (nilai atom adalah nilai yang tidak dapat dibagi), dan nilai setiap atribut hanya berisi satu nilai dari domain itu (contoh: - domain untuk kolom jenis kelamin adalah: "M", "F".).
Bentuk normal pertama menerapkan kriteria ini:
Bentuk normal kedua = 1NF + tidak ada ketergantungan parsial yaitu Semua atribut non-kunci berfungsi penuh tergantung pada kunci primer.
Bentuk normal ketiga = 2NF + tidak ada ketergantungan transitif yaitu Semua atribut non-kunci berfungsi penuh tergantung LANGSUNG hanya pada kunci primer.
Bentuk normal Boyce – Codd (atau BCNF atau 3.5NF) adalah versi yang sedikit lebih kuat dari bentuk normal ketiga (3NF).
Catatan: - Bentuk normal Kedua, Ketiga, dan Boyce-Codd berkaitan dengan dependensi fungsional. Contoh
Bentuk normal keempat = 3NF + hapus dependensi multinilai
Bentuk normal kelima = 4NF + menghapus ketergantungan gabungan
sumber
Seperti yang dikatakan Martin Kleppman dalam bukunya Designing Data Intensive Applications:
Sastra tentang model relasional membedakan beberapa bentuk normal yang berbeda, tetapi perbedaan tersebut tidak begitu menarik perhatian praktisnya. Sebagai aturan praktis, jika Anda menggandakan nilai yang dapat disimpan hanya di satu tempat, skema tidak dinormalisasi.
sumber
Ini membantu mencegah duplikat (dan lebih buruk lagi, konflik) data.
Bisa berdampak negatif pada kinerja sekalipun.
sumber