Еден-за-многу врски во база на податоци

Односот еден-на-многу во базата на податоци се јавува кога секој запис во Табела А може да има многу поврзани записи во Табела Б, но секој запис во Табела Б може да има само еден соодветен запис во Табела А. Еден-на-многу врска во базата на податоци е најчестата релациона база на податоци и е во срцето на добар дизајн.

Размислете за односот помеѓу наставникот и курсевите што ги учат. Учител може да предава повеќе курсеви, но курсот нема да има ист однос со наставникот.

Затоа, за секој запис во табелата Наставници, може да има многу записи во табелата за курсеви. Ова е односот меѓу односот: еден учител на повеќе курсеви.

Зошто е важно да се утврди односот кон многумина

За да се претстави односот кон еден, ви се потребни најмалку две маси. Ајде да видиме зошто.

Можеби создадовме Табела за Наставници во која сакавме да го запишеме името и курсевите што ги научивме. Можеме да го дизајнираме вака:

Наставници и курсеви
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

Имаме развиена врска помеѓу табелата Наставници и курсеви користејќи странски клуч.

Ова ни кажува дека и Биологијата и математиката ги учи Кармен и дека Хорхе учи на англиски јазик.

Ние можеме да видиме како овој дизајн ги избегнува сите можни технолошки вишок, им овозможува на поединечните наставници да предаваат повеќе курсеви и спроведуваат еден-на-многу врска.

Базите на податоци, исто така, можат да спроведат врска еден-на-еден и многу-многу-врска.