Perhubungan diwujudkan antara dua jadual pangkalan data apabila satu jadual menggunakan kunci asing yang merujuk kunci utama jadual lain. Ini ialah konsep asas di sebalik istilah pangkalan data hubungan.
Cara Kunci Asing Berfungsi untuk Menjalinkan Perhubungan
Kunci utama secara unik mengenal pasti setiap rekod dalam jadual. Ia adalah sejenis kunci calon yang biasanya merupakan lajur pertama dalam jadual dan boleh dijana secara automatik oleh pangkalan data untuk memastikan ia unik. Kunci asing ialah kunci calon lain (bukan kunci utama) yang digunakan untuk memautkan rekod ke data dalam jadual lain.
Sebagai contoh, pertimbangkan dua jadual ini yang mengenal pasti guru mana yang mengajar kursus mana. Di sini, kunci utama jadual Kursus ialah Course_ID. Kunci asingnya ialah Teacher_ID:
Course_ID | Nama_Kursus | ID_Guru |
---|---|---|
Kursus_001 | Biologi | Guru_001 |
Kursus_002 | Math | Guru_002 |
Kursus_003 | Inggeris | Guru_003 |
Anda dapat melihat bahawa kunci asing dalam Kursus sepadan dengan kunci utama dalam Guru:
ID_Guru | Nama_Guru |
---|---|
Guru_001 | Carmen |
Guru_002 | Veronica |
Guru_003 | Jorge |
Kita boleh katakan bahawa kunci asing Teacher_ID membantu mewujudkan hubungan antara Kursus dan jadual Guru.
Jenis Hubungan Pangkalan Data
Menggunakan kunci asing atau kunci calon lain, anda boleh melaksanakan tiga jenis perhubungan antara jadual:
Satu-dengan-Satu
Perhubungan jenis ini membenarkan hanya satu rekod pada setiap bahagian perhubungan. Kunci utama berkaitan dengan hanya satu rekod (atau tiada) dalam jadual lain. Sebagai contoh, dalam perkahwinan, setiap pasangan hanya mempunyai seorang pasangan lain. Perhubungan jenis ini boleh dilaksanakan dalam satu jadual dan oleh itu tidak menggunakan kunci asing.
Satu-ke-Ramai
Perhubungan satu dengan banyak membenarkan satu rekod dalam satu jadual dikaitkan dengan berbilang rekod dalam jadual lain. Pertimbangkan perniagaan dengan pangkalan data yang mempunyai jadual Pelanggan dan Pesanan.
Seorang pelanggan boleh membeli berbilang pesanan, tetapi satu pesanan tidak boleh dipautkan kepada berbilang pelanggan. Oleh itu jadual Pesanan akan mengandungi kunci asing yang sepadan dengan kunci utama jadual Pelanggan, manakala jadual Pelanggan tidak akan mempunyai kunci asing yang menghala ke jadual Pesanan.
Many-to-Many
Ini ialah perhubungan yang kompleks di mana banyak rekod dalam jadual boleh dipautkan kepada banyak rekod dalam jadual lain. Contohnya, perniagaan kami mungkin memerlukan jadual Pelanggan dan Pesanan, dan berkemungkinan juga memerlukan jadual Produk.
Sekali lagi, hubungan antara jadual Pelanggan dan Pesanan adalah satu-ke-banyak, tetapi pertimbangkan hubungan antara jadual Pesanan dan Produk. Pesanan boleh mengandungi berbilang produk dan produk boleh dipautkan kepada berbilang pesanan kerana beberapa pelanggan mungkin menyerahkan pesanan yang mengandungi beberapa produk yang sama. Perhubungan jenis ini memerlukan sekurang-kurangnya tiga jadual.
Mengapa Hubungan Pangkalan Data Penting?
Mewujudkan perhubungan yang konsisten antara jadual pangkalan data membantu memastikan integriti data, menyumbang kepada normalisasi pangkalan data. Contohnya, bagaimana jika kami tidak memautkan sebarang jadual melalui kunci asing dan sebaliknya menggabungkan data dalam jadual Kursus dan Guru, seperti:
ID_Guru | Nama_Guru | Kursus |
---|---|---|
Guru_001 | Carmen | Biologi, Matematik |
Guru_002 | Veronica | Math |
Guru_003 | Jorge | Inggeris |
Reka bentuk ini tidak fleksibel dan melanggar prinsip pertama normalisasi pangkalan data, First Normal Form, yang menyatakan bahawa setiap sel jadual harus mengandungi sekeping data tunggal yang diskret.
Atau mungkin kami memutuskan untuk menambah rekod kedua untuk Carmen, untuk menguatkuasakan 1NF:
ID_Guru | Nama_Guru | Kursus |
---|---|---|
Guru_001 | Carmen | Biologi |
Guru_001 | Carmen | Math |
Guru_002 | Veronica | Math |
Guru_003 | Jorge | Inggeris |
Ini masih reka bentuk yang lemah, memperkenalkan pertindihan yang tidak perlu dan apa yang dipanggil anomali sisipan data, yang bermaksud ia boleh menyumbang kepada data yang tidak konsisten. Contohnya, jika guru mempunyai berbilang rekod, bagaimana jika sesetengah data perlu diedit, tetapi orang yang melakukan pengeditan data tidak menyedari bahawa berbilang rekod wujud? Jadual itu kemudiannya akan mengandungi data yang berbeza untuk individu yang sama, tanpa sebarang cara yang jelas untuk mengenal pasti atau mengelakkannya.
Memecahkan jadual ini kepada dua jadual, Guru dan Kursus, mewujudkan hubungan yang betul antara data dan oleh itu membantu memastikan ketekalan dan ketepatan data.