Ang isa-sa-maraming relasyon sa isang database ay nangyayari kapag ang bawat tala sa Talahanayan A ay maaaring may maraming naka-link na talaan sa Talahanayan B, ngunit ang bawat talaan sa Talahanayan B ay maaaring magkaroon lamang ng isang kaukulang talaan sa Talahanayan A.
Ang one-to-many na relasyon sa isang database ay ang pinakakaraniwang disenyo ng relational database at nasa puso ng magandang disenyo.
Maaari ding magpatupad ang mga database ng isa-sa-isang relasyon at marami-sa-maraming relasyon.
Halimbawa ng Isa-sa-Maraming Relasyon
Isipin ang kaugnayan sa pagitan ng isang guro at ng mga kursong itinuturo nila. Ang isang guro ay maaaring magturo ng maraming klase, ngunit ang kurso ay hindi magkakaroon ng parehong kaugnayan sa guro.
Samakatuwid, para sa bawat tala sa isang talahanayan ng Mga Guro, maaaring mayroong maraming mga tala sa talahanayan ng Mga Kurso. Ang halimbawang ito ay naglalarawan ng isa-sa-maraming relasyon: isang guro sa maraming kurso.
Bakit Mahalaga ang Pagtatatag ng Isa-sa-Maraming Relasyon
Upang kumatawan sa isa-sa-maraming relasyon, kailangan mo ng hindi bababa sa dalawang talahanayan. Tingnan natin kung bakit.
Pagsunod sa First Normal Form Design
Marahil gumawa kami ng talahanayan kung saan gusto naming itala ang pangalan at mga kursong itinuro. Maaari kaming magdisenyo ng talahanayan ng Mga Guro at Kurso tulad nito:
Teacher_ID | Pangalan_Guro | Course |
---|---|---|
Teacher_001 | Carmen | Biology |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | English |
Paano kung magturo si Carmen ng dalawa o higit pang kurso? Mayroon kaming dalawang pagpipilian sa disenyo na ito. Maaari naming idagdag ito sa kasalukuyang record ng Carmen, tulad nito:
Teacher_ID | Guro_Pangalan | Course |
---|---|---|
Teacher_001 | Carmen | Biology, Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | English |
Gayunpaman, ang disenyo sa itaas ay hindi nababaluktot at maaaring magresulta sa mga problema sa ibang pagkakataon kapag nagpasok ka, nag-edit, o nagtanggal ng data. Pinapahirapan ang paghahanap ng data.
Nilalabag din ng disenyong ito ang unang prinsipyo ng normalization ng database, First Normal Form (1NF), na nagsasaad na ang bawat table cell ay dapat maglaman ng isang solong, discrete na piraso ng data.
The Second Normal Form Rule
Ang isa pang alternatibo sa disenyo ay maaaring magdagdag ng pangalawang record para sa Carmen:
Guro_ID | Guro_Pangalan | Course |
---|---|---|
Teacher_001 | Carmen | Biology |
Teacher_001 | Carmen | Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | English |
Ang diskarte na ito ay sumusunod sa 1NF ngunit mahina pa rin ang disenyo ng database dahil nagpapakilala ito ng redundancy at maaaring lumaki ang isang malaking database nang hindi kinakailangan. Higit sa lahat, maaaring hindi magkatugma ang data.
Halimbawa, paano kung nagbago ang pangalan ni Carmen? Maaaring i-update ng isang taong nagtatrabaho sa data ang kanyang pangalan sa isang tala at hindi ito ma-update sa pangalawang tala.
Ang disenyong ito ay lumalabag sa pamantayang Second Normal Form (2NF), na sumusunod sa 1NF at dapat ding iwasan ang mga redundancies ng maraming record. Nagagawa ito ng panuntunan ng 2NF sa pamamagitan ng paghihiwalay ng mga subset ng data sa maraming talahanayan at paggawa ng ugnayan sa pagitan ng mga ito.
Paano Magdisenyo ng Database na May Isa-sa-Maraming Relasyon
Upang magpatupad ng one-to-many na relasyon sa talahanayan ng Mga Guro at Kurso, hatiin ang mga talahanayan sa dalawa at i-link ang mga ito gamit ang isang foreign key.
Dito, inalis namin ang column na Course sa Teachers table:
Guro_ID | Guro_Pangalan |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
At narito ang talahanayan ng Courses. Tandaan na ang foreign key nito, ang Teacher_ID, ay nag-uugnay ng kurso sa isang guro sa talahanayan ng Mga Guro:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | Biology | Teacher_001 |
Course_002 | Math | Teacher_001 |
Course_003 | English | Teacher_003 |
Nakabuo kami ng relasyon sa pagitan ng Teachers at ng Courses table gamit ang foreign key. Sinasabi sa amin ng kaayusan na ito na parehong nagtuturo si Carmen ng Biology at Math at nagtuturo si Jorge ng English.
Nakikita natin kung paano iniiwasan ng disenyong ito ang anumang posibleng redundancies, nagbibigay-daan sa mga indibidwal na guro na magturo ng maraming kurso, at nagpapatupad ng one-to-many na relasyon.