Дерекқор қатынасы дегеніміз не?

Мазмұны:

Дерекқор қатынасы дегеніміз не?
Дерекқор қатынасы дегеніміз не?
Anonim

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

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

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

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

Курс_идентификаторы Курс_атауы Мұғалім_идентификаторы
Курс_001 Биология Мұғалім_001
Курс_002 Математика Мұғалім_002
Курс_003 ағылшын Мұғалім_003

Курстардағы сыртқы кілт «Мұғалімдер» бөліміндегі негізгі кілтке сәйкес келетінін көре аласыз:

Мұғалім_идентификаторы Мұғалім_аты
Мұғалім_001 Кармен
Мұғалім_002 Вероника
Мұғалім_003 Хорхе

Мұғалім_идентификаторының сыртқы кілті Курстар мен Мұғалімдер кестелері арасында байланыс орнатуға көмектесті деп айта аламыз.

Image
Image

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

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

Бір-бір

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

Бірге-көп

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

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

Көптен-көпке

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

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

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

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

Мұғалім_идентификаторы Мұғалім_аты Курс
Мұғалім_001 Кармен Биология, математика
Мұғалім_002 Вероника Математика
Мұғалім_003 Хорхе ағылшын

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

Немесе 1NF: талаптарын орындау үшін Карменге екінші рекорд қосуды шешкен шығармыз

Мұғалім_идентификаторы Мұғалім_аты Курс
Мұғалім_001 Кармен Биология
Мұғалім_001 Кармен Математика
Мұғалім_002 Вероника Математика
Мұғалім_003 Хорхе ағылшын

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

Осы кестені «Мұғалімдер» және «Курстар» деген екі кестеге бөлу деректер арасында дұрыс қарым-қатынас жасайды, сондықтан деректердің дәйектілігі мен дәлдігін қамтамасыз етеді.

Ұсынылған: