Skip to main content

Транзитивна зависност у бази података

Anonim

Прелазна зависност у бази података је посредна веза између вриједности у истој табели која узрокује функционалну зависност. Да бисте постигли стандардни стандард Треће нормалне форме (3НФ), морате уклонити било какву транзитивну зависност.

Према својој природи, транзитивна зависност захтева три или више атрибута (или ступаца базе података) који имају функционалну зависност између њих, што значи да се колона А у табели ослања на колону Б кроз средњу колону Ц.

Да видимо како би ово могло да функционише.

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

АУТОРИ

Аутхор_ИДАуторКњигаАутхор_Натионалити
Аутх_001Орсон Сцотт картицаЕндерова играСједињене Америчке Државе
Аутх_001Орсон Сцотт картицаЕндерова играСједињене Америчке Државе
Аутх_002Маргарет АтвоодПрича о слушкињиКанада

У примеру АУТОРС горе:

  • Књига → Аутор : Овде Књига атрибут одређује Аутор атрибут. Ако знате име књиге, можете сазнати име аутора. Међутим, Аутор не одређује Књига , јер аутор може писати више књига. На пример, само зато што знамо име аутора Орсон Сцотт Цард, ми и даље не знамо име књиге.
  • Аутор → Аутхор_Натионалити : Исто тако, Аутор атрибут одређује Аутхор_Натионалити , али не обрнуто; само зато што знамо да националност не значи да можемо одредити аутора.

Али ова табела уводи транзитивну зависност:

  • Књига → Аутхор_Натионалити: Ако знамо име књиге, можемо утврдити националност преко колоне Аутор.

Избегавање транзитивних зависности

Да бисмо обезбедили трећу нормалну форму, уклонимо транзитивну зависност.

Можемо почети уклањањем колоне Књиге из табеле Аутори и креирањем одвојене таблице Књиге:

КЊИГЕ

Боок_ИДКњигаАутхор_ИД
Боок_001Ендерова играАутх_001
Боок_001Деца умоваАутх_001
Боок_002Прича о слушкињиАутх_002

АУТОРИ

Аутхор_ИДАуторАутхор_Натионалити
Аутх_001Орсон Сцотт картицаСједињене Америчке Државе
Аутх_002Маргарет АтвоодКанада

Да ли је ово поправило? Хајде да испитамо наше зависности:

БООКС табела:

  • Боок_ИД → Књига: Тхе Књига зависи од Боок_ИД .
  • Ниједна друга зависност у овој табели не постоји, па смо у реду. Имајте на уму да је инострани кључ Аутхор_ИД повезује ову табелу са табулатом АУТХОРС преко свог примарног кључа Аутхор_ИД . Створили смо однос како бисмо избегли транзитивну зависност, кључни дизајн релационих база података.

АУТХОРС табела:

  • Аутхор_ИД → Аутор: Тхе Аутор зависи од Аутхор_ИД .
  • Аутор → Аутхор_Натионалити: Држављанство може одредити аутор.
  • Аутхор_ИД → Аутхор_Натионалити: Држављанство се може одредити из Аутхор_ИД кроз Аутор атрибут. Још увек имамо транзитивну зависност.

Морамо додати трећу табелу за нормализацију ових података:

ДРЖАВЕ

Цоунтри_ИДЗемља
Цоун_001Сједињене Америчке Државе
Цоун_002Канада

АУТОРИ

Аутхор_ИДАуторЦоунтри_ИД
Аутх_001Орсон Сцотт картицаЦоун_001
Аутх_002Маргарет АтвоодЦоун_002

Сада имамо три табеле, користећи иностране кључеве за повезивање између табела:

  • Страни кључ КЊИГЕ Аутхор_ИД повезује књигу са ауторком у табели АУТОРИ.
  • Страни кључ тастера АУТХОРС Цоунтри_ИД повезује аутора са земљом у табели ЦОУНТРИЕС.
  • Таблица ЦОУНТРИЕС нема инострани кључ јер нема потребе да се повеже са другом таблом у овом дизајну.

Зашто су транзитивне зависности лоши дизајн базе података

Која је вредност избегавања транзитивних зависности како би се осигурала 3НФ? Да размотримо наш први сто и видимо проблеме које он ствара:

АУТОРИ

Аутхор_ИДАуторКњигаАутхор_Натионалити
Аутх_001Орсон Сцотт картицаЕндерова играСједињене Америчке Државе
Аутх_001Орсон Сцотт картицаДеца умоваСједињене Америчке Државе
Аутх_002Маргарет АтвоодПрича о слушкињиКанада

Овакав дизајн може допринијети аномалијама података и неконзистентности, на примјер:

  • Ако сте обрисали две књиге "Деца умова" и "Ендерова игра", избрисали бисте аутора "Орсон Сцотт Цард" и његову националност из базе података.
  • Не можете додати новог аутора у базу података, осим ако не додате књигу; шта ако је аутор још необјављен или не знате име књиге коју је написала?
  • Ако је "Орсон Сцотт Цард" променио своје држављанство, морао би га промијенити у свим записима у којима се појављује. Ако имате више записа са истим ауторима, може доћи до нетачних података: шта ако особа која унесе податке не схвати да има више записа за њега и да промијени податке само у једном запису?
  • Не можете избрисати књигу као што је "Тхе Хандмаид'с Тале" без потпуног брисања аутора.

Ово су само неки разлози због којих нормализација и избегавање транзитивних зависности штите податке и обезбеђују конзистентност.