Skip to main content

Транзитивна зависимост в база данни

1. Абстакт - Маршът на съзнанието (Април 2025)

1. Абстакт - Маршът на съзнанието (Април 2025)
Anonim

Транзитивната зависимост в база данни е непряка връзка между стойностите в същата таблица, която причинява функционална зависимост. За да постигнете стандарт за нормализиране на третата нормална форма (3NF), трябва да премахнете всяка транзитивна зависимост.

По своята същност транзитивната зависимост изисква три или повече атрибута (или колони за бази данни), които имат функционална зависимост между тях, което означава, че колона А в таблица разчита на колона Б чрез междинна колона В.

Да видим как това може да работи.

Пример за транзитивна зависимост

АВТОРИТЕ

Author_IDавторКнигаAuthor_Nationality
Auth_001Орсън Скот картаИграта на ЕндърСъединени щати
Auth_001Орсън Скот картаИграта на ЕндърСъединени щати
Auth_002Маргарет АтуудПриказката на ДевалкатаКанада

В горния пример AUTHORS:

  • Книга → автор : Тук, Книга атрибут определя автор атрибут. Ако знаете името на книгата, можете да научите името на автора. Въпреки това, автор не определя Книга , защото един автор може да напише няколко книги. Например, само защото знаем името на автора Орсън Скот Кар, все още не знаем името на книгата.
  • автор → Author_Nationality : По същия начин, автор атрибут определя Author_Nationality , но не и обратното; само защото знаем националността не означава, че можем да определим автора.

Но тази таблица въвежда транзитивна зависимост:

  • Книга → Author_Nationality: Ако знаем името на книгата, можем да определим националността чрез колоната "Автор".

Избягване на преходни зависимости

За да се осигури трета нормална форма, да премахнем транзитивната зависимост.

Можем да започнем с премахването на колоната "Книга" от таблицата "Автори" и създаването на отделна таблица "Книги":

КНИГИ

Book_IDКнигаAuthor_ID
Book_001Играта на ЕндърAuth_001
Book_001Децата на умаAuth_001
Book_002Приказката на ДевалкатаAuth_002

АВТОРИТЕ

Author_IDавторAuthor_Nationality
Auth_001Орсън Скот картаСъединени щати
Auth_002Маргарет АтуудКанада

Това ли го оправи? Нека разгледаме нашите зависимости сега:

КНИГИ таблица:

  • Book_ID → Книга: Най- Книга зависи от Book_ID .
  • Няма други зависимости в тази таблица, така че сме добре. Имайте предвид, че чуждестранният ключ Author_ID свързва тази таблица с таблицата AUTHORS чрез нейния първичен ключ Author_ID , Създадохме връзка, за да избегнем транзитивна зависимост, ключов проект на релационни бази данни.

Таблица "АВТОРИ":

  • Author_ID → Автор: Най- автор зависи от Author_ID .
  • автор → Author_Nationality: Националността може да бъде определена от автора.
  • Author_ID → Author_Nationality: Националността може да бъде определена от Author_ID през автор атрибут. Все още имаме транзитивна зависимост.

Трябва да добавим трета таблица, за да нормализираме тези данни:

ДЪРЖАВИ

Country_IDДържава
Coun_001Съединени щати
Coun_002Канада

АВТОРИТЕ

Author_IDавторCountry_ID
Auth_001Орсън Скот картаCoun_001
Auth_002Маргарет АтуудCoun_002

Сега имаме три маси, като използваме чужди ключове за свързване между масите:

  • Външният ключ на таблицата в книгата Author_ID свързва книга с автор в таблицата АВТОРИ.
  • Външният ключ на таблицата на AUTHORS Country_ID свързва автор към държава в таблицата COUNTRIES.
  • Таблицата COUNTRIES няма чужд ключ, тъй като няма нужда да се свързва с друга таблица в този дизайн.

Защо транзитивните зависимости са лоши База данни

Каква е стойността на избягване на транзитивни зависимости, за да се гарантира, че 3NF? Да разгледаме отново първата ни маса и да видим създадените от нея проблеми:

АВТОРИТЕ

Author_IDавторКнигаAuthor_Nationality
Auth_001Орсън Скот картаИграта на ЕндърСъединени щати
Auth_001Орсън Скот картаДецата на умаСъединени щати
Auth_002Маргарет АтуудПриказката на ДевалкатаКанада

Този вид дизайн може да допринесе за аномалии и несъответствия в данните, например:

  • Ако сте изтрили двете книги "Децата на ума" и "Играта на Ендър", ще изтриете изцяло автора "Orson Scott Card" и неговата националност от базата данни.
  • Не можете да добавяте нов автор към базата данни, освен ако не добавите и книга; какво ще стане, ако авторът все още не е публикуван или не познавате името на книгата, която е автор?
  • Ако "Орсън Скот Карт" промени своето гражданство, ще трябва да го промените във всички записи, в които той се появява. Имайки множество записи със същия автор, това може да доведе до неточни данни: какво ще стане, ако човекът за въвеждане на данни не осъзнае, че има много записи за него и променя данните само в един запис?
  • Не можете да изтриете книга като "Приказката на дервиката", без да изтривате напълно автора.

Това са само някои причини, поради които нормализирането и избягването на транзитивни зависимости защитават данните и осигуряват последователност.