Односот еден-на-многу во базата на податоци се јавува кога секој запис во Табела А може да има многу поврзани записи во Табела Б, но секој запис во Табела Б може да има само еден соодветен запис во Табела А. Еден-на-многу врска во базата на податоци е најчестата релациона база на податоци и е во срцето на добар дизајн.
Размислете за односот помеѓу наставникот и курсевите што ги учат. Учител може да предава повеќе курсеви, но курсот нема да има ист однос со наставникот.
Затоа, за секој запис во табелата Наставници, може да има многу записи во табелата за курсеви. Ова е односот меѓу односот: еден учител на повеќе курсеви.
Зошто е важно да се утврди односот кон многумина
За да се претстави односот кон еден, ви се потребни најмалку две маси. Ајде да видиме зошто.
Можеби создадовме Табела за Наставници во која сакавме да го запишеме името и курсевите што ги научивме. Можеме да го дизајнираме вака:
Teacher_ID | Teacher_Name | Курс |
---|---|---|
Teacher_001 | Кармен | Биологија |
Teacher_002 | Вероника | Математика |
Teacher_003 | Хорхе | Англиски |
Што ако Кармен учи два или повеќе курсеви? Имаме две опции со овој дизајн. Можеме само да го додадеме во постојниот запис на Кармен, вака:
Teacher_ID | Наставник _Име | Курс |
---|---|---|
Teacher_001 | Кармен | Биологија, математика |
Teacher_002 | Вероника | Математика |
Teacher_003 | Хорхе | Англиски |
Дизајнот погоре, сепак, е нефлексибилен и може да резултира со проблеми подоцна кога се обидуваат да вметнат, уредуваат или бришат податоци.
Тоа го отежнува пребарувањето на податоци. Овој дизајн го нарушува првиот принцип на нормализација на бази на податоци, Прва нормална форма (1NF) , во која се наведува дека секоја табела ќелија треба да содржи единечен, дискретен дел од податоците.
Друга алтернатива на дизајнот може да биде едноставно додавање на втор рекорд за Кармен:
Учител _ID | Наставник _Име | Курс |
---|---|---|
Teacher_001 | Кармен | Биологија |
Teacher_001 | Кармен | Математика |
Teacher_002 | Вероника | Математика |
Teacher_003 | Хорхе | Англиски |
Ова се придржува до 1NF, но сè уште е слаб дизајн на базата на податоци, бидејќи тој воведува вишок и би можел да создава многу голема база на податоци непотребно. Уште поважно, податоците би можеле да станат неконзистентни. На пример, што ако името на Кармен се промени? Некој што работи со податоците може да го ажурира нејзиното име во еден запис и да не го ажурира во вториот запис. Овој дизајн ја нарушува Втората нормална форма (2NF), која се придржува до 1NF и, исто така, мора да ги избегне вишоците од повеќекратни записи со одделување на подмножества на податоци во повеќе табели и создавање на врска меѓу нив.
Како да дизајнираме база на податоци со еден-на-многу врски
За да се спроведе односот еден-на-многу во табелата за наставници и курсеви, ние ги скршиме табелите на два и ги поврзуваме со помош на странски клуч .
Еве, ја отстранивме колоната на курсот во табелата Наставници:
Учител _ID | Наставник _Име |
---|---|
Teacher_001 | Кармен |
Teacher_002 | Вероника |
Teacher_003 | Хорхе |
И тука е табелата за курсеви. Забележете дека нејзиниот странски клуч, Teacher_ID, го поврзува курсот со наставникот во табелата Наставници:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | Биологија | Teacher_001 |
Course_002 | Математика | Teacher_001 |
Course_003 | Англиски | Teacher_003 |
Имаме развиена врска помеѓу табелата Наставници и курсеви користејќи странски клуч.
Ова ни кажува дека и Биологијата и математиката ги учи Кармен и дека Хорхе учи на англиски јазик.
Ние можеме да видиме како овој дизајн ги избегнува сите можни технолошки вишок, им овозможува на поединечните наставници да предаваат повеќе курсеви и спроведуваат еден-на-многу врска.
Базите на податоци, исто така, можат да спроведат врска еден-на-еден и многу-многу-врска.