Przejściowa zależność w bazie danych jest pośrednią relacją między wartościami w tej samej tabeli, która powoduje zależność funkcjonalną. Aby osiągnąć standard normalizacji trzeciej postaci normalnej (3NF), należy wyeliminować wszelkie przejściowe zależności.
Z natury zależność przechodnia wymaga trzech lub więcej atrybutów (lub kolumn bazy danych), które mają zależność funkcjonalną między nimi, co oznacza, że kolumna A w tabeli opiera się na kolumnie B w pośredniej kolumnie C.
Zobaczmy, jak to może działać.
Przykład zależności przejściowej
AUTORSKI
Author_ID | Autor | Książka | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Gra Endera | Stany Zjednoczone |
Auth_001 | Orson Scott Card | Gra Endera | Stany Zjednoczone |
Auth_002 | Margaret Atwood | Opowieść służebnicy | Kanada |
W powyższym przykładzie AUTHORS:
- Książka → Autor : Tutaj Książka atrybut określa Autor atrybut. Jeśli znasz nazwę książki, możesz poznać nazwisko autora. Jednak, Autor nie określa Książka , ponieważ autor może pisać wiele książek. Na przykład, ponieważ znamy nazwisko autora, Orson Scott Card, wciąż nie znamy nazwy książki.
- Autor → Author_Nationality : Podobnie, Autor atrybut określa Author_Nationality , ale nie na odwrót; tylko dlatego, że wiemy, że narodowość nie oznacza, że możemy ustalić autora.
Ale ta tabela wprowadza zależność przechodnią:
- Książka → Author_Nationality: Jeśli znamy nazwę książki, możemy ustalić narodowość za pomocą kolumny Autor.
Unikanie przejściowych zależności
Aby zapewnić trzecią normalną formę, usuńmy przejściową zależność.
Możemy zacząć od usunięcia kolumny Książka z tabeli Autorzy i utworzenia osobnej tabeli Książki:
KSIĄŻKI
Book_ID | Książka | Author_ID |
---|---|---|
Book_001 | Gra Endera | Auth_001 |
Book_001 | Dzieci umysłu | Auth_001 |
Book_002 | Opowieść służebnicy | Auth_002 |
AUTORSKI
Author_ID | Autor | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | Stany Zjednoczone |
Auth_002 | Margaret Atwood | Kanada |
Czy to naprawić? Przyjrzyjmy się teraz naszym zależnościom:
Tabela BOOKS:
- Book_ID → Książka: The Książka zależy od Book_ID .
- Nie ma żadnych innych zależności w tej tabeli, więc jesteśmy w porządku. Zwróć uwagę, że klucz obcy Author_ID łączy tę tabelę z tabelą AUTHORS za pomocą klucza głównego Author_ID . Stworzyliśmy relację, aby uniknąć przejściowej zależności, kluczowego projektu relacyjnych baz danych.
AUTHORS table:
- Author_ID → Autor: The Autor zależy od Author_ID .
- Autor → Author_Nationality: Narodowość może ustalić autor.
- Author_ID → Author_Nationality: Narodowość można ustalić na podstawie: Author_ID przez Autor atrybut. Nadal mamy zależność przechodnią.
Aby znormalizować te dane, musimy dodać trzecią tabelę:
KRAJE
Country_ID | Kraj |
---|---|
Coun_001 | Stany Zjednoczone |
Coun_002 | Kanada |
AUTORSKI
Author_ID | Autor | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Teraz mamy trzy tabele, wykorzystujące klucze obce do połączenia tabel:
- Klucz obcy tabeli BOOK Author_ID łączy książkę z autorem w tabeli AUTHORS.
- Klucz obcy tabeli AUTHORS Country_ID łączy autora z krajem w tabeli KRAJE.
- Tabela KRAJE nie ma klucza obcego, ponieważ nie ma potrzeby łączenia z inną tabelą w tym projekcie.
Dlaczego zależności tranzytowe są złym projektem bazy danych
Jaka jest wartość unikania przechodnich zależności, aby zapewnić 3NF? Rozważmy ponownie naszą pierwszą tabelę i zobaczmy problemy, które ona powoduje:
AUTORSKI
Author_ID | Autor | Książka | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Gra Endera | Stany Zjednoczone |
Auth_001 | Orson Scott Card | Dzieci umysłu | Stany Zjednoczone |
Auth_002 | Margaret Atwood | Opowieść służebnicy | Kanada |
Ten rodzaj projektu może przyczynić się do anomalii i niespójności danych, na przykład:
- Jeśli skasowałbyś dwie książki "Dzieci umysłu" i "Gra Endera", usuwałbyś z bazy danych autora "Kartę Orsona Scotta" i jego narodowość.
- Nie możesz dodać nowego autora do bazy danych, chyba że dodasz także książkę; co, jeśli autor nie jest jeszcze opublikowany lub nie znasz nazwy książki, którą stworzyła?
- Jeśli "Karta Orsona Scotta" zmieniła jego obywatelstwo, musiałbyś to zmienić we wszystkich zapisach, w których się pojawia. Posiadanie wielu rekordów tego samego autora może skutkować niedokładnymi danymi: co, jeśli osoba wprowadzająca dane nie zdaje sobie sprawy, że istnieje dla niego wiele rekordów i zmienia dane tylko w jednym rekordzie?
- Nie możesz usunąć książki "Opowieść służebnicy" bez całkowitego usunięcia autora.
To tylko kilka powodów, dla których normalizacja i unikanie przechodnich zależności chroni dane i zapewnia ich spójność.