Адзін-да-шматлікім у базе дадзеных

Адзін-да-шматлікім адносіны ў базе дадзеных адбываецца , калі кожны запіс у табліцы А можа мець мноства звязаных запісаў у табліцы У, але кожная запіс у табліцы B можа мець толькі адну адпаведны запіс у табліцы А. адзін-да-шматлікім у база дадзеных з'яўляецца найбольш распаўсюджанай рэляцыйнай структурай базы дадзеных і знаходзіцца ў самым цэнтры добрага дызайну.

Разгледзім адносіны паміж настаўнікам і курсы, якія яны выкладаюць. Настаўнік можа навучыць некалькі курсаў, але, вядома, не будзе мець такія ж адносіны з настаўнікам.

Такім чынам, для кожнай запісу ў табліцы настаўнікаў, можа быць шмат запісаў у табліцы курсаў. Гэта адзін-да-шматлікім: адзін настаўнік на некалькі курсаў.

Чаму Стварэнне адносіны адзін да многіх Важна

Для таго, каб прадстаўляць стаўленне адзін-да-шматлікім, вам трэба як мінімум дзве табліцы. Давайце паглядзім, чаму.

Магчыма, мы стварылі табліцу Настаўнікі, у якім мы хацелі запісаць імя і выкладаемыя курсы. Мы маглі б спраектаваць яго так:

Выкладчыкі і курсы
Teacher_ID TEACHER_NAME курс
Teacher_001 Кармэн біялогія
Teacher_002 вераніка матэматычны
Teacher_003 Jorge англійская

Што рабіць, калі Кармэн вучыць два ці больш курсаў? У нас ёсць два варыянты з гэтым дызайнам. Мы маглі б проста дадаць яго да існуючай запісу Кармэн, як гэта:

Выкладчыкі і курсы
Teacher_ID настаўнік _NAME курс
Teacher_001 Кармэн Біялогіі, матэматыцы
Teacher_002 вераніка матэматычны
Teacher_003 Jorge англійская

Дызайн вышэй, аднак, з'яўляецца нягнуткая і можа прывесці да праблем у далейшым пры спробе ўставіць, рэдагаваць або выдаляць дадзеныя.

Гэта абцяжарвае пошук дадзеных. Такая канструкцыя парушае першы прынцып нармалізацыі баз дадзеных, Першая нармальная форма (1nf) , у якім гаворыцца , што кожная вочка табліцы павінна ўтрымліваць адзін, дыскрэтны фрагмент дадзеных.

Іншы дызайн альтэрнатыва можа быць проста дадаць другую запіс Кармэн:

Выкладчыкі і курсы
настаўнік _ID настаўнік _NAME курс
Teacher_001 Кармэн біялогія
Teacher_001 Кармэн матэматычны
Teacher_002 вераніка матэматычны
Teacher_003 Jorge англійская

Гэта прытрымліваецца 1NF, але па-ранейшаму дрэнны дызайн базы дадзеных, паколькі яна ўводзіць надмернасць і можа надзімацца вельмі вялікую базу дадзеных без неабходнасці. Што яшчэ больш важна, гэтыя дадзеныя могуць стаць супярэчлівымі. Напрыклад, што калі імя Кармэн змянілася? Хтосьці працуе з дадзенымі можа абнавіць яе імя ў адной запісу, і не абнаўляць яго ў другі запісу. Такая канструкцыя парушае другую нармальную форму (2НФ), які прыліпае да 1NF, а таксама павінны пазбягаць дубліравання некалькіх запісаў шляхам падзелу падмноства дадзеных у некалькі табліц і ствараць сувязі паміж імі.

Як стварыць базу дадзеных з адным да-шматлікім

Для рэалізацыі адносіны адзін-да-шматлікім у табліцы настаўнікаў і курсы, мы парушаем табліцы на дзве часткі і звязаць іх з дапамогай вонкавага ключа .

Тут мы выдалілі слупок курсу ў табліцы настаўнікаў:

настаўнікі
настаўнік _ID настаўнік _NAME
Teacher_001 Кармэн
Teacher_002 вераніка
Teacher_003 Jorge

А вось табліца курсаў. Звярніце ўвагу, што яго знешні ключ, Teacher_ID, звязвае курс да настаўніка ў табліцы настаўнікаў:

курсы
Course_ID COURSE_NAME Teacher_ID
Course_001 біялогія Teacher_001
Course_002 матэматычны Teacher_001
Course_003 англійская Teacher_003

Мы распрацавалі адносіны паміж Настаўнікамі і табліцай курсаў з выкарыстаннем знешняга ключа.

Гэта сведчыць аб тым, што і біялогіі і матэматыцы вучаць Кармэн і што Хорхе выкладае ангельскую мову.

Мы можам бачыць, як гэтая канструкцыя дазваляе пазбегнуць магчымых звальненняў, дазваляе асобным настаўнікам выкладаць некалькі курсаў, а таксама рэалізуе адносіны адзін-да-шматлікім.

Базы дадзеных могуць таксама ажыццяўляць сувязь адзін-да-аднаму і многія-да-шматлікім.