Установява се връзка между две таблици на базата данни, когато една таблица използва външен ключ, който препраща към първичния ключ на друга таблица. Това е основната концепция зад термина релационна база данни.
Как работи външният ключ за установяване на връзка
Първичен ключ уникално идентифицира всеки запис в таблицата. Това е тип кандидат ключ, който обикновено е първата колона в таблица и може да бъде автоматично генериран от базата данни, за да се гарантира, че е уникален. Външният ключ е друг кандидат-ключ (не първичен ключ), използван за свързване на запис с данни в друга таблица.
Например, разгледайте тези две таблици, които идентифицират кой учител кой курс преподава. Тук първичният ключ на таблицата Courses е Course_ID. Неговият външен ключ е Teacher_ID:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | Биология | Teacher_001 |
Course_002 | математика | Teacher_002 |
Course_003 | английски | Teacher_003 |
Можете да видите, че външният ключ в Courses съвпада с първичен ключ в Teachers:
Teacher_ID | Име_на учител |
---|---|
Teacher_001 | Кармен |
Teacher_002 | Вероника |
Teacher_003 | Хорхе |
Можем да кажем, че външният ключ Teacher_ID помогна да се установи връзка между курсовете и таблиците на учителите.
Видове релации на бази данни
Използвайки външни ключове или други кандидат-ключове, можете да реализирате три типа релации между таблици:
Един към един
Този тип връзка позволява само един запис от всяка страна на връзката. Първичният ключ се отнася само до един запис (или нито един) в друга таблица. Например в брака всеки съпруг има само още един съпруг. Този вид връзка може да бъде реализирана в една таблица и следователно не използва външен ключ.
Едно към много
Връзката "един към много" позволява единичен запис в една таблица да бъде свързан с множество записи в друга таблица. Помислете за бизнес с база данни, която има таблици с клиенти и поръчки.
Един клиент може да закупи няколко поръчки, но една поръчка не може да бъде свързана с множество клиенти. Следователно таблицата Orders ще съдържа външен ключ, който съответства на първичния ключ на таблицата Customers, докато таблицата Customers няма да има външен ключ, сочещ към таблицата Orders.
Много към много
Това е сложна връзка, в която много записи в една таблица могат да се свържат с много записи в друга таблица. Например, нашият бизнес вероятно се нуждае от таблици „Клиенти“и „Поръчки“и вероятно също се нуждае от таблица „Продукти“.
Отново връзката между таблицата Клиенти и Поръчки е едно към много, но помислете за връзката между таблицата Поръчки и Продукти. Една поръчка може да съдържа множество продукти и един продукт може да бъде свързан с множество поръчки, тъй като няколко клиента могат да подадат поръчка, която съдържа някои от едни и същи продукти. Този вид връзка изисква най-малко три таблици.
Защо са важни връзките с бази данни?
Установяването на последователни връзки между таблиците на базата данни помага да се гарантира целостта на данните, допринасяйки за нормализирането на базата данни. Например, какво ще стане, ако не свържем никакви таблици чрез външен ключ и вместо това комбинираме данните в таблиците Курсове и Преподаватели, така:
Teacher_ID | Име_на учител | Курс |
---|---|---|
Teacher_001 | Кармен | Биология, Математика |
Teacher_002 | Вероника | математика |
Teacher_003 | Хорхе | английски |
Този дизайн е негъвкав и нарушава първия принцип на нормализиране на базата данни, First Normal Form, който гласи, че всяка клетка на таблицата трябва да съдържа единична, отделна част от данните.
Или може би решихме да добавим втори запис за Кармен, за да наложим 1NF:
Teacher_ID | Име_на учител | Курс |
---|---|---|
Teacher_001 | Кармен | Биология |
Teacher_001 | Кармен | математика |
Teacher_002 | Вероника | математика |
Teacher_003 | Хорхе | английски |
Това все още е слаб дизайн, който въвежда ненужно дублиране и така наречените аномалии при вмъкване на данни, което означава, че може да допринесе за непоследователни данни. Например, ако учител има множество записи, какво ще стане, ако някои данни трябва да бъдат редактирани, но лицето, което извършва редактирането на данните, не осъзнава, че съществуват множество записи? Тогава таблицата ще съдържа различни данни за едно и също лице, без ясен начин да го идентифицирате или избегнете.
Разбиването на тази таблица на две таблици, учители и курсове, създава правилната връзка между данните и следователно спомага за осигуряване на последователност и точност на данните.