Skip to main content

Оне-то-Мани односи у бази података

Anonim

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

Размотрите однос између наставника и предмета које предају. Наставник може научити вишеструке курсеве, али курс не би имао исти однос са наставником.

Стога, за сваки запис у табели Теацхерс, у табели Курсеви може бити много записа. Ово је однос од једног до другог: један наставник на више курсева.

Зашто је успостављање односа од једне до друге важно

Да бисте представили однос од једног до другог, требају вам најмање две табеле. Да видимо зашто.

Можда смо створили сто у коме смо желели да забележимо име и предавања. Можемо га дизајнирати овако:

Наставници и курсеви
Теацхер_ИДИме наставникаКурс
Теацхер_001ЦарменБиологија
Теацхер_002ВероницаМатематика
Теацхер_003Јоргеенглески језик

Шта ако Кармен учи два или више курсева? Имамо две могућности са овим дизајном. Могли бисмо само додати у Царменов постојећи запис, овако:

Наставници и курсеви
Теацхер_ИДУчитељ_НамеКурс
Теацхер_001ЦарменБиологија, математика
Теацхер_002ВероницаМатематика
Теацхер_003Јоргеенглески језик

Дизајн изнад, међутим, је нефлексибилан и може довести до проблема касније приликом покушаја уметања, уређивања или брисања података.

Отежава претрагу података. Овај дизајн крши први принцип нормализације базе података, Фирст Нормал Форм (1НФ), који наводи да свака ћелија таблице треба да садржи један појединачни дискретни податак.

Још једна алтернативна алтернатива може бити додати још један рекорд за Цармен:

Наставници и курсеви
Учитељ_ИДУчитељ_НамеКурс
Теацхер_001ЦарменБиологија
Теацхер_001ЦарменМатематика
Теацхер_002ВероницаМатематика
Теацхер_003Јоргеенглески језик

Ово се придржава 1НФ, али је и даље лош дизајн базе података, јер уводи редундантност и може се непотребно претворити у велику базу података. Што је још важније, подаци би могли постати недоследни. На пример, шта ако се Карменово име промени? Неко ко ради са подацима може ажурирати своје име у један запис и не ажурирати је у другом запису. Овај дизајн крши другу нормалну форму (2НФ), која се придржава 1НФ и такође мора избјећи редунданцију вишеструких записа тако што одваја подгрупе података у више табела и ствара однос између њих.

Како дизајнирати базу података са једноручним односима

Да би остварили однос од једног до другог у табели Наставници и курсеви, разбијамо табеле на два и повезујемо их користећи инострани кључ.

Овде смо уклонили колону курса у Табели Наставника:

Наставници
Учитељ_ИДУчитељ_Наме
Теацхер_001Цармен
Теацхер_002Вероница
Теацхер_003Јорге

А овде је табела Курса. Имајте на уму да њен инострани кључ, Теацхер_ИД, повезује курс са наставником у Табели Наставника:

Курсеви
Цоурсе_ИДЦоурсе_НамеТеацхер_ИД
Цоурсе_001БиологијаТеацхер_001
Цоурсе_002МатематикаТеацхер_001
Цоурсе_003енглески језикТеацхер_003

Развили смо однос између табеле наставника и курса користећи инострани кључ.

То нам говори да и Биологија и математику подучава Кармен и да Јорге предаје енглески.

Видимо како овај дизајн избјегава било какве могуће редунданце, омогућава појединачним наставницима да предају више курсева и спроводе однос између једног и више.

Базе података такође могу спровести однос један-на-један и однос многих према многим.