Bentuk Normal Ketiga

Bentuk Normal Ketiga



Ini adalah bahagian tiga siri, Lima Bentuk Biasa. Tajuk dua bahagian pertama (tutorial) ialah Bentuk Biasa Pertama, diikuti oleh Bentuk Biasa Kedua. Dalam bahagian siri ini, Bentuk Normal Ketiga diterangkan.

Penjelasannya mengikut jalan cerita: Seorang bapa telah meninggal dunia dan telah meninggalkan sejumlah wang untuk anaknya. Anak lelaki itu memutuskan untuk melaburkan wang itu di kedai serbaneka. Kedai serbaneka, juga dikenali sebagai kedai serbaneka, ialah perniagaan runcit kecil yang menerima barangan harian daripada pembekal dan menjualnya kepada pelanggan individu di kawasan kejiranan.







Pada ketika ini, kedai sudah ada stok, dan beberapa jualan telah dibuat. Anak lelaki, yang merupakan pemilik perniagaan, mempunyai beberapa pekerja, yang dipanggil kerani dalam tutorial ini. Pemilik dan mana-mana pekerja boleh menerima bekalan dan membuat jualan selepas merekodkan produk.



Walau bagaimanapun, sebelum kedai bermula, pemilik mahupun pekerja tidak mengetahui apa-apa tentang bentuk biasa. Jadi, mereka merekodkan segala-galanya sebagai transaksi dalam satu jadual dan satu buku latihan. Mereka tidak mempunyai komputer.



Anda, pembaca, telah menyelesaikan lima bahagian siri tutorial ini; anda kini seorang pembangun pangkalan data. Pemilik kedai serbaneka itu ialah rakan anda. Anda melawat kedai itu dua hari lalu dan melatih pemilik dan kerani untuk menghasilkan meja dalam bentuk biasa yang pertama. Anda juga melawat kedai semalam dan melatih mereka tentang cara membuat jadual dalam bentuk biasa kedua daripada bentuk biasa pertama.





Hari ini, anda baru sahaja tiba di kedai untuk lawatan untuk melatih mereka tentang cara menghasilkan jadual dalam bentuk normal ketiga daripada bentuk normal kedua. Semua jadual yang mereka ada pada masa ini adalah dalam bentuk normal kedua. Jadual (mengikut nama dan tajuk lajur) ialah:

Produk (ID produk, ID kategori, produk)
Kategori(kategoriID, kategori)



Jualan (saleID, pelanggan, pekerja, tarikh)
Butiran Jualan (ID jualan, ID produk, nomborDijual, harga jualan)

Pesanan (orderID, pembekal, pekerja, tarikh)
Butiran Pesanan(ID pesanan, ID produk, nomborBeli, kosHarga)

Kekunci tunggal atau komposit digariskan.

Selepas merumuskan apa yang telah diajar dalam dua hari sebelumnya dan sebelum anda boleh melakukan apa-apa, pemilik bertanya:

“Bagaimana pula dengan nombor telefon, alamat, dsb., untuk pelanggan dan pekerja?

Bagaimana pula dengan kuantiti dalam stok, tahap pesanan semula, dsb., untuk produk?
Adakah mereka memerlukan meja berasingan mereka sendiri, atau patutkah mereka dipasang ke dalam jadual sekarang?”

Anda, pembangun pangkalan data, jawab:

“Tahniah, Pemilik! Anda secara tidak langsung telah memperkenalkan isu Borang Normal Ketiga.”

awak teruskan.

Lajur Lain yang Diperlukan

Lajur lain yang diperlukan terlebih dahulu ditambahkan pada jadual sebelumnya, iaitu dalam 1NF dan 2NF. Beberapa nama lajur sebelumnya diubah suai.

Sekurang-kurangnya, jadual Kategori harus mempunyai lajur berikut:

Kategori(ID kategori, Nama kategori, perihalan)

Penerangan ialah perenggan pendek yang menerangkan kategori. Jadual kategori ini sudah pun dalam 1NF, 2NF dan 3NF. 3NF dijelaskan di bawah:

Sekurang-kurangnya, jadual Produk harus mempunyai lajur berikut:

Produk (ID produk, ID kategori, ID pembekal, Nama produk, harga unit, kuantitiInStock, Tahap pesanan semula)

Memandangkan setiap produk sedang dijual, tahap rendah (bilangan) produk akan dicapai apabila produk itu perlu ditempah semula, jadi pelanggan tidak boleh datang ke kedai dan tidak mempunyai produk. Ketiadaan sedemikian tidak baik untuk perniagaan. quantityInStock ialah bilangan produk tertentu dalam stok. Ini termasuk apa yang ada di kedai dan apa yang ada di rak.

categoryID dan supplierID adalah kunci asing. Itulah sebabnya mereka mempunyai garis bawah sempang dan bukannya garis bawah tunggal. Kunci asing diterangkan di bawah. Dalam bahagian sebelumnya dalam siri (Borang Normal Kedua), categoryID ialah sebahagian daripada kunci utama dengan satu garis bawah kerana cara ia tiba. Walau bagaimanapun, daripada penjelasan di bawah, adalah jelas bahawa categoryID mestilah kunci asing (dengan garis bawah sempang).

Jadual produk ini sudah pun dalam 1NF, 2NF dan 3NF. Lihat mengapa ia berada dalam 3NF di bawah:

Sekurang-kurangnya, jadual SaleDetails harus mempunyai lajur berikut:

Butiran Jualan(ID jualan, ID produk, harga jualan unit, kuantiti, diskaun)

Nilai diskaun dijangka sifar pada kebanyakan masa. Diskaun ialah diskaun yang diberikan oleh kedai kepada pelanggan.

Sekurang-kurangnya, jadual OrderDetails harus mempunyai lajur berikut:

Butiran Pesanan(ID pesanan, ID produk, harga unitKos, kuantiti, diskaun)

Nilai diskaun dijangka sifar pada kebanyakan masa. Diskaun di sini ialah diskaun yang pembekal berikan kepada kedai.

Seperti yang dilihat di bawah, jadual Produk boleh dipertimbangkan dalam 2NF atau 3NF. Jadual Jualan dan Pesanan mempunyai isu 3NF. Hanya Jadual Jualan akan digunakan untuk menerangkan isu dan penyelesaian. 3NF untuk Jadual Pesanan dan Jadual Produk mengikut alasan yang sama dan hanya akan dipetik.

Semasa menambah lajur, jadual Jualan ialah:

Jualan(ID jualan, tarikhNama pelanggan, telefon, alamat, bandar, wilayah, Poskod, Negara, pekerja)

Tujuh lajur telah menggantikan lajur pelanggan dalam jadual asal. Memandangkan pelanggan adalah orang dalam kejiranan, sel untuk lajur bandar, wilayah(negeri), Poskod dan negara, boleh dibiarkan kosong, walaupun ia tidak dibiarkan kosong dalam artikel ini.

Jadual Jualan ini masih dalam 2NF kerana kedua-dua peraturan 1NF dan 2NF tidak dilanggar. Walau bagaimanapun, perlu disedari bahawa dalam baris jadual Jualan, pelanggan (nama) telah digantikan dengan tujuh sel baris pelanggan.

Nota: sel alamat mempunyai nombor rumah, nama jalan atau jalan dan nama bandar, semuanya dipisahkan dengan koma. Sebuah bandar boleh dianggap sebagai terdiri daripada beberapa bandar. Walaupun koma memisahkan komponen rentetan tertentu ini, ia membentuk satu nilai sel dan bukan tiga nilai sel.

Lajur pekerja juga perlu diganti dengan tujuh lajur sedemikian. Walau bagaimanapun, itu tidak dilakukan dalam tutorial ini untuk menjimatkan masa dan ruang pengajaran. Jadi, jadual Jualan dengan data boleh menjadi:

Jadual Jualan – 2NF – Tanpa ID pelanggan

Lajur SaleID jenis data ialah integer atau, lebih baik, kenaikan automatik. Jenis data lajur dateSold ialah tarikh dan bukan nombor kerana ia mempunyai aksara '/', yang bukan digit. Jenis data untuk lajur yang lain, termasuk lajur telefon, ialah rentetan (atau teks). Nilai telefon mempunyai aksara '-', yang bukan digit.

Ambil perhatian bahawa untuk setiap baris, pelanggan (nama), seperti dalam bahagian siri sebelumnya, telah digantikan dengan tujuh sel, salah satu daripadanya masih nama pelanggan. Ini bermakna data pelanggan adalah entiti. Pada masa ini, nama pelanggan mengenal pasti enam datanya yang lain berturut-turut. Jika jadual ini diprogramkan, adalah mudah untuk mengenal pasti entiti pelanggan dalam setiap baris dengan integer (bukan kenaikan automatik). Dalam kes itu, lajur ID pelanggan harus mendahului nama pelanggan. Jadual sebelumnya menjadi:

Jadual Jualan – 2NF – Dengan ID pelanggan

Terdapat tiga ID pelanggan: 1, 2 dan 3, dengan 1 berlaku lima kali untuk John Smith, 2 berlaku dua kali untuk James Taylor dan 3 berlaku sekali untuk Susan Wright.

Ambil perhatian bahawa sesetengah ID pelanggan dan tanggungannya berulang.

Peraturan untuk Bentuk Biasa Ketiga

Jadual berada dalam Bentuk Biasa Ketiga jika ia mematuhi peraturan berikut:

  1. Ia sepatutnya sudah berada dalam Borang Normal Kedua.
  2. Dan ia tidak sepatutnya mempunyai Ketergantungan Transitif.

Kemudian salah seorang kerani (pekerja) bertanya, 'Apakah kebergantungan transitif?'. Dan anda, pembangun pangkalan data, menjawab, 'Itu soalan yang bagus!'

Kebergantungan Transitif

Memang benar bahawa berturut-turut, SaleID mengenal pasti semua nilai dalam baris; walau bagaimanapun, customerID mengenal pasti tujuh nilai datanya tetapi tidak mengenal pasti nilai selebihnya yang dikenal pasti oleh SaleID dalam baris itu. Dengan kata lain, SaleID bergantung pada sepuluh nilai sel dalam setiap baris. Walau bagaimanapun, ID pelanggan bergantung pada tujuh nilai sel dalam baris yang sama, tetapi ID pelanggan tidak bergantung pada SaleID dan nilai lain yang bergantung pada SaleID.

Kebergantungan sedemikian untuk custumerID ialah kebergantungan transitif. Dan ID pelanggan dipanggil kunci asing dan sempang digariskan dalam siri tutorial ini, The Five Normal Forms.

Katakan atribut bukan prima (nilai sel bukan primer) bergantung pada atribut bukan prima yang lain dan atribut bukan prima yang dipersoalkan (cth., ID pelanggan dan tanggungannya) tidak bergantung pada kunci utama dan seluruh sel nilai dalam baris. Maka itu adalah pergantungan transitif.

Jadual Jualan sebelumnya dengan kunci asing dan tanggungannya, akan menyebabkan masalah perakaunan (anomali).

Jadual Jualan Dari 2NF hingga 3NF

Untuk menyelesaikan masalah yang ditimbulkan oleh kunci asing dan tanggungannya, keluarkan kunci asing dan tanggungannya, untuk membentuk jadual baharu tanpa ulangan. Walau bagaimanapun, walaupun kunci asing tidak bergantung pada kunci utama, kunci utama bergantung pada kunci asing. Jadi, salinan kunci asing mesti kekal dalam jadual induk. Jadual jualan baharu, pada ketika ini, adalah mematuhi 1NF, 2NF dan 3NF; ia adalah meja ibu bapa. Jadual anak baharu daripada jadual Jualan sebelumnya juga mematuhi 1NF, 2NF dan 3NF. Nama jadual anak dengan kunci asing dan tanggungannya, ialah Pelanggan. Jika nama yang sesuai tidak ditemui, maka ada sesuatu yang tidak kena dengan analisis. Jadual Jualan baharu dalam 3NF ialah:

Jadual Jualan Akhir dalam 3NF

Jadual dalam 3NF ini mempunyai bilangan baris yang sama dengan jadual dalam 2NF tetapi dengan lajur yang lebih sedikit.

Notasi jadual untuk jadual Jualan akhir ini dalam 3NF ialah:

