Satu-ke-Banyak Hubungan dalam Pangkalan Data

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 Perhubungan Satu-ke-Banyak Penting

Untuk mewakili hubungan satu sama lain, anda memerlukan sekurang-kurangnya dua jadual. Mari lihat mengapa.

Mungkin kita telah mencipta meja guru di mana kita ingin merakamkan nama dan kursus yang diajar. Kami mungkin bentuknya seperti ini:

Guru dan Kursus
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:

Guru dan Kursus
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 dan Kursus
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-ke-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
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:

Kursus
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.