Perhubungan Satu-dengan-Banyak dalam Pangkalan Data

Isi kandungan:

Perhubungan Satu-dengan-Banyak dalam Pangkalan Data
Perhubungan Satu-dengan-Banyak dalam Pangkalan Data
Anonim

Perhubungan satu-ke-banyak dalam pangkalan data berlaku apabila setiap rekod dalam Jadual A mungkin mempunyai banyak rekod terpaut dalam Jadual B, tetapi setiap rekod dalam Jadual B mungkin mempunyai hanya satu rekod sepadan dalam Jadual A.

Hubungan satu-ke-banyak dalam pangkalan data ialah reka bentuk pangkalan data hubungan yang paling biasa dan merupakan teras reka bentuk yang baik.

Pangkalan data juga boleh melaksanakan perhubungan satu dengan satu dan perhubungan banyak-ke-banyak.

Image
Image

Contoh Hubungan Satu-dengan-Ramai

Pertimbangkan hubungan antara guru dan kursus yang mereka ajar. Seorang guru boleh mengajar berbilang kelas, tetapi kursus itu tidak akan mempunyai hubungan yang sama dengan guru.

Oleh itu, untuk setiap rekod dalam jadual Guru, mungkin terdapat banyak rekod dalam jadual Kursus. Contoh ini menggambarkan hubungan satu dengan ramai: seorang guru kepada berbilang kursus.

Mengapa Mewujudkan Hubungan Satu dengan Ramai Adalah Penting

Untuk mewakili perhubungan satu dengan banyak, anda memerlukan sekurang-kurangnya dua jadual. Mari lihat sebabnya.

Pematuhan kepada Reka Bentuk Borang Biasa Pertama

Mungkin kami mencipta jadual di mana kami ingin merekodkan nama dan kursus yang diajar. Kami mungkin mereka bentuk jadual Guru dan Kursus seperti ini:

ID_Guru Nama_Guru Kursus
Guru_001 Carmen Biologi
Guru_002 Veronica Math
Guru_003 Jorge Inggeris

Bagaimana jika Carmen mengajar dua atau lebih kursus? Kami mempunyai dua pilihan dengan reka bentuk ini. Kami boleh menambahkannya pada rekod sedia ada Carmen, seperti ini:

ID_Guru Guru_Nama Kursus
Guru_001 Carmen Biologi, Matematik
Guru_002 Veronica Math
Guru_003 Jorge Inggeris

Walau bagaimanapun, reka bentuk di atas tidak fleksibel dan boleh mengakibatkan masalah kemudian apabila anda memasukkan, mengedit atau memadam data. Ia menyukarkan untuk mencari data.

Reka bentuk ini juga melanggar prinsip pertama normalisasi pangkalan data, First Normal Form (1NF), yang menyatakan bahawa setiap sel jadual harus mengandungi sekeping data tunggal yang diskret.

Peraturan Bentuk Biasa Kedua

Alternatif reka bentuk lain mungkin ialah menambah rekod kedua untuk Carmen:

Guru_ID Guru_Nama Kursus
Guru_001 Carmen Biologi
Guru_001 Carmen Math
Guru_002 Veronica Math
Guru_003 Jorge Inggeris

Pendekatan ini mematuhi 1NF tetapi masih merupakan reka bentuk pangkalan data yang lemah kerana ia memperkenalkan lebihan dan boleh mengembang pangkalan data yang besar tanpa perlu. Lebih penting lagi, data boleh menjadi tidak konsisten.

Sebagai contoh, bagaimana jika nama Carmen ditukar? Seseorang yang bekerja dengan data mungkin mengemas kini namanya dalam satu rekod dan gagal mengemas kininya dalam rekod kedua.

Reka bentuk ini melanggar piawaian Borang Normal Kedua (2NF), yang mematuhi 1NF dan juga mesti mengelakkan lebihan beberapa rekod. Peraturan 2NF mencapai ini dengan mengasingkan subset data kepada berbilang jadual dan mewujudkan perhubungan antara mereka.

Cara Reka Pangkalan Data Dengan Hubungan Satu-dengan-Banyak

Untuk melaksanakan perhubungan satu-dengan-banyak dalam jadual Guru dan Kursus, pecahkan jadual kepada dua dan pautkannya menggunakan kunci asing.

Di sini, kami mengalih keluar lajur Kursus dalam jadual Guru:

Guru_ID Guru_Nama
Guru_001 Carmen
Guru_002 Veronica
Guru_003 Jorge

Dan inilah jadual Kursus. Ambil perhatian bahawa kunci asingnya, Teacher_ID, memautkan kursus kepada guru dalam jadual Teachers:

Course_ID Nama_Kursus ID_Guru
Kursus_001 Biologi Guru_001
Kursus_002 Math Guru_001
Kursus_003 Inggeris Guru_003

Kami telah membangunkan hubungan antara Guru dan jadual Kursus menggunakan kunci asing. Susunan ini memberitahu kami Carmen mengajar Biologi dan Matematik dan Jorge mengajar bahasa Inggeris.

Kita dapat melihat cara reka bentuk ini mengelakkan sebarang kemungkinan lebihan, membenarkan guru individu mengajar berbilang kursus dan melaksanakan perhubungan satu dengan banyak.

Disyorkan: