W relacyjnej bazie danych zależność występuje, gdy informacje przechowywane w tej samej tabeli bazy danych jednoznacznie określają inne informacje przechowywane w tej samej tabeli. Zależność wielowartościowa występuje, gdy obecność co najmniej jednego wiersza w tabeli implikuje obecność co najmniej jednego innego wiersza w tej samej tabeli. Innymi słowy, dwa atrybuty (lub kolumny) w tabeli są od siebie niezależne, ale oba zależą od trzeciego atrybutu.
Wielowartościowa zależność uniemożliwia normalizację standardowej czwartej postaci normalnej. Relacyjne bazy danych mają pięć normalnych form, które reprezentują wytyczne dotyczące projektowania rekordów. Zapobiegają anomaliom aktualizacji i niespójnościom danych. Czwarta forma normalna dotyczy relacji wiele do jednego w bazie danych.
Zależność funkcjonalna a zależność wielowartościowa
Aby zrozumieć wielowartościową zależność, warto przyjrzeć się ponownie, czym jest zależność funkcjonalna.
Jeżeli atrybut X jednoznacznie określa atrybut Y, wtedy Y jest funkcjonalnie zależne od X. Jest to zapisane jako X -> Y. Na przykład w poniższej tabeli Uczniowie, Nazwisko_Ucznia określa Kierunek:
Nazwa_studenta | Główne |
---|---|
Ravi | Historia sztuki |
Beth | Chemia |
Tę zależność funkcjonalną można zapisać: Student_Name -> Major. Każda nazwa_ucznia określa dokładnie jedną specjalizację i nie więcej.
Jeśli chcesz, aby baza danych śledziła również sporty, które uprawiają ci uczniowie, możesz pomyśleć, że najprostszym sposobem na to jest dodanie kolejnej kolumny zatytułowanej Sport:
Nazwa_studenta | Główne | Sport |
---|---|---|
Ravi | Historia sztuki | Piłka Nożna |
Ravi | Historia sztuki | Siatkówka |
Ravi | Historia sztuki | Tenis |
Beth | Chemia | Tenis |
Beth | Chemia | Piłka Nożna |
Problem polega na tym, że Ravi i Beth uprawiają kilka sportów. Konieczne jest dodanie nowego wiersza dla każdego dodatkowego sportu.
Ta tabela wprowadziła wielowartościową zależność, ponieważ kierunek i sport są od siebie niezależne, ale oba zależą od ucznia. Jest to prosty przykład i łatwy do zidentyfikowania, ale zależność wielowartościowa może stać się problemem w dużej, złożonej bazie danych.
Zapisana jest zależność wielowartościowa X ->-> Y. W tym przypadku:
Nazwisko_studenta ->-> Major
Nazwisko_studenta ->- > Sport
To jest odczytywane jako "Imię_ucznia określa w wielu przypadkach specjalność" i "Nazwa_ucznia określa w wielu przypadkach sport."
Zależność wielowartościowa zawsze wymaga co najmniej trzech atrybutów, ponieważ składa się z co najmniej dwóch atrybutów zależnych od trzeciego.
Wielowartościowa zależność i normalizacja
Tabela z wielowartościową zależnością narusza standard normalizacji czwartej postaci normalnej, ponieważ tworzy niepotrzebne nadmiarowości i może przyczynić się do niespójnych danych. Aby zwiększyć to do 4NF, konieczne jest rozbicie tych informacji na dwie tabele.
Poniższa tabela ma teraz zależność funkcjonalną Student_Name -> Major i nie ma zależności wielowartościowych:
Nazwa_studenta | Główne |
---|---|
Ravi | Historia sztuki |
Ravi | Historia sztuki |
Ravi | Historia sztuki |
Beth | Chemia |
Beth | Chemia |
Chociaż ta tabela ma również pojedynczą zależność funkcjonalną: Student_Name -> Sport:
Nazwa_studenta | Sport |
---|---|
Ravi | Piłka Nożna |
Ravi | Siatkówka |
Ravi | Tenis |
Beth | Tenis |
Beth | Piłka Nożna |
Normalizacja jest często osiągana poprzez uproszczenie złożonych tabel, tak aby zawierały informacje związane z pojedynczym pomysłem lub tematem, zamiast prób, aby pojedyncza tabela zawierała zbyt wiele różnych informacji.