Jualan (saleID, dateSold, customerID, employeeID)

ID jualan ialah kunci utama dengan satu garis bawah. customerID ialah kunci asing, dengan garis bawah sempang. employeeID juga merupakan kunci asing dengan garis bawah sempang. Ambil perhatian bahawa situasi pekerja dalam jadual Jualan dalam 2NF adalah sama dengan situasi pelanggan. ID pekerja dan tanggungannya sendiri perlu dikeluarkan untuk membentuk jadual lain; salinan ID pekerja kekal.

Nota: saleID, customerID dan employeeID tidak membentuk kunci komposit. saleID bergantung pada ID pelanggan dan ID pekerja.

Hubungan antara saleID dan customerID adalah banyak dengan satu.

Jadual pelanggan dalam 3NF

Jadual ini mempunyai tiga baris dan bukannya 9 baris dalam jadual Jualan 2NF. Dalam jadual ini, customerID ialah kunci utama. Ia sama dengan kunci asing dalam jadual Jualan, tetapi tanpa pengulangan. Kunci asing dalam jadual Jualan dan kunci utama dalam jadual Pelanggan memautkan kedua-dua jadual.

Baris berulang dalam jadual Pelanggan telah dialih keluar agar tidak melanggar 1NF.

Seperti yang pembaca boleh lihat, meletakkan jadual dalam 3NF juga akan menyelesaikan masalah baris berulang (redundansi).

Notasi jadual untuk Jadual Pelanggan ialah:

Pelanggan (ID pelanggan, Nama pelanggan, telefon, alamat, bandar, wilayah, Poskod, negara)

Jadual Produk Disemak Semula

Jadual produk yang diberikan di atas dalam bentuk tatatanda ialah:

Produk (ID produk, ID kategori, ID pembekal, Nama produk, harga unit, kuantitiInStock, Tahap pesanan semula)

Kunci utama di sini ialah productID. categoryID dan supplierID adalah kunci asing. Sama seperti jadual Pelanggan, terdapat jadual Kategori, dengan categoryID ialah kunci utama, dan terdapat jadual Pembekal, dengan supplierID ialah kunci utama.

Jika nilai untuk sel untuk unitPrice, quantityInStock dan reorderLevel akan kekal tetap, maka jadual Produk, sebagaimana adanya, benar-benar dalam 3NF. Jika nilai ini akan berubah, maka jadual Produk, seperti sedia ada, berada dalam 2NF. Dalam bahagian siri tutorial ini, diandaikan bahawa nilai tersebut kekal dari semasa ke semasa.

Semua Jadual

Semua jadual kini dalam 3NF. Mereka ditunjukkan sebagai:

Pekerja(ID pekerja, nama, telefon, alamat, bandar, wilayah, poskod, negara, tarikh lahir, tarikh sewa, tarikhDibebaskan)

Pembekal (ID pembekal, nama, telefon, alamat, bandar, wilayah, poskod, negara)

Produk (ID produk, ID kategori, ID pembekal, Nama produk, harga unit, kuantitiInStock, Tahap pesanan semula)
Kategori(ID kategori, Nama kategori, perihalan)

Jualan (saleID, dateSold, customerID, employeeID)
Butiran Jualan (ID jualan, ID produk, nomborDijual, harga jualan)
Pelanggan (ID pelanggan, Nama pelanggan, telefon, alamat, bandar, wilayah, Poskod, negara)

Pesanan (orderID, dateSold, supplierID, employeeID)
Butiran Pesanan(ID pesanan, ID produk, nomborBeli, kosHarga)

Sehingga sembilan jadual profesional telah dihasilkan daripada hanya satu jadual yang dihasilkan oleh orang baru untuk mengelakkan lebihan dan masalah perakaunan (anomali daripada sisipan, padam dan kemas kini). Meja orang baru sahaja akan membawa kepada kerugian kewangan.

Menguji Kakitangan

Pada ketika ini, semua pekerja, termasuk pemilik, sepatutnya memahami 1NF, 2NF dan 3NF. Walau bagaimanapun, mereka perlu diuji. Kesemua mereka, termasuk pemilik, akan duduk di tempat yang berbeza dan menyelesaikan ujian. Ujian yang terdiri daripada satu soalan, akan mengambil masa satu jam, dan ia adalah seperti berikut:

