Деректер базасында бір-біріне тәуелділік

Деректер базасындағы бір-көп қатынастар, Кестедегі әрбір жазбаның Кестедегі көптеген байланыстырылған жазбаларға ие болғанда орын алады, бірақ Кестедегі әрбір жазба Кестедегі бір ғана тиісті жазба болуы мүмкін. Дерекқор дерекқордың ең қарапайым дизайны болып табылады және жақсы дизайнның қақ ортасында орналасқан.

Мұғалім мен оқытатын курстар арасындағы қарым-қатынасты қарастырайық. Мұғалім көптеген курстарға үйрете алады, бірақ мұғалім мұғаліммен бірдей қатынаста болмайды.

Сондықтан, Мұғалімдер кестесіндегі әрбір жазба үшін, Курстар кестесінде көптеген жазбалар болуы мүмкін. Бұл бір-көп қатынастар: бір мұғалім бірнеше курстар.

Неліктен бір-біріне тәуелділікті орнату өте маңызды

Бір-біріне көп қатынастарды көрсету үшін кем дегенде екі кесте қажет. Неліктен екенін білейік.

Мүмкін біз мұғалімдердің үстелін құрдық, онда біз атын және курстарын жазғымыз келеді. Біз оны келесі түрде жасай аламыз:

Мұғалімдер мен курстар
Мұғалім_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 ағылшын тілін үйретеді.

Біз бұл дизайнның кез-келген ықтималдықтан қалай құтылуға болатынын көріп отырмыз, жеке мұғалімдерге көптеген курстарды үйретуге мүмкіндік береді және бір-біріне көптеген қатынастар жасайды.

Деректер базалары сондай-ақ бір-бірімен қарым-қатынасты және көптеген-көп қатынастарды жүзеге асыра алады.