Дерекқордағы бір-көп қатынасы А кестесіндегі әрбір жазбаның В кестесіндегі көптеген байланыстырылған жазбалар болуы мүмкін, бірақ В кестесіндегі әрбір жазбаның А кестесінде бір ғана сәйкес жазба болуы мүмкін болғанда орын алады.
Дерекқордағы бір-көп қатынасы ең көп таралған реляциялық дерекқор дизайны болып табылады және жақсы дизайнның негізі болып табылады.
Дерекқорлар сонымен қатар бір-бір қатынасты және көп-көп қатынасын жүзеге асыра алады.
Бір-көп қарым-қатынас үлгісі
Мұғалім мен олар оқытатын курстар арасындағы қарым-қатынасты қарастырыңыз. Мұғалім бірнеше сабақ бере алады, бірақ курстың мұғаліммен қатынасы бірдей болмайды.
Сондықтан, Мұғалімдер кестесіндегі әрбір жазба үшін Курстар кестесінде көптеген жазбалар болуы мүмкін. Бұл мысал «бірден көпке» қатынасын көрсетеді: бір мұғалімнен бірнеше курсқа.
Неліктен көпке-бір қарым-қатынас орнату маңызды
Бірден көпке қатынасты көрсету үшін кемінде екі кесте қажет. Неге екенін көрейік.
Бірінші қалыпты пішін дизайнын ұстану
Мүмкін біз аты мен оқытылатын курстарды жазғымыз келетін кестені жасаған шығармыз. Мұғалімдер мен курстар кестесін келесідей құрастыруымыз мүмкін:
Мұғалім_идентификаторы | Мұғалім_аты | Курс |
---|---|---|
Мұғалім_001 | Кармен | Биология |
Мұғалім_002 | Вероника | Математика |
Мұғалім_003 | Хорхе | ағылшын |
Егер Кармен екі немесе одан да көп курстарды оқытса ше? Бұл дизайнмен бізде екі нұсқа бар. Оны Карменнің бар жазбасына келесідей қосуға болады:
Мұғалім_идентификаторы | Мұғалім_Аты | Курс |
---|---|---|
Мұғалім_001 | Кармен | Биология, математика |
Мұғалім_002 | Вероника | Математика |
Мұғалім_003 | Хорхе | ағылшын |
Дегенмен, жоғарыдағы дизайн икемді емес және кейінірек деректерді кірістіру, өңдеу немесе жою кезінде мәселелерге әкелуі мүмкін. Бұл деректерді іздеуді қиындатады.
Бұл дизайн сонымен қатар дерекқорды қалыпқа келтірудің бірінші принципін, бірінші қалыпты пішінді (1NF) бұзады, ол әрбір кесте ұяшығында деректердің бір, дискретті бөлігі болуы керек екенін айтады.
Екінші қалыпты пішін ережесі
Басқа дизайн баламасы Кармен үшін екінші рекордты қосу болуы мүмкін:
Мұғалім_ID | Мұғалім_Аты | Курс |
---|---|---|
Мұғалім_001 | Кармен | Биология |
Мұғалім_001 | Кармен | Математика |
Мұғалім_002 | Вероника | Математика |
Мұғалім_003 | Хорхе | ағылшын |
Бұл тәсіл 1NF-ге сәйкес келеді, бірақ әлі де нашар дерекқор дизайны, себебі ол артықшылықты тудырады және үлкен дерекқорды қажетсіз толтыруы мүмкін. Ең бастысы, деректер сәйкес келмеуі мүмкін.
Мысалы, Карменнің аты өзгерсе ше? Деректермен жұмыс істейтін біреу оның атын бір жазбада жаңартып, екінші жазбада жаңартпауы мүмкін.
Бұл дизайн 1NF-ге сәйкес келетін Екінші қалыпты пішін (2NF) стандартын бұзады және сонымен қатар бірнеше жазбалардың артықшылығын болдырмауы керек. 2NF ережесі бұған деректердің ішкі жиындарын бірнеше кестелерге бөліп, олардың арасында қатынас жасау арқылы қол жеткізеді.
Бір-көп байланыстары бар дерекқорды қалай құрастыруға болады
Мұғалімдер және курстар кестесінде «бірге көп» қатынасын енгізу үшін кестелерді екіге бөліп, сыртқы кілтті пайдаланып байланыстырыңыз.
Мұнда біз «Мұғалімдер» кестесіндегі «Курс» бағанын алып тастадық:
Мұғалім_ID | Мұғалім_Аты |
---|---|
Мұғалім_001 | Кармен |
Мұғалім_002 | Вероника |
Мұғалім_003 | Хорхе |
Міне, Курстар кестесі. Оның шетелдік кілті, Teacher_ID, Мұғалімдер кестесіндегі курсты мұғаліммен байланыстыратынын ескеріңіз:
Курс_идентификаторы | Курс_атауы | Мұғалім_идентификаторы |
---|---|---|
Курс_001 | Биология | Мұғалім_001 |
Курс_002 | Математика | Мұғалім_001 |
Курс_003 | ағылшын | Мұғалім_003 |
Біз «Мұғалімдер» және «Курстар» кестесінің арасындағы қарым-қатынасты шетелдік кілтті пайдаланып дамыттық. Бұл келісім Карменнің биология мен математикадан сабақ беретінін және Хорхе ағылшын тілін үйрететінін айтады.
Бұл дизайнның мүмкін болатын артық жұмыстарды болдырмайтынын, жекелеген мұғалімдерге бірнеше курстарды оқытуға мүмкіндік беретінін және «бірден көпке» қатынасын қалай жүзеге асыратынын көреміз.