Soalan: Menggunakan peraturan untuk 1NF, 2NF dan 3NF, buktikan bahawa kesemua sembilan jadual di atas sudah dalam Bentuk Biasa Pertama, Bentuk Normal Kedua dan Bentuk Biasa Ketiga. Pelanggan dan pembekal tidak perlu menjadi entiti sebenar. Data untuk jadual hendaklah menyandarkan notasi jadual.

Semasa mereka menyelesaikan ujian, anda, sebagai pembangun pangkalan data, keluar untuk menikmati snek dan bir, untuk kembali selepas satu jam.

Masa Depan Yang Dekat dan Jauh

Semasa anda, pembangun pangkalan data, berada di luar, anda juga mempertimbangkan nasihat yang perlu diberikan kepada mereka jika mereka semua lulus ujian.

Selain itu, semasa anda melatih mereka, dan kini mereka sedang menjalani ujian, pelanggan telah datang dan pergi tanpa dilayan. Itu tidak bagus untuk perniagaan, dan anda, pembangun pangkalan data, tahu itu. Sesetengah pelanggan mungkin pergi ke kedai pesaing dan tidak akan kembali.

Anda, pembangun pangkalan data, berumur 30 tahun. Pemilik, sebagai rakan anda, juga berumur 30 tahun. Kerani (pekerja) berumur antara 18 dan 24. Semua kualiti yang mereka perlukan untuk bekerja untuk pemilik ialah: sihat, boleh membaca dan menulis, boleh menambah, menolak, mendarab dan membahagi. , dan boleh menggunakan komputer dan Internet.

Apabila jadual berada dalam 3NF, kebanyakan kelemahan telah dialih keluar daripada pangkalan data. Banyak pangkalan data komersial tidak melampaui 3NF, dan firma atau syarikat selesa.

Jadi, jika mereka semua lulus ujian, anda akan meminta kerani untuk pergi dan terus bekerja. Anda juga akan menasihati mereka untuk menyimpan sebahagian daripada gaji mereka supaya mereka boleh memiliki kedai serbaneka mereka. Anda akan meneruskan esok untuk melatih hanya pemilik dalam 4NF dan 5NF. Dengan pengetahuan 4NF dan 5NF, semua kelemahan yang diketahui akan dialih keluar.

Penilaian

Selepas satu jam, anda, pembangun pangkalan data, kembali. Anda menandakan skrip mereka. Satu berita yang sangat baik! Mereka semua, termasuk pemilik, mempunyai 100% setiap satu. Hore! Itu sangat baik!

Jadi tahniah kepada anda semua: guru dan pelajar.

Tiada apa yang perlu dilakukan dalam tutorial ini selain daripada membuat kesimpulan.

Kesimpulan

Jadual berada dalam Bentuk Biasa Pertama, jika ia tidak melanggar mana-mana peraturan berikut:

  1. Semua lajur dalam jadual harus mempunyai nama pengepala yang unik.
  2. Setiap sel mesti mempunyai hanya satu nilai.
  3. Nilai yang disimpan dalam lajur hendaklah daripada jenis yang sama.
  4. Baris harus berbeza.
  5. Susunan lajur atau baris tidak penting.

Jadual berada dalam Borang Normal Kedua, jika ia tidak melanggar mana-mana peraturan berikut:

  1. Jadual mestilah dalam Bentuk Biasa Pertama.
  2. Mesti tidak ada pergantungan separa.

Jadual berada dalam Borang Normal Ketiga, jika ia tidak melanggar mana-mana peraturan berikut:

  1. Ia mestilah dalam Bentuk Normal Kedua.
  2. Dan ia mestilah tidak mempunyai Ketergantungan Transitif.

Anda, pembangun pangkalan data, beritahu kerani bahawa mereka telah cukup belajar. Anda memberikan nasihat dan meminta mereka kembali bekerja dan tinggal di stesen mereka secara lalai.

Anda menetapkan janji temu dengan pemilik sahaja, untuk berlangsung di pejabatnya esok untuk latihan 4NF dan 5NF.