Адзін-да-шматлікім адносіны ў базе дадзеных адбываецца , калі кожны запіс у табліцы А можа мець мноства звязаных запісаў у табліцы У, але кожная запіс у табліцы 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 |
Мы распрацавалі адносіны паміж Настаўнікамі і табліцай курсаў з выкарыстаннем знешняга ключа.
Гэта сведчыць аб тым, што і біялогіі і матэматыцы вучаць Кармэн і што Хорхе выкладае ангельскую мову.
Мы можам бачыць, як гэтая канструкцыя дазваляе пазбегнуць магчымых звальненняў, дазваляе асобным настаўнікам выкладаць некалькі курсаў, а таксама рэалізуе адносіны адзін-да-шматлікім.
Базы дадзеных могуць таксама ажыццяўляць сувязь адзін-да-аднаму і многія-да-шматлікім.