logo

Транзитивна зависимост в СУБД

Нека разгледаме релация R(A B C). Тук A, B и C са известни като атрибут на релацията R. Когато възникне следното условие; тогава транзитивната зависимост възниква в СУБД. Условията са A → B, B → C. Следователно условието става A → C. С други думи, можем да кажем, че когато зависимостите са направени от две функционални зависимости, тогава функционалните зависимости стават транзитивни зависимости.

Какво е преходна зависимост?

Да разгледаме релация R(A B C). Тук A, B и C са известни като атрибут на релацията R. Когато възникне следното условие; тогава транзитивната зависимост възниква в СУБД. Условията са A → B, B → C. Следователно условието става A → C. в транзитивните функционални зависимости зависимият е пряко зависим от детерминантата.

Нека разберем транзитивните зависимости с помощта на следния пример.

Author_ID Автор Книга Автор_Националност
A1 Арундати Рой Богът на малките неща Индия
A1 Киран Десай Наследството на загубата Индия
A2 Р. К. Нараян Човекоядецът от Малгуди Индия

В горната таблица на авторите получаваме това.

    Книга → Автор:Тук атрибутът на автора се определя от атрибута на книгата. Ако някой знае името на книгата, може да научи и името на автора.Автор → Автор_Националност:Ако някой знае името на автора, може да научи и националността на автора.Книга → Автор_Националност: Ако някой знае името на книгата, може да научи и националността на автора.

Ако разгледаме внимателно функционалните зависимости, обсъдени по-горе, ще открием следния модел.

  • A → B и B → C B → C; следователно A → CA → C.
  • A → Книга, B → Автор B → Автор и C → Автор_Националност C→Автор_Националност

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

Как да избегнем преходните зависимости?

Нека разгледаме отново горната таблица на автора и да видим какъв тип проблем възниква по време на създаването на таблицата.

Таблица на авторите:

Author_ID Автор Книга Автор_Националност
A1 Арундати Рой Богът на малките неща Индия
A1 Киран Десай Наследството на загубата Индия
A2 Р. К. Нараян Човекоядецът от Малгуди Индия

Аномалиите в данните (като аномалии при актуализиране, вмъкване и изтриване) и несъответствието могат да бъдат допринесени от таблицата на автора. Когато има твърде много излишък в базата данни, тогава в данните се причиняват аномалии. Аномалии в данните също се причиняват, когато има проблем с актуализирането, изтриването и вмъкването на нови данни. Например в таблицата на автора-

  • Не можем да добавим нов автор, докато не можем да добавим книга към таблицата.
  • Не можем да изтрием автора, докато не изтрием напълно книгата от базата данни.
  • Ако искаме да изтрием книгата „Богът на малките неща“, идентификационният номер, авторът и националността на автора също се изтриват.

Горните проблеми възникват във всяка връзка, която съдържа преходни зависимости.

Трета нормална форма чрез премахване на транзитивната зависимост

Нека разгледаме Авторска таблица с три атрибута (Author_ID, Author, Author_Nationality) и се опитайте да намерите и премахнете Transitive зависимостта от тази таблица,

Таблица на авторите:

Author_ID Автор Книга Автор_Националност
A1 Арундати Рой Богът на малките неща Индия
A1 Киран Десай Наследството на загубата Индия
A2 Р. К. Нараян Човекоядецът от Малгуди Индия

Горната таблица на автора не е в 3NF, защото има транзитивна зависимост. Да видим как

форматирайте датата в java
  • Автор → Автор_Националност Автор → Автор_Националност
  • Author_ID → Автор

Следователно съществува и следната функционална зависимост,

  • Authir_ID → Author_Nationality формира модел, подобен на това, което обсъдихме по-горе.

Сега, за да елиминираме транзитивната зависимост, всичко, което трябва да направим, е да разделим таблицата на автора по такъв начин, че Author_ID вече да не зависи функционално от Author_Nationality.

Нека създадем две таблици, едната съдържа само { Author_ID, Author}, а другата съдържа {Author_Nationality}. Новите таблици ще изглеждат така,

Таблица на автора

Author_ID Автор
A1 Богът на малките неща
A2 Наследството на загубата
A3 Човекоядецът от Малгуди

Таблица за националност на автора

Автор Автор_Националност
Арундати Рой Индия
Киран Десай Индия
Р. К. Нараян Индия

Сега новата таблица на автора и таблицата с националност на автора не съдържа транзитивна зависимост и релацията вече е в 3NF.