Функционална зависимост в СУБД: Видове с примери
⚡ Умно обобщение
Функционалната зависимост е ограничение, което определя как един атрибут се свързва с друг в СУБД. Тя е в основата на нормализацията, като идентифицира детерминанти и зависими елементи, и се класифицира като многозначни, тривиални, нетривиални и транзитивни зависимости.

Какво е функционална зависимост?
Функционална зависимост (FD) е ограничение, което определя връзката на един атрибут с друг атрибут в система за управление на бази данни (СУБД). Функционалната зависимост помага за поддържане на качеството на данните в базата данни. Тя играе жизненоважна роля при намирането на разлика между добър и лош дизайн на базата данни.
Функционалната зависимост се обозначава със стрелка „→“. Функционалната зависимост на Y от X се представя чрез X → Y. Нека разберем функционалната зависимост с пример.
Пример:
| Номер на служител | Име на служителя | Заплата | Град |
|---|---|---|---|
| 1 | Dana | 50000 | Сан Франциско |
| 2 | Франсис | 38000 | Лондон |
| 3 | Андрю | 25000 | Токио |
В този пример, ако знаем стойността на номера на служителя, можем да получим име на служителя, град, заплата и т.н. По този начин можем да кажем, че градът, името на служителя и заплатата са функционално зависими от номера на служителя.
Ключови термини
Ето някои ключови термини за функционална зависимост в база данни:
| Ключови термини | Descriptйон |
|---|---|
| аксиома | Аксиомите са набор от правила за извод, използвани за извеждане на всички функционални зависимости в релационна база данни. |
| разлагане | Правило, което предполага, че ако имате таблица, която изглежда съдържа два обекта, определени от един и същ първичен ключ, трябва да помислите за разделянето ѝ на две различни таблици. |
| Зависим | Показва се от дясната страна на диаграмата на функционалните зависимости. |
| определящ | Показва се от лявата страна на диаграмата на функционалните зависимости. |
| съюз | Това предполага, че ако две таблици са отделни и първичният ключ е един и същ, трябва да помислите за обединяването им. |
Правила за функционални зависимости (аксиоми на Армстронг)
По-долу са изброени трите най-важни правила за функционална зависимост в база данни. Те са известни като аксиоми на Армстронг и всяко друго правило за извод може да бъде изведено от тях.
- Рефлексивно правило: Ако X е набор от атрибути и Y е подмножество на X, тогава X → Y е валидно.
- Правило за увеличаване: Когато X → Y е валидно и C е набор от атрибути, тогава XC → YC също е валидно. Добавянето на атрибути не променя основната зависимост.
- Правило за транзитивност: Подобно на транзитивното правило в алгебрата: ако X → Y е валидно и Y → Z е валидно, тогава X → Z също е валидно.
От тях произлизат още три правила, които се използват постоянно на практика:
- Правило на Съюза: ако X → Y и X → Z, тогава X → YZ.
- Правило за разлагане: ако X → YZ, тогава X → Y и X → Z.
- Правило за псевдотранзитивност: ако X → Y и WY → Z, тогава WX → Z.
Многократното прилагане на тези правила към набор от зависимости води до неговото закриване, пълният набор от зависимости, които логически следват. Затварянето на набор от атрибути е и начинът, по който се намират кандидат-ключове, което е пряко свързано с изучаването на Ключове за СУБД.
Видове функционални зависимости в СУБД
В СУБД има основно четири вида функционална зависимост:
- Многозначна зависимост
- Тривиална функционална зависимост
- Нетривиална функционална зависимост
- Транзитивна зависимост
Многозначна зависимост в СУБД
Многозначна зависимост възниква в ситуация, когато в една таблица има множество независими многозначни атрибути. Многозначната зависимост е пълно ограничение между два набора от атрибути в една релация, изискващо наличието на определени кортежи. Разгледайте следния пример.
Пример:
| Модел_автомобил | Маф_година | Цвят |
|---|---|---|
| H001 | 2017 | метален |
| H001 | 2017 | Зелена |
| H005 | 2018 | метален |
| H005 | 2018 | Блу |
| H010 | 2015 | метален |
| H033 | 2012 | Сив |
В този пример, Maf_year и Color са независими един от друг, но зависят от Car_model. Тези две колони се считат за многостойностни, зависими от Car_model. Това е представено като:
модел_автомобил → година_на_производител
модел_автомобил → цвят
Тривиална функционална зависимост в СУБД
Тривиалната зависимост е набор от атрибути, който се нарича тривиален, ако наборът от атрибути е включен в този атрибут. Така че, X → Y е тривиална функционална зависимост, ако Y е подмножество на X. Разгледайте примера по-долу.
| Emp_id | Emp_name |
|---|---|
| AS555 | тормозя |
| AS811 | Джордж |
| AS999 | Кевин |
Да разгледаме тази таблица с две колони, Emp_id и Emp_name. {Emp_id, Emp_name} → Emp_id е тривиална функционална зависимост, тъй като Emp_id е подмножество на {Emp_id, Emp_name}.
Нетривиална функционална зависимост в СУБД
Нетривиална зависимост възниква, когато A → B е вярно и B не е подмножество на A. Ако атрибут B не е подмножество на атрибут A, зависимостта се счита за нетривиална.
| Компанията | Изпълнителен Директор | Възраст |
|---|---|---|
| Microsoft | Сатя Nadella | 51 |
| Сундар Pichai | 46 | |
| iPhone | Тим Кук | 57 |
Пример:
{Компания} → {Главен изпълнителен директор} (ако знаем компанията, знаем и името на главния изпълнителен директор). Но главният изпълнителен директор не е подмножество на компанията и следователно е нетривиална функционална зависимост.
Транзитивна зависимост в СУБД
Транзитивната зависимост е вид функционална зависимост, която възниква, когато даден атрибут е индиректно определен от две функционални зависимости. Разгледайте примера по-долу.
| Компанията | Изпълнителен Директор | Възраст |
|---|---|---|
| Microsoft | Сатя Nadella | 51 |
| Сундар Pichai | 46 | |
| Alibaba | Джак Ма | 54 |
{Компания} → {Главен изпълнителен директор} (ако знаем компанията, знаем и името на нейния главен изпълнителен директор).
{CEO} → {Age} (ако знаем изпълнителния директор, знаем и възрастта му).
Следователно, съгласно правилото за транзитивна зависимост, {Company} → {Age} трябва да е валидно, което е логично, защото ако знаем името на компанията, можем да намерим възрастта.
Забележка: транзитивна зависимост може да възникне само в релация с три или повече атрибута.
Какво е нормализиране?
Нормализацията е метод за организиране на данните в база данни, който ви помага да избегнете излишък на данни и аномалии при вмъкване, актуализиране и изтриване. Това е процес на анализ на релационните схеми въз основа на техните различни функционални зависимости и първичен ключ.
Нормализацията е присъща на теорията на релационните бази данни. Тя може да има ефект на разделяне на данните в допълнителни таблици, така че всеки факт да се съхранява веднъж. Пълният процес е разгледан в ръководството за нормализиране на базата данни, който се основава директно на горните типове зависимости.
Предимства на функционалната зависимост
- Функционалната зависимост избягва излишъка на данни, така че едни и същи данни не се повтарят на множество места в база данни.
- Това ви помага да поддържате качеството на данните в базата данни.
- Това ви помага да дефинирате значенията и ограниченията на базите данни.
- Това ви помага да идентифицирате лоши дизайни.
- Това ви помага да намерите фактите, свързани с дизайна на базата данни.
