Едно от най-важните понятия в базите данни е създаването на връзки между таблиците на базата данни. Тези взаимоотношения осигуряват механизъм за свързване на данни, съхранявани в множество таблици, и за извличането им по ефективен начин. За да създадете връзка между две таблици, трябва да посочите чужд ключ в една таблица, която препраща към колона в друга таблица.
Бази данни и отношения
Може би вече знаете, че базите данни са просто поредица от таблици , подобни на тези, които вече можете да използвате в електронна таблица , като например Microsoft Excel. Всъщност можете дори да преобразувате електронна таблица в Excel в база данни. Там, където базите данни се различават от електронните таблици, става въпрос за изграждането на мощни взаимоотношения между таблиците.
Обмислете, например, база данни, използвана от компания за проследяване на информацията за човешките ресурси. Тази база данни може да има таблица, наречена "Служители", която съдържа следната информация за всеки член на персонала на компанията:
- Идент. № на служителя
- Първо име
- Фамилия
- Офис телефон
- Домашен телефон
- PositionID
В този пример ID на служителя е уникално генерирано цяло число, което е присвоено на всеки служител, когато се добавят към базата данни. Идентификационният номер на позицията е код на работа, използван за посочване на позицията на служителя в компанията. В тази схема служител може да има само една длъжност, но множество (или не) служители могат да заемат всяка длъжност. Например, може да имате стотици служители с позиция "Каса".
Базата данни може да съдържа и таблица, наречена Позиции, със следната допълнителна информация за всяка позиция:
- PositionID
- Заглавие
- Ниво на работа
- SkillCategory
- местоположение
Полето ID на позицията в тази таблица е подобно на полето Employee ID в таблицата Employees - това е уникално генерирано цяло число, което се създава при добавяне на позиция към базата данни.
Когато отидем да извлечем списък от служители от базата данни, би било естествено да поискаме името на всеки човек и заглавието му. Тази информация обаче се съхранява в няколко таблици на базата данни, така че тя може да бъде извлечена само чрез заявка JOIN, която изисква съществуваща връзка между таблиците.
Когато погледнете структурата на масите, полето, дефиниращо връзката, вероятно е очевидно - полето ID Position. Всеки служител може да има само една позиция и тази позиция се идентифицира чрез включване на идентификационния номер на позицията от съответното вписване в таблицата "Позиции". В допълнение към това, че е основен ключ за таблицата Позиции, в този пример полето за Позиция на позицията е също чужд ключ от таблицата "Служители" до таблицата "Позиции". След това базата данни може да използва това поле за корелация на информацията от множество таблици и да гарантира, че всички промени или допълнения към базата данни продължават да налагат референтна цялост .
След като идентифицирате чуждия ключ, можете да продължите и да изтеглите желаната информация от базата данни, като използвате следната заявка:
Създаване на чужди ключове в SQL Server
Технически не е нужно да дефинирате изрично връзката, за да можете да извършвате заявки като горепосочената. Ако обаче изрично дефинирате връзката, като използвате ограничения за чужди ключове, базата данни ще може да изпълнява някои дейности за домакинството ви:
- Когато добавите нов запис към таблицата "Служители", базата данни ще гарантира, че идентификационният номер на позицията, който въвеждате, е валиден първичен ключ в таблицата Позиции.
- Ако промените идентификационния номер на позицията в таблицата Позиции, базата данни може да изпълни необходимите актуализации в таблицата "Служители", за да запази последователността.
- Базата данни може да защити от въздействието на заличаването на позиция от таблицата с позиции, като или откаже да изтрие позиция със съответните записи на служители, или да извърши каскадно изтриване на всички свързани служители.
Ето как ще създадете чуждия ключ в SQL Server:
ALTER TABLE Служители Добавете чужд ключ (PositionID) РЕФЕРЕНЦИИ Позиции (PositionID)Можете също така да създадете чужд ключ, когато създавате таблица, като добавите клаузата:
ВЪНШНИ КЛЮЧОВИ РЕФЕРЕНЦИИ Позиции (PositionID)до края на дефиницията на колоната за колоната с чужди ключове.