Skip to main content

Przechodniowa zależność w bazie danych

Baza i wymiar przestrzeni cz.6 Wyznacz macierz przejścia z bazy B do bazy B' (Kwiecień 2025)

Baza i wymiar przestrzeni cz.6 Wyznacz macierz przejścia z bazy B do bazy B' (Kwiecień 2025)
Anonim

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_IDAutorKsiążkaAuthor_Nationality
Auth_001Orson Scott CardGra EnderaStany Zjednoczone
Auth_001Orson Scott CardGra EnderaStany Zjednoczone
Auth_002Margaret AtwoodOpowieść służebnicyKanada

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_IDKsiążkaAuthor_ID
Book_001Gra EnderaAuth_001
Book_001Dzieci umysłuAuth_001
Book_002Opowieść służebnicyAuth_002

AUTORSKI

Author_IDAutorAuthor_Nationality
Auth_001Orson Scott CardStany Zjednoczone
Auth_002Margaret AtwoodKanada

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_IDKraj
Coun_001Stany Zjednoczone
Coun_002Kanada

AUTORSKI

Author_IDAutorCountry_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_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_IDAutorKsiążkaAuthor_Nationality
Auth_001Orson Scott CardGra EnderaStany Zjednoczone
Auth_001Orson Scott CardDzieci umysłuStany Zjednoczone
Auth_002Margaret AtwoodOpowieść służebnicyKanada

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ść.