Apakah ada alat untuk memeriksa apakah database saya dinormalisasi ke bentuk normal ketiga?

20

Saya belajar tentang normalisasi baru-baru ini, dan memahami betapa pentingnya saat menerapkan skema baru.

Bagaimana saya bisa mengecek apakah database saya memenuhi persyaratan 2NF atau 3NF?

Tinjauan manual adalah pilihan yang pasti, tetapi saya sedang mencari alat otomatis di sini.

Saya tidak mencari alat point-and-klik, lebih banyak sesuatu yang akan menyoroti kemungkinan optimasi untuk membuat tabel 3NF compliant. Saya kira itu mungkin menggunakan statistik berdasarkan data sampel yang baik dan / atau analisis semantik nama kolom.

ack__
sumber
1
Saya harap alat seperti itu tidak ada. 2NF / 3NF tidak perlu ditegakkan. Merancang skema / model sering harus mempertimbangkan kepraktisan dan pertimbangan kinerja, yang biasanya mendorong xNF keluar jendela
Philᵀᴹ
2
Apakah ini berarti normalisasi tidak digunakan secara nyata? Saya berencana untuk menggunakannya sebagai titik awal, dan akan mempertimbangkan proses denormalisasi ketika memperlambat kinerja.
ack__
3
Desain skema lebih merupakan seni daripada sains. Tentu ada aturan dasar yang harus diikuti, tetapi begitu Anda melakukannya, Anda mulai merasakan apa yang berhasil dan yang tidak. Keahlian.
datagod
Saya tidak setuju dengan Phil. Normalisasi kadang-kadang cara untuk pergi. Lain kali skema bintang lebih baik. Itu tergantung pada apa yang Anda lakukan. Anda akan membutuhkan banyak tabel sebelum otomatisasi akan bermanfaat.
Walter Mitty

Jawaban:

24

Normalisasi benar-benar digunakan di dunia nyata ... dan mudah-mudahan Anda tahu bahwa 3NF hanyalah yang ketiga dari ... apa yang sekarang, 8? Tetapi 3NF harus menjadi target yang mudah.

Namun ... Saya berani mengatakan bahwa tidak ada alat seperti itu.

Normalisasi, secara teknis, adalah atribut dari setiap tabel. Dalam database yang diberikan, tabel yang berbeda mungkin memiliki tingkat normalisasi yang berbeda.

Setiap tabel mewakili fakta ... fakta tentang kejadian jenis tertentu (orang, akun, pesanan, pengiriman, barang, lokasi) termasuk, kadang-kadang, kunci asing yang mengarahkan Anda ke jenis fakta lain tentang hal itu.

Normalisasi berkaitan dengan seberapa akurat dan efisien fakta diwakili dalam tabel serta kemampuan desain tabel untuk mencegah pola data yang ambigu dan berlebihan.

Dengan demikian, diperlukan pemahaman tentang fakta aktual ... yang berada di luar ruang lingkup alat otomatis.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

Di dunia di mana semua instruktur mengajar semua mata pelajaran dan setiap siswa dapat mengambil kombinasi apa pun tetapi tidak lebih dari satu mata pelajaran pada setiap mata pelajaran dari masing-masing instruktur, tabel ini memang bisa dikatakan berada di 3NF. Di dunia nyata, membuat klaim 3NF untuk tabel ini tidak masuk akal.

Untuk memahami apa yang tidak ada dalam 3NF diperlukan pemahaman tentang sifat fakta yang diwakilinya. Dalam kenyataan kami, tabel ini tidak akan menjadi 3NF karena (antara alasan lain) subjek dan instruktur dikaitkan bersama dengan cara-cara yang tidak ada hubungannya dengan siswa. Jika kita memiliki kursus di mana instruktur mengajar mata pelajaran yang disimpan di tempat lain dalam database kita, mengapa kita menyalin kedua nilai di sini alih-alih kunci asing dari tabel lain yang menunjukkan bahwa siswa telah mendaftar untuk kursus? Jika instruktur diganti, kami harus mengubah banyak catatan di banyak tempat.

Semakin normal suatu basis data, semakin konsisten secara intrinsik dengan dunia nyata dan dengan dirinya sendiri, dan semakin sulit untuk fakta-fakta basis data secara tidak sengaja menjadi tidak benar. Desain basis data adalah seni, tetapi yang paling pasti adalah ilmu juga.

Meskipun saya tidak melihat secara langsung dengan semua yang ditulisnya, saya akan merekomendasikan buku Chris Date, Desain Basis Data dan Teori Relasional: Bentuk Normal dan All That Jazz yang masuk ke detail luar biasa tentang teori yang mendasari model relasional.

Michael - sqlbot
sumber
2
Terima kasih atas jawaban terinci ini. Namun, mengikuti contoh Anda, alat yang menganalisis data sampel mungkin dapat mendeteksi bahwa nilai "instruktur" banyak diulang, dan juga muncul di tabel lain, oleh karena itu menyarankan itu mungkin kandidat untuk kunci asing atau perubahan lain yang akan membuat tabel ini 3nf sesuai, atau apakah saya melewatkan sesuatu?
ack__
2
Benar, tetapi kata kuncinya masih "menyarankan." Sebuah alat dapat menyarankan perubahan struktural dengan mencari redundansi yang tampak, tetapi saya masih akan mempertahankan bahwa redundansi asli dan penampilan korelasi yang kebetulan akan sulit untuk alat semacam itu untuk membedakannya. Pengetahuan tentang sifat dunia nyata dari data diperlukan.
Michael - sqlbot
@ack__: berada dalam bentuk normal ke-3 atau bukan adalah properti dari relasi bukan dari pasangan atau serangkaian relasi. Jadi saya tidak bisa melihat bahwa membangun hubungan kunci asing ada hubungannya dengan bentuk normal ke-3.
miracle173
Saya pikir masalah yang lebih besar adalah bahwa menentukan dependensi fungsional multi-kolom bermasalah bermasalah. jika nilainya mungkin sama dan mewakili entitas yang berbeda (yaitu di mana kunci komposit terlibat). Pertimbangkan sebuah tabel: (address_text, kota, state_province, mail_code, negara). Sekarang ini tidak dinormalisasi. (kota, status_province) -> (negara). Jadi untuk menormalkan sepenuhnya kita harus memecah ini menjadi setidaknya tiga tabel, mungkin empat (penanganan mail_code!) Tetapi kunci komposit membuat ini bermasalah untuk dideteksi dengan cepat. Juga comp. kunci adalah kunci untuk ide nf jadi jangan abaikan mereka!
Chris Travers
Dapatkah seseorang menjelaskan mengapa "Di dunia di mana seorang siswa hanya dapat mengambil kursus dalam satu mata pelajaran dan semua instruktur mengajar semua mata pelajaran, tabel ini memang bisa dikatakan berada di 3NF" Itu tampaknya menetapkan bahwa Siswa -> subjek dan tidak lebih. Maka rasa kunci untuk tabel ini adalah (siswa, instruktur) bukankah itu akan menghancurkan 3NF? Apa yang setiap guru mengajar setiap mata pelajaran membantu kita dengan?
Drew Verlee
5

Bagian dari titik menggunakan metode formal dalam mengembangkan teori relasional adalah mengembangkan prosedur yang dapat diotomatisasi. Saya cukup yakin CJ Date keluar dan mengatakan bahwa dalam Pengantar Sistem Basis Data .

Beberapa alat CASE yang dirilis pada akhir 1980-an atau awal 1990-an dapat menurunkan setiap skema 5NF yang mungkin baik dengan menganalisis diagram ER atau dengan analisis statistik data sampel.

Visio Enterprise Architect (saya pikir) adalah alat yang relatif baru di sepanjang garis tersebut.

Mike Sherrill 'Cat Recall'
sumber
Bagus. Saya memang mencari kedua cara untuk menganalisis skema (diagram ER dan analisis data sampel). Apakah Anda tahu ada perangkat lunak terbaru selain Visio? Saya belum memiliki lisensi untuk itu.
ack__
1
Tetapi diagram ER Anda pada dasarnya adalah diagram model objek. Itu tidak persis sama dengan mengambil database yang ada dan menentukan apakah itu dinormalisasi darinya.
Chris Travers
2
Analisis tabel dengan sampel data dan saran untuk normalisasi adalah fitur Access, dan dalam versi awal, jika saya ingat dengan baik.
ypercubeᵀᴹ
@ Chris: ya, saya merujuk ke diagram ER untuk analisis semantik saja.
ack__
@ ypercube: Terima kasih atas tipnya, saya akan melihat Access.
ack__
2

Saya pikir jika Anda bisa menulis alat untuk melakukannya, masih akan memerlukan tinjauan manual untuk membuat pekerjaan. bentuk normal didefinisikan berdasarkan dependensi fungsional dan ini tidak dapat ditentukan hanya dari inspeksi data. Dengan kata lain, ini adalah masalah logika induktif daripada deduktif untuk menentukan apakah ada ketergantungan fungsional.

Chris Travers
sumber
Memang akan ada beberapa tinjauan manual untuk dilakukan, saya tidak mengharapkan alat untuk melakukannya sepenuhnya secara otomatis. Tapi saya cukup yakin sebagian besar pekerjaan dapat diotomatisasi dengan menganalisis data yang ada di DB (setidaknya, sampel itu), dan / atau bidang nama / tipe.
ack__
1
Bagaimana? Normalisasi didefinisikan pada dependensi gabungan dan dependensi fungsional. Ketergantungan fungsional pada dasarnya mudah didefinisikan sebagai: untuk setiap kemungkinan nilai superkey, ada tepat satu nilai dalam dependensi fungsional. Anda tidak bisa sampai di sana dengan mengotomatiskan tinjauan data karena hanya karena Anda memiliki, untuk perangkat Anda saat ini, apa yang tampaknya merupakan ketergantungan fungsional, itu tidak berarti bahwa kunci baru akan sesuai. Ini sangat mirip dengan divisi korelasi vs sebab-akibat lama. Anda tidak dapat menginduksi ketergantungan fungsional dengan mengamati apa yang saat ini ada di database.
Chris Travers
2
setidaknya alat dapat menyarankan bahwa suatu relasi mungkin ada. jika kualitas dan ukuran sampel data cukup besar, akurasi dugaan seperti itu akan cukup tinggi untuk tujuan praktis.
miracle173
Mungkin. Tapi mari kita ambil contoh nyata yang cukup bijaksana untuk desain-relasional: alamat. Bagaimana seharusnya alamat surat dinormalisasi? Berapa banyak tabel yang disarankan? Dengan pemahaman saya tentang 3NF, Anda memerlukan tabel untuk negara, negara bagian / provinsi, dan kota. Saya tidak tahu apakah gangguan kode pos / kota masuk akal tetapi mungkin memang demikian. Tetapi bagaimana Anda menganalisis data yang ada dan menentukan (kota, negara bagian) -> negara itu? Bagaimana Anda menentukan apakah / jika tidak kode pos terkait secara global dengan konstruksi ini?
Chris Travers