Дерекқор қатынастары

Дерекқор байланысы - барлық реляциялық деректер қорларының негізі

Бір кестеде басқа кестенің бастапқы кілтіне сілтеме жасайтын сыртқы кілт болғанда, екі дерекқор кестелері арасында қатынас орнатылады. Бұл реляциялық дерекқордың негізгі тұжырымдамасы.

Шетелдік кілт қатынастарды орнату жолында қалай жұмыс істейді

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

Сыртқы кілт - жазбаны басқа кестеге байланыстыруға пайдаланылатын тағы бір кандидат кілті (бастапқы кілт емес).

Мысалы, мұғалім қандай сабақ беретінін анықтайтын осы екі кестені қарастырыңыз.

Бұл жерде курс кестесінің негізгі кілті - Course_ID. Оның сыртқы кілті - Teacher_ID:

Курстар
Course_ID Course_Name Мұғалім_ID
Course_001 Биология Teacher_001
Course_002 Математика Teacher_001
Course_003 Ағылшын тілі Teacher_003

Курстардағы шетелдік кілттер мұғалімдердің негізгі кілтіне сәйкес келетінін көруге болады:

Мұғалімдер
Мұғалім_ID Teacher_Name
Teacher_001 Кармен
Teacher_002 Вероника
Teacher_003 Хорхе

Teacher_ID шетелдік кілті Курстар мен мұғалімдер кестелерінің арасындағы қатынасты орнатуға көмектесті деп айтуға болады.

Дерекқор қатынастарының түрлері

Шетелдік кілттерді немесе басқа кандидаттар кілттерін пайдалану арқылы сіз кестелер арасындағы қатынастардың үш түрін жүзеге асыра аласыз:

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

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

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

Тұтынушылар мен тапсырыстар кестелері бар дерекқормен бизнесті қарастырыңыз.

Бір тапсырысшы бірнеше тапсырысты сатып ала алады, бірақ бір тапсырыс бірнеше тапсырыс берушімен байланысты болмайды. Сондықтан Тапсырыстар кестесінде Клиенттер кестесінің бастапқы кілтіне сәйкес келетін шетелдік кілт бар, ал Клиенттер кестесінде Сұранымдар кестесіне нұсқайтын сыртқы кілт жоқ.

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

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

Дерекқор қатынастары қандай маңызды?

Дерекқор кестелері арасындағы дәйекті қарым-қатынастарды орнату мәліметтердің тұтастығын қамтамасыз етеді, деректер базасын қалыпқа келтіруге ықпал етеді. Мысалы, қандай да бір кестелерді шетел кілтімен байланыстырмаған болсақ, мұның орнына деректерді Курстар мен Оқытушылар кестелерінде біріктірген болсақ:

Мұғалімдер мен курстар
Мұғалім_ID Teacher_Name Курс
Teacher_001 Кармен Биология, математика
Teacher_002 Вероника Математика
Teacher_003 Хорхе Ағылшын тілі

Бұл дизайн икемсіз болып табылады және дерекқорды қалыпқа келтірудің бірінші қағидатын бұзады, бірінші кесте ұяшығында бірыңғай, дискреттік деректердің болуы керек деп айтатын Бірінші Қалыпты Пішін (1NF).

Немесе, мүмкін, біз 1NF-ті қолдану үшін Карменге екінші жазба қосуды жөн көрдік:

Мұғалімдер мен курстар
Мұғалім_ID Teacher_Name Курс
Teacher_001 Кармен Биология
Teacher_001 Кармен Математика
Teacher_002 Вероника Математика
Teacher_003 Хорхе Ағылшын тілі

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

Мысалы, егер оқытушының бірнеше жазбалары бар болса, кейбір деректерді өңдеу қажет болса, бірақ деректерді өңдеуді жүзеге асыратын адам бірнеше жазбалардың бар екенін түсінбейді? Кесте сол жеке адам үшін әртүрлі деректерді анықтайды немесе оны анықтай алмайды немесе оны болдырмайды.

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