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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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