Прелазна зависност у бази података је посредна веза између вриједности у истој табели која узрокује функционалну зависност. Да бисте постигли стандардни стандард Треће нормалне форме (3НФ), морате уклонити било какву транзитивну зависност.
Према својој природи, транзитивна зависност захтева три или више атрибута (или ступаца базе података) који имају функционалну зависност између њих, што значи да се колона А у табели ослања на колону Б кроз средњу колону Ц.
Да видимо како би ово могло да функционише.
Примјер транзитивне зависности
АУТОРИ
| Аутхор_ИД | Аутор | Књига | Аутхор_Натионалити |
|---|---|---|---|
| Аутх_001 | Орсон Сцотт картица | Ендерова игра | Сједињене Америчке Државе |
| Аутх_001 | Орсон Сцотт картица | Ендерова игра | Сједињене Америчке Државе |
| Аутх_002 | Маргарет Атвоод | Прича о слушкињи | Канада |
У примеру АУТОРС горе:
- Књига → Аутор : Овде Књига атрибут одређује Аутор атрибут. Ако знате име књиге, можете сазнати име аутора. Међутим, Аутор не одређује Књига , јер аутор може писати више књига. На пример, само зато што знамо име аутора Орсон Сцотт Цард, ми и даље не знамо име књиге.
- Аутор → Аутхор_Натионалити : Исто тако, Аутор атрибут одређује Аутхор_Натионалити , али не обрнуто; само зато што знамо да националност не значи да можемо одредити аутора.
Али ова табела уводи транзитивну зависност:
- Књига → Аутхор_Натионалити: Ако знамо име књиге, можемо утврдити националност преко колоне Аутор.
Избегавање транзитивних зависности
Да бисмо обезбедили трећу нормалну форму, уклонимо транзитивну зависност.
Можемо почети уклањањем колоне Књиге из табеле Аутори и креирањем одвојене таблице Књиге:
КЊИГЕ
| Боок_ИД | Књига | Аутхор_ИД |
|---|---|---|
| Боок_001 | Ендерова игра | Аутх_001 |
| Боок_001 | Деца умова | Аутх_001 |
| Боок_002 | Прича о слушкињи | Аутх_002 |
АУТОРИ
| Аутхор_ИД | Аутор | Аутхор_Натионалити |
|---|---|---|
| Аутх_001 | Орсон Сцотт картица | Сједињене Америчке Државе |
| Аутх_002 | Маргарет Атвоод | Канада |
Да ли је ово поправило? Хајде да испитамо наше зависности:
БООКС табела:
- Боок_ИД → Књига: Тхе Књига зависи од Боок_ИД .
- Ниједна друга зависност у овој табели не постоји, па смо у реду. Имајте на уму да је инострани кључ Аутхор_ИД повезује ову табелу са табулатом АУТХОРС преко свог примарног кључа Аутхор_ИД . Створили смо однос како бисмо избегли транзитивну зависност, кључни дизајн релационих база података.
АУТХОРС табела:
- Аутхор_ИД → Аутор: Тхе Аутор зависи од Аутхор_ИД .
- Аутор → Аутхор_Натионалити: Држављанство може одредити аутор.
- Аутхор_ИД → Аутхор_Натионалити: Држављанство се може одредити из Аутхор_ИД кроз Аутор атрибут. Још увек имамо транзитивну зависност.
Морамо додати трећу табелу за нормализацију ових података:
ДРЖАВЕ
| Цоунтри_ИД | Земља |
|---|---|
| Цоун_001 | Сједињене Америчке Државе |
| Цоун_002 | Канада |
АУТОРИ
| Аутхор_ИД | Аутор | Цоунтри_ИД |
|---|---|---|
| Аутх_001 | Орсон Сцотт картица | Цоун_001 |
| Аутх_002 | Маргарет Атвоод | Цоун_002 |
Сада имамо три табеле, користећи иностране кључеве за повезивање између табела:
- Страни кључ КЊИГЕ Аутхор_ИД повезује књигу са ауторком у табели АУТОРИ.
- Страни кључ тастера АУТХОРС Цоунтри_ИД повезује аутора са земљом у табели ЦОУНТРИЕС.
- Таблица ЦОУНТРИЕС нема инострани кључ јер нема потребе да се повеже са другом таблом у овом дизајну.
Зашто су транзитивне зависности лоши дизајн базе података
Која је вредност избегавања транзитивних зависности како би се осигурала 3НФ? Да размотримо наш први сто и видимо проблеме које он ствара:
АУТОРИ
| Аутхор_ИД | Аутор | Књига | Аутхор_Натионалити |
|---|---|---|---|
| Аутх_001 | Орсон Сцотт картица | Ендерова игра | Сједињене Америчке Државе |
| Аутх_001 | Орсон Сцотт картица | Деца умова | Сједињене Америчке Државе |
| Аутх_002 | Маргарет Атвоод | Прича о слушкињи | Канада |
Овакав дизајн може допринијети аномалијама података и неконзистентности, на примјер:
- Ако сте обрисали две књиге "Деца умова" и "Ендерова игра", избрисали бисте аутора "Орсон Сцотт Цард" и његову националност из базе података.
- Не можете додати новог аутора у базу података, осим ако не додате књигу; шта ако је аутор још необјављен или не знате име књиге коју је написала?
- Ако је "Орсон Сцотт Цард" променио своје држављанство, морао би га промијенити у свим записима у којима се појављује. Ако имате више записа са истим ауторима, може доћи до нетачних података: шта ако особа која унесе податке не схвати да има више записа за њега и да промијени податке само у једном запису?
- Не можете избрисати књигу као што је "Тхе Хандмаид'с Тале" без потпуног брисања аутора.
Ово су само неки разлози због којих нормализација и избегавање транзитивних зависности штите податке и обезбеђују конзистентност.












