Деректер базасындағы бір-көп қатынастар, Кестедегі әрбір жазбаның Кестедегі көптеген байланыстырылған жазбаларға ие болғанда орын алады, бірақ Кестедегі әрбір жазба Кестедегі бір ғана тиісті жазба болуы мүмкін. Дерекқор дерекқордың ең қарапайым дизайны болып табылады және жақсы дизайнның қақ ортасында орналасқан.
Мұғалім мен оқытатын курстар арасындағы қарым-қатынасты қарастырайық. Мұғалім көптеген курстарға үйрете алады, бірақ мұғалім мұғаліммен бірдей қатынаста болмайды.
Сондықтан, Мұғалімдер кестесіндегі әрбір жазба үшін, Курстар кестесінде көптеген жазбалар болуы мүмкін. Бұл бір-көп қатынастар: бір мұғалім бірнеше курстар.
Неліктен бір-біріне тәуелділікті орнату өте маңызды
Бір-біріне көп қатынастарды көрсету үшін кем дегенде екі кесте қажет. Неліктен екенін білейік.
Мүмкін біз мұғалімдердің үстелін құрдық, онда біз атын және курстарын жазғымыз келеді. Біз оны келесі түрде жасай аламыз:
Мұғалім_ID | Teacher_Name | Курс |
---|---|---|
Teacher_001 | Кармен | Биология |
Teacher_002 | Вероника | Математика |
Teacher_003 | Хорхе | Ағылшын тілі |
Егер Кармен екі немесе одан да көп курстарға үйретсе ше? Бұл дизайнмен бізде екі нұсқа бар. Біз оны Carmen-дің бар рекордына қосуымыз керек:
Мұғалім_ID | Оқытушы _Name | Курс |
---|---|---|
Teacher_001 | Кармен | Биология, математика |
Teacher_002 | Вероника | Математика |
Teacher_003 | Хорхе | Ағылшын тілі |
Дегенмен, жоғарыда көрсетілген дизайн икемсіз және деректерді кірістіру, өңдеу немесе жою кезінде қиындықтарға әкеп соғуы мүмкін.
Деректерді іздеу қиынға соғады. Бұл дизайн деректер базасын қалыпқа келтірудің бірінші қағидатын бұзады, Бірінші Қалыпты Пішін (1NF) , онда әрбір кесте ұяшығында бірыңғай, дискреттік деректер болуы керек.
Тағы бір дизайнерлік балама Карменге екінші жазба қосу оңай болуы мүмкін:
Оқытушы _ID | Оқытушы _Name | Курс |
---|---|---|
Teacher_001 | Кармен | Биология |
Teacher_001 | Кармен | Математика |
Teacher_002 | Вероника | Математика |
Teacher_003 | Хорхе | Ағылшын тілі |
Бұл 1NF-ге жүгінеді, бірақ әлі де дерекқордың нашарлығы болып табылады, себебі бұл артықшылықты енгізеді және өте үлкен дерекқорды қажетсіз шоғырландырады. Ең бастысы, деректер сәйкессіз болуы мүмкін. Мысалы, Карменнің есімі өзгерді ме? Деректермен жұмыс істейтін адам оның атын бір жазбада жаңарта алады және оны екінші жазбада жаңарта алмайды. Бұл дизайн 1NF-ге бейімділігі бар екінші қалыпты пішінді (2NF) бұзады және деректердің подмножестваларын бірнеше кестелерге бөліп, олардың арасындағы қарым-қатынас жасау арқылы бірнеше жазбалардың артықшылығын болдырмауға тиіс.
Деректер базасын бір-біріне тәуелді қатынастармен қалай жасау керек
Мұғалімдер мен курстар кестесінде бір-көпқатысуды жүзеге асыру үшін кестені екіге бөліп, оларды шетелдік кілт арқылы байланыстырамыз.
Мұнда Мұғалімдер кестесіндегі Оқу бағанын алып тастадық:
Оқытушы _ID | Оқытушы _Name |
---|---|
Teacher_001 | Кармен |
Teacher_002 | Вероника |
Teacher_003 | Хорхе |
Міне, курстар кестесі. Teacher_ID шетелдік кілті мұғалімге мұғалімдерге арналған курсқа сілтеме жасайтынын ескеріңіз:
Course_ID | Course_Name | Мұғалім_ID |
---|---|---|
Course_001 | Биология | Teacher_001 |
Course_002 | Математика | Teacher_001 |
Course_003 | Ағылшын тілі | Teacher_003 |
Біз шетел мұғалімін пайдаланып мұғалімдер мен курстардың кестесін құрдық.
Бұл бізге биология және математиканы Кармен үйретеді және Jorge ағылшын тілін үйретеді.
Біз бұл дизайнның кез-келген ықтималдықтан қалай құтылуға болатынын көріп отырмыз, жеке мұғалімдерге көптеген курстарды үйретуге мүмкіндік береді және бір-біріне көптеген қатынастар жасайды.
Деректер базалары сондай-ақ бір-бірімен қарым-қатынасты және көптеген-көп қатынастарды жүзеге асыра алады.