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