Hubungan satu-ke-banyak dalam pangkalan data berlaku apabila setiap rekod dalam Jadual A mungkin mempunyai banyak rekod yang dipautkan dalam Jadual B, tetapi setiap rekod dalam Jadual B hanya mempunyai satu rekod yang sepadan dalam Jadual A. Perhubungan satu-ke-banyak dalam pangkalan data adalah reka bentuk pangkalan data relasi yang paling biasa dan berada di tengah-tengah reka bentuk yang baik.
Pertimbangkan hubungan antara guru dan kursus yang mereka ajar. Seorang guru boleh mengajar pelbagai kursus, tetapi kursus itu tidak akan mempunyai hubungan yang sama dengan guru.
Oleh itu, bagi setiap rekod dalam jadual Guru, terdapat banyak rekod dalam jadual Kursus. Ini adalah satu-ke-banyak hubungan: satu guru untuk pelbagai kursus.
Kenapa Menetapkan Hubungan Satu Kepada Banyak Yang Penting
Untuk mewakili hubungan satu sama lain, anda memerlukan sekurang-kurangnya dua jadual. Mari lihat mengapa.
Mungkin kita mencipta jadual di mana kita ingin merakamkan nama dan kursus yang diajar. Kami mungkin bentuknya seperti ini:
Teacher_ID | Teacher_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_002 | Veronica | Matematik |
Teacher_003 | Jorge | Bahasa Inggeris |
Bagaimana jika Carmen mengajar dua atau lebih kursus? Kami mempunyai dua pilihan dengan reka bentuk ini. Kami hanya dapat menambahkannya ke rekod Carmen yang sedia ada, seperti ini:
Teacher_ID | Guru_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologi, Matematik |
Teacher_002 | Veronica | Matematik |
Teacher_003 | Jorge | Bahasa Inggeris |
Reka bentuk di atas, bagaimanapun, tidak fleksibel dan boleh menyebabkan masalah kemudian apabila cuba memasukkan, mengedit atau memadam data.
Ia menjadikannya sukar untuk mencari data. Reka bentuk ini melanggar prinsip pertama pengaturcaraan pangkalan data, Formula Pertama Pertama (1NF), yang menyatakan bahawa setiap sel jadual harus mengandungi sekeping data tunggal dan diskrit.
Alternatif lain reka bentuk mungkin untuk menambah rekod kedua untuk Carmen:
Guru_ID | Guru_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_001 | Carmen | Matematik |
Teacher_002 | Veronica | Matematik |
Teacher_003 | Jorge | Bahasa Inggeris |
Ini mematuhi 1NF tetapi masih reka bentuk pangkalan data yang lemah kerana ia memperkenalkan redundansi dan boleh mengalirkan pangkalan data yang sangat besar tidak perlu. Lebih penting lagi, data boleh menjadi tidak konsisten. Sebagai contoh, bagaimana jika nama Carmen berubah? Seseorang yang bekerja dengan data mungkin mengemas kini namanya dalam satu rekod dan gagal mengemas kini dalam rekod kedua. Reka bentuk ini melanggar Borang Normal Kedua (2NF), yang mematuhi 1NF dan juga harus mengelakkan redundansi beberapa rekod dengan memisahkan subset data ke beberapa jadual dan mewujudkan hubungan di antara mereka.
Bagaimana Menghasilkan Pangkalan Data Dengan Satu-Kepada Banyak Hubungan
Untuk melaksanakan hubungan satu sama lain dalam jadual Guru dan Kursus, kami memecahkan jadual menjadi dua dan menghubungkannya menggunakan kunci asing.
Di sini, kami telah mengalih keluar lajur Kursus dalam jadual Guru:
Guru_ID | Guru_Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Dan inilah meja Kursus. Perhatikan bahawa kunci asing, Teacher_ID, menghubungkan kursus kepada guru dalam jadual Guru:
Course_ID | Nama kursus | Teacher_ID |
---|---|---|
Course_001 | Biologi | Teacher_001 |
Course_002 | Matematik | Teacher_001 |
Course_003 | Bahasa Inggeris | Teacher_003 |
Kami telah membangunkan perhubungan di antara jadual Guru dan Kursus menggunakan kunci asing.
Ini memberitahu kita bahawa kedua-dua Biologi dan Matematik diajar oleh Carmen dan Jorge mengajar bahasa Inggeris.
Kita dapat melihat bagaimana reka bentuk ini mengelakkan sebarang kekurangan yang mungkin, membolehkan guru individu mengajar pelbagai kursus, dan melaksanakan hubungan satu sama lain.
Pangkalan data juga boleh melaksanakan perhubungan satu sama satu dengan banyak hubungan.