Ang isang relasyon ay naitatag sa pagitan ng dalawang talahanayan ng database kapag ang isang talahanayan ay gumagamit ng isang dayuhang key na tumutukoy sa pangunahing key ng isa pang talahanayan. Ito ang pangunahing konsepto sa likod ng terminong relational database.
Paano Gumagana ang Foreign Key para Magtatag ng Relasyon
Ang pangunahing key ay natatanging kinikilala ang bawat tala sa talahanayan. Ito ay isang uri ng susi ng kandidato na karaniwang ang unang column sa isang talahanayan at maaaring awtomatikong mabuo ng database upang matiyak na ito ay natatangi. Ang foreign key ay isa pang candidate key (hindi ang primary key) na ginagamit para i-link ang isang record sa data sa ibang table.
Halimbawa, isaalang-alang ang dalawang talahanayang ito na tumutukoy kung aling guro ang nagtuturo kung aling kurso. Dito, ang pangunahing key ng talahanayan ng Courses ay Course_ID. Ang foreign key nito ay Teacher_ID:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | Biology | Teacher_001 |
Course_002 | Math | Teacher_002 |
Course_003 | English | Teacher_003 |
Makikita mong tumutugma ang foreign key sa Courses sa isang primary key sa Teachers:
Teacher_ID | Pangalan_Guro |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Masasabi nating nakatulong ang Teacher_ID foreign key na magtatag ng ugnayan sa pagitan ng Courses at ng Teachers table.
Mga Uri ng Mga Relasyon sa Database
Gamit ang mga foreign key, o iba pang candidate key, maaari kang magpatupad ng tatlong uri ng mga ugnayan sa pagitan ng mga talahanayan:
One-to-One
Ang ganitong uri ng relasyon ay nagbibigay-daan lamang sa isang talaan sa bawat panig ng relasyon. Ang pangunahing susi ay nauugnay sa isang tala lamang (o wala) sa isa pang talahanayan. Halimbawa, sa isang kasal, ang bawat asawa ay may isa lamang na asawa. Ang ganitong uri ng relasyon ay maaaring ipatupad sa iisang talahanayan at samakatuwid ay hindi gumagamit ng foreign key.
Isa-sa-Marami
Ang isa-sa-maraming relasyon ay nagbibigay-daan sa isang talaan sa isang talahanayan na maiugnay sa maraming talaan sa isa pang talahanayan. Isaalang-alang ang isang negosyong may database na mayroong mga talahanayan ng Mga Customer at Order.
Ang isang customer ay maaaring bumili ng maraming order, ngunit ang isang order ay hindi ma-link sa maraming customer. Samakatuwid ang talahanayan ng Mga Order ay maglalaman ng foreign key na tumugma sa pangunahing key ng talahanayan ng Mga Customer, habang ang talahanayan ng Mga Customer ay walang foreign key na tumuturo sa talahanayan ng Mga Order.
Many-to-Many
Ito ay isang kumplikadong relasyon kung saan maraming record sa isang table ang maaaring mag-link sa maraming record sa isa pang table. Halimbawa, malamang na kailangan ng aming negosyo ang mga talahanayan ng Mga Customer at Order, at malamang na kailangan din ng talahanayan ng Mga Produkto.
Muli, ang ugnayan sa pagitan ng talahanayan ng Mga Customer at Mga Order ay isa-sa-marami, ngunit isaalang-alang ang kaugnayan sa pagitan ng talahanayan ng Mga Order at Mga Produkto. Maaaring maglaman ng maraming produkto ang isang order, at maaaring ma-link ang isang produkto sa maraming order dahil maaaring magsumite ang ilang customer ng order na naglalaman ng ilan sa mga parehong produkto. Ang ganitong uri ng relasyon ay nangangailangan ng hindi bababa sa tatlong talahanayan.
Bakit Mahalaga ang Mga Relasyon sa Database?
Ang pagtatatag ng mga pare-parehong ugnayan sa pagitan ng mga talahanayan ng database ay nakakatulong na matiyak ang integridad ng data, na nag-aambag sa normalisasyon ng database. Halimbawa, paano kung hindi kami nag-link ng anumang mga talahanayan sa pamamagitan ng isang foreign key at sa halip ay pinagsama ang data sa mga talahanayan ng Courses at Teachers, tulad nito:
Teacher_ID | Pangalan_Guro | Course |
---|---|---|
Teacher_001 | Carmen | Biology, Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | English |
Ang disenyong ito ay hindi nababaluktot at lumalabag sa unang prinsipyo ng normalization ng database, First Normal Form, na nagsasaad na ang bawat table cell ay dapat maglaman ng isang solong, discrete na piraso ng data.
O marahil ay nagpasya kaming magdagdag ng pangalawang record para sa Carmen, upang maipatupad ang 1NF:
Teacher_ID | Pangalan_Guro | Course |
---|---|---|
Teacher_001 | Carmen | Biology |
Teacher_001 | Carmen | Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | English |
Mahina pa rin itong disenyo, na nagpapakilala ng hindi kinakailangang pagdoble at tinatawag na mga anomalya sa pagpapasok ng data, na nangangahulugang maaari itong mag-ambag sa hindi pare-parehong data. Halimbawa, kung maraming record ang isang guro, paano kung kailangang i-edit ang ilang data, ngunit hindi napagtatanto ng taong nagsasagawa ng pag-edit ng data na maraming record ang umiiral? Ang talahanayan ay maglalaman ng iba't ibang data para sa parehong indibidwal, nang walang anumang malinaw na paraan upang makilala ito o maiwasan ito.
Ang paghahati sa talahanayang ito sa dalawang talahanayan, Mga Guro at Kurso, ay lumilikha ng wastong ugnayan sa pagitan ng data at samakatuwid ay nakakatulong na matiyak ang pagkakapare-pareho at katumpakan ng data.