mirror of
https://github.com/kuhyx/praca_magisterska.git
synced 2026-07-04 13:43:05 +02:00
516 lines
14 KiB
Markdown
516 lines
14 KiB
Markdown
|
|
# Pytanie 3: Redundancja i normalizacja w relacyjnej bazie danych
|
||
|
|
|
||
|
|
## Pytanie
|
||
|
|
**"Omówić zagadnienia redundancji i normalizacji w relacyjnej bazie danych oraz wynikające z tego wymagania."**
|
||
|
|
|
||
|
|
Przedmiot: BD2 (Bazy Danych 2)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📚 Odpowiedź główna
|
||
|
|
|
||
|
|
### Wprowadzenie
|
||
|
|
|
||
|
|
**Redundancja** (nadmiarowość) i **normalizacja** to dwa fundamentalne, przeciwstawne pojęcia w projektowaniu relacyjnych baz danych:
|
||
|
|
|
||
|
|
- **Redundancja** = niepożądane powtarzanie danych
|
||
|
|
- **Normalizacja** = proces eliminacji redundancji poprzez dekompozycję relacji
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. Redundancja danych
|
||
|
|
|
||
|
|
### Definicja
|
||
|
|
**Redundancja** występuje, gdy ta sama informacja jest przechowywana w wielu miejscach bazy danych, co prowadzi do:
|
||
|
|
- Marnowania pamięci
|
||
|
|
- Niespójności danych (anomalii)
|
||
|
|
- Trudności w utrzymaniu
|
||
|
|
|
||
|
|
### Anomalie wynikające z redundancji
|
||
|
|
|
||
|
|
#### Przykład - tabela z redundancją:
|
||
|
|
|
||
|
|
| StudentID | Imię | Nazwisko | KursID | NazwaKursu | Prowadzący |
|
||
|
|
|-----------|------|----------|--------|------------|------------|
|
||
|
|
| 1 | Jan | Kowalski | BD1 | Bazy Danych | Dr Nowak |
|
||
|
|
| 1 | Jan | Kowalski | AISDI | Algorytmy | Prof. Wiśniewski |
|
||
|
|
| 2 | Anna | Nowak | BD1 | Bazy Danych | Dr Nowak |
|
||
|
|
| 2 | Anna | Nowak | BD1 | Bazy Danych | Dr Nowak |
|
||
|
|
|
||
|
|
**Problemy:**
|
||
|
|
- "Bazy Danych" i "Dr Nowak" powtórzono 3 razy
|
||
|
|
- "Jan Kowalski" powtórzono 2 razy
|
||
|
|
|
||
|
|
### Trzy typy anomalii
|
||
|
|
|
||
|
|
#### 1. Anomalia wstawiania (Insertion Anomaly)
|
||
|
|
**Problem:** Nie można dodać danych bez dodania innych, niepotrzebnych danych.
|
||
|
|
|
||
|
|
**Przykład:** Nie możemy dodać nowego kursu "Sieci komputerowe" bez przypisania do niego studenta.
|
||
|
|
|
||
|
|
#### 2. Anomalia usuwania (Deletion Anomaly)
|
||
|
|
**Problem:** Usunięcie danych powoduje niezamierzoną utratę innych informacji.
|
||
|
|
|
||
|
|
**Przykład:** Jeśli Anna Nowak zrezygnuje ze studiów, tracimy informację, że kurs BD1 prowadzi Dr Nowak (jeśli była jedynym studentem tego kursu).
|
||
|
|
|
||
|
|
#### 3. Anomalia modyfikacji (Update Anomaly)
|
||
|
|
**Problem:** Zmiana jednej informacji wymaga modyfikacji wielu wierszy.
|
||
|
|
|
||
|
|
**Przykład:** Jeśli Dr Nowak zmieni nazwisko, musimy zaktualizować wszystkie wiersze z kursem BD1.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. Normalizacja
|
||
|
|
|
||
|
|
### Definicja
|
||
|
|
**Normalizacja** to proces organizowania danych w bazie w celu:
|
||
|
|
- Eliminacji redundancji
|
||
|
|
- Zapewnienia integralności danych
|
||
|
|
- Ułatwienia utrzymania i modyfikacji
|
||
|
|
|
||
|
|
### Podstawowe pojęcia
|
||
|
|
|
||
|
|
#### Zależność funkcyjna (Functional Dependency - FD)
|
||
|
|
**X → Y** oznacza: wartość X jednoznacznie określa wartość Y
|
||
|
|
|
||
|
|
**Przykład:** StudentID → (Imię, Nazwisko)
|
||
|
|
- Znając StudentID, możemy jednoznacznie określić imię i nazwisko
|
||
|
|
|
||
|
|
#### Klucz główny (Primary Key)
|
||
|
|
Minimalny zbiór atrybutów, który jednoznacznie identyfikuje krotkę (wiersz).
|
||
|
|
|
||
|
|
#### Klucz kandydujący (Candidate Key)
|
||
|
|
Każdy minimalny zbiór atrybutów, który mógłby być kluczem głównym.
|
||
|
|
|
||
|
|
#### Atrybut pierwszy (Prime Attribute)
|
||
|
|
Atrybut należący do jakiegokolwiek klucza kandydującego.
|
||
|
|
|
||
|
|
#### Atrybut wtórny (Non-prime Attribute)
|
||
|
|
Atrybut nienależący do żadnego klucza kandydującego.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. Postacie normalne
|
||
|
|
|
||
|
|
### Hierarchia postaci normalnych
|
||
|
|
|
||
|
|
```
|
||
|
|
5NF ⊂ 4NF ⊂ BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF
|
||
|
|
```
|
||
|
|
|
||
|
|
Każda wyższa postać implikuje niższą.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 1NF - Pierwsza Postać Normalna
|
||
|
|
|
||
|
|
#### Wymagania:
|
||
|
|
1. **Atomowość wartości** - każda komórka zawiera jedną, niepodzielną wartość
|
||
|
|
2. **Brak powtarzających się grup** - brak tablic/list w komórkach
|
||
|
|
3. **Istnieje klucz główny**
|
||
|
|
|
||
|
|
#### ❌ Naruszenie 1NF:
|
||
|
|
|
||
|
|
| StudentID | Imię | Telefony |
|
||
|
|
|-----------|------|----------|
|
||
|
|
| 1 | Jan | 123456, 789012 |
|
||
|
|
|
||
|
|
#### ✅ Po normalizacji do 1NF:
|
||
|
|
|
||
|
|
**Studenci:**
|
||
|
|
| StudentID | Imię |
|
||
|
|
|-----------|------|
|
||
|
|
| 1 | Jan |
|
||
|
|
|
||
|
|
**Telefony:**
|
||
|
|
| StudentID | Telefon |
|
||
|
|
|-----------|---------|
|
||
|
|
| 1 | 123456 |
|
||
|
|
| 1 | 789012 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2NF - Druga Postać Normalna
|
||
|
|
|
||
|
|
#### Wymagania:
|
||
|
|
1. Spełnia 1NF
|
||
|
|
2. **Każdy atrybut wtórny jest w pełni funkcyjnie zależny od całego klucza głównego** (nie od jego części)
|
||
|
|
|
||
|
|
Dotyczy tylko tabel z **kluczem złożonym** (wielokolumnowym).
|
||
|
|
|
||
|
|
#### ❌ Naruszenie 2NF:
|
||
|
|
|
||
|
|
| StudentID | KursID | NazwaKursu | Ocena |
|
||
|
|
|-----------|--------|------------|-------|
|
||
|
|
| 1 | BD1 | Bazy Danych | 5 |
|
||
|
|
| 2 | BD1 | Bazy Danych | 4 |
|
||
|
|
|
||
|
|
Klucz: (StudentID, KursID)
|
||
|
|
- NazwaKursu zależy tylko od KursID, nie od całego klucza!
|
||
|
|
- KursID → NazwaKursu (częściowa zależność)
|
||
|
|
|
||
|
|
#### ✅ Po normalizacji do 2NF:
|
||
|
|
|
||
|
|
**Oceny:**
|
||
|
|
| StudentID | KursID | Ocena |
|
||
|
|
|-----------|--------|-------|
|
||
|
|
| 1 | BD1 | 5 |
|
||
|
|
| 2 | BD1 | 4 |
|
||
|
|
|
||
|
|
**Kursy:**
|
||
|
|
| KursID | NazwaKursu |
|
||
|
|
|--------|------------|
|
||
|
|
| BD1 | Bazy Danych |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3NF - Trzecia Postać Normalna
|
||
|
|
|
||
|
|
#### Wymagania:
|
||
|
|
1. Spełnia 2NF
|
||
|
|
2. **Brak przechodnich zależności funkcyjnych** - atrybuty wtórne nie zależą od innych atrybutów wtórnych
|
||
|
|
|
||
|
|
**Formalnie:** Dla każdej nietrywialnej FD X → A:
|
||
|
|
- X jest nadkluczem, LUB
|
||
|
|
- A jest atrybutem pierwszym (należy do klucza)
|
||
|
|
|
||
|
|
#### ❌ Naruszenie 3NF:
|
||
|
|
|
||
|
|
| StudentID | Imię | WydziałID | NazwaWydziału |
|
||
|
|
|-----------|------|-----------|---------------|
|
||
|
|
| 1 | Jan | W4 | Elektroniki |
|
||
|
|
|
||
|
|
Klucz: StudentID
|
||
|
|
- StudentID → WydziałID → NazwaWydziału (przechodnia zależność!)
|
||
|
|
|
||
|
|
#### ✅ Po normalizacji do 3NF:
|
||
|
|
|
||
|
|
**Studenci:**
|
||
|
|
| StudentID | Imię | WydziałID |
|
||
|
|
|-----------|------|-----------|
|
||
|
|
| 1 | Jan | W4 |
|
||
|
|
|
||
|
|
**Wydziały:**
|
||
|
|
| WydziałID | NazwaWydziału |
|
||
|
|
|-----------|---------------|
|
||
|
|
| W4 | Elektroniki |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### BCNF - Postać Normalna Boyce'a-Codda
|
||
|
|
|
||
|
|
#### Wymagania:
|
||
|
|
1. Spełnia 3NF
|
||
|
|
2. **Dla każdej nietrywialnej FD X → Y, X jest nadkluczem**
|
||
|
|
|
||
|
|
BCNF jest silniejsza niż 3NF - eliminuje przypadki, gdy atrybut pierwszy zależy od atrybutu niebędącego nadkluczem.
|
||
|
|
|
||
|
|
#### ❌ Naruszenie BCNF (ale spełnia 3NF):
|
||
|
|
|
||
|
|
| Student | Przedmiot | Prowadzący |
|
||
|
|
|---------|-----------|------------|
|
||
|
|
| Jan | Bazy Danych | Dr Nowak |
|
||
|
|
| Jan | Algorytmy | Dr Nowak |
|
||
|
|
| Anna | Bazy Danych | Dr Kowalski |
|
||
|
|
|
||
|
|
Klucze kandydujące: {Student, Przedmiot}, {Student, Prowadzący}
|
||
|
|
- Prowadzący → Przedmiot (jeden prowadzący = jeden przedmiot)
|
||
|
|
- Ale Prowadzący nie jest nadkluczem!
|
||
|
|
|
||
|
|
#### ✅ Po normalizacji do BCNF:
|
||
|
|
|
||
|
|
**Zapisy:**
|
||
|
|
| Student | Prowadzący |
|
||
|
|
|---------|------------|
|
||
|
|
| Jan | Dr Nowak |
|
||
|
|
| Anna | Dr Kowalski |
|
||
|
|
|
||
|
|
**Prowadzący:**
|
||
|
|
| Prowadzący | Przedmiot |
|
||
|
|
|------------|-----------|
|
||
|
|
| Dr Nowak | Bazy Danych |
|
||
|
|
| Dr Kowalski | Bazy Danych |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 4NF - Czwarta Postać Normalna
|
||
|
|
|
||
|
|
#### Wymagania:
|
||
|
|
1. Spełnia BCNF
|
||
|
|
2. **Brak nietrywialnych zależności wielowartościowych** (MVD - Multivalued Dependencies)
|
||
|
|
|
||
|
|
**Zależność wielowartościowa X ↠ Y:** Dla danego X istnieje zbiór wartości Y niezależny od innych atrybutów.
|
||
|
|
|
||
|
|
#### ❌ Naruszenie 4NF:
|
||
|
|
|
||
|
|
| Pracownik | Umiejętność | Język |
|
||
|
|
|-----------|-------------|-------|
|
||
|
|
| Jan | Java | Angielski |
|
||
|
|
| Jan | Java | Niemiecki |
|
||
|
|
| Jan | Python | Angielski |
|
||
|
|
| Jan | Python | Niemiecki |
|
||
|
|
|
||
|
|
Pracownik ↠ Umiejętność i Pracownik ↠ Język (niezależne!)
|
||
|
|
|
||
|
|
#### ✅ Po normalizacji do 4NF:
|
||
|
|
|
||
|
|
**PracownikUmiejętności:**
|
||
|
|
| Pracownik | Umiejętność |
|
||
|
|
|-----------|-------------|
|
||
|
|
| Jan | Java |
|
||
|
|
| Jan | Python |
|
||
|
|
|
||
|
|
**PracownikJęzyki:**
|
||
|
|
| Pracownik | Język |
|
||
|
|
|-----------|-------|
|
||
|
|
| Jan | Angielski |
|
||
|
|
| Jan | Niemiecki |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 5NF - Piąta Postać Normalna (PJNF)
|
||
|
|
|
||
|
|
#### Wymagania:
|
||
|
|
1. Spełnia 4NF
|
||
|
|
2. **Brak zależności połączeniowych** (Join Dependencies)
|
||
|
|
3. Dekompozycja bez strat tylko na podstawie kluczy kandydujących
|
||
|
|
|
||
|
|
5NF eliminuje redundancję wynikającą z niemożliwości odtworzenia oryginalnej relacji przez złączenie jej projekcji.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Tabela porównawcza postaci normalnych
|
||
|
|
|
||
|
|
| Postać | Eliminuje | Wymaga |
|
||
|
|
|--------|-----------|--------|
|
||
|
|
| **1NF** | Wielowartościowe atrybuty | Atomowość, klucz główny |
|
||
|
|
| **2NF** | Częściowe zależności | Pełna zależność od klucza |
|
||
|
|
| **3NF** | Przechodnie zależności | Brak X → A gdzie X nie jest nadkluczem i A nie jest pierwszym |
|
||
|
|
| **BCNF** | Zależności od nie-nadkluczy | Każdy determinant jest nadkluczem |
|
||
|
|
| **4NF** | Wielowartościowe zależności | Brak nietrywialnych MVD |
|
||
|
|
| **5NF** | Zależności połączeniowe | Dekompozycja tylko przez klucze |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. Proces normalizacji
|
||
|
|
|
||
|
|
### Algorytm dekompozycji do 3NF
|
||
|
|
|
||
|
|
1. **Znajdź pokrycie kanoniczne** zbioru zależności funkcyjnych
|
||
|
|
2. **Dla każdej FD X → A** utwórz relację R(X, A)
|
||
|
|
3. **Jeśli żadna relacja nie zawiera klucza kandydującego**, dodaj relację z atrybutami klucza
|
||
|
|
4. **Usuń relacje zawarte w innych relacjach**
|
||
|
|
|
||
|
|
### Własności dobrej dekompozycji
|
||
|
|
|
||
|
|
#### 1. Bezstratność (Lossless Join)
|
||
|
|
Po dekompozycji można odtworzyć oryginalną relację przez złączenie naturalne.
|
||
|
|
|
||
|
|
**Twierdzenie:** Dekompozycja R na R₁ i R₂ jest bezstratna wtw gdy:
|
||
|
|
- R₁ ∩ R₂ → R₁, lub
|
||
|
|
- R₁ ∩ R₂ → R₂
|
||
|
|
|
||
|
|
#### 2. Zachowanie zależności (Dependency Preservation)
|
||
|
|
Wszystkie oryginalne FD można zweryfikować w pojedynczych tabelach wynikowych (bez złączeń).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. Denormalizacja
|
||
|
|
|
||
|
|
### Kiedy stosować?
|
||
|
|
- **Optymalizacja wydajności** - złączenia są kosztowne
|
||
|
|
- **Systemy OLAP/hurtownie danych** - dane głównie odczytywane
|
||
|
|
- **Raportowanie** - predefiniowane zapytania
|
||
|
|
|
||
|
|
### Techniki denormalizacji:
|
||
|
|
1. **Dodanie redundantnych kolumn** - unikanie złączeń
|
||
|
|
2. **Tabele podsumowujące** - agregaty
|
||
|
|
3. **Tabele historyczne** - snapshoty
|
||
|
|
4. **Materializowane widoki** - cache wyników
|
||
|
|
|
||
|
|
### Kompromis:
|
||
|
|
```
|
||
|
|
NORMALIZACJA ←————————————→ DENORMALIZACJA
|
||
|
|
Integralność Wydajność odczytu
|
||
|
|
Mniej redundancji Więcej redundancji
|
||
|
|
Wolniejsze odczyty Szybsze odczyty
|
||
|
|
Szybsze zapisy Wolniejsze zapisy
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🧠 Mnemoniki
|
||
|
|
|
||
|
|
### "1-2-3-BC" dla postaci normalnych:
|
||
|
|
- **1**NF = **1** wartość w komórce (atomowość)
|
||
|
|
- **2**NF = **2** słowa: "pełna zależność" (od całego klucza)
|
||
|
|
- **3**NF = **3** słowa: "brak przechodniości" (A→B→C eliminowane)
|
||
|
|
- **BC**NF = **B**ardzo **C**isty (każdy determinant = nadklucz)
|
||
|
|
|
||
|
|
### "AIU" dla anomalii:
|
||
|
|
- **A**nomalia wstawiania (**A**dding) - nie można dodać
|
||
|
|
- **I**nsercja usuwania (**I**nterrupts) - traci dane przy DELETE
|
||
|
|
- **U**pdate modyfikacji - trzeba zmieniać wiele wierszy
|
||
|
|
|
||
|
|
### "KAP" dla kluczy:
|
||
|
|
- **K**lucz główny - wybrany unikalny identyfikator
|
||
|
|
- **A**lternatywny (kandydujący) - mógłby być głównym
|
||
|
|
- **P**ierwszy atrybut - należy do jakiegoś klucza
|
||
|
|
|
||
|
|
### Wzór na 3NF:
|
||
|
|
> "Każdy atrybut zależy od **klucza**, **całego klucza** i **tylko od klucza**."
|
||
|
|
> (The key, the whole key, and nothing but the key - so help me Codd!)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ❓ Możliwe pytania dodatkowe (follow-up)
|
||
|
|
|
||
|
|
### Q1: "Podaj przykład dekompozycji do 3NF z zachowaniem bezstratności"
|
||
|
|
|
||
|
|
**Odpowiedź:**
|
||
|
|
|
||
|
|
**Relacja:** R(A, B, C, D)
|
||
|
|
**FD:** A → B, B → C, C → D
|
||
|
|
|
||
|
|
**Klucz:** A
|
||
|
|
|
||
|
|
**Dekompozycja:**
|
||
|
|
1. R₁(A, B) - z FD A → B
|
||
|
|
2. R₂(B, C) - z FD B → C
|
||
|
|
3. R₃(C, D) - z FD C → D
|
||
|
|
|
||
|
|
**Sprawdzenie bezstratności:**
|
||
|
|
- R₁ ∩ R₂ = {B}, B → C (B jest kluczem R₂) ✓
|
||
|
|
- R₂ ∩ R₃ = {C}, C → D (C jest kluczem R₃) ✓
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Q2: "Czym się różni 3NF od BCNF?"
|
||
|
|
|
||
|
|
**Odpowiedź:**
|
||
|
|
|
||
|
|
| Cecha | 3NF | BCNF |
|
||
|
|
|-------|-----|------|
|
||
|
|
| **Warunek** | X nadklucz LUB A pierwszy | X zawsze nadklucz |
|
||
|
|
| **Siła** | Słabsza | Silniejsza |
|
||
|
|
| **Dekompozycja** | Zachowuje zależności | Może nie zachować |
|
||
|
|
| **Redundancja** | Możliwa minimalna | Brak |
|
||
|
|
|
||
|
|
**Przykład różnicy:**
|
||
|
|
|
||
|
|
R(Student, Przedmiot, Prowadzący)
|
||
|
|
- Klucze: {Student, Przedmiot}, {Student, Prowadzący}
|
||
|
|
- FD: Prowadzący → Przedmiot
|
||
|
|
|
||
|
|
**3NF:** ✅ spełniona (Przedmiot jest atrybutem pierwszym)
|
||
|
|
**BCNF:** ❌ naruszona (Prowadzący nie jest nadkluczem)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Q3: "Jak sprawdzić, czy relacja jest w 3NF?"
|
||
|
|
|
||
|
|
**Odpowiedź:**
|
||
|
|
|
||
|
|
**Algorytm:**
|
||
|
|
1. Znajdź wszystkie nietrywialne FD
|
||
|
|
2. Dla każdej FD X → A sprawdź:
|
||
|
|
- Czy X jest nadkluczem? → OK
|
||
|
|
- Czy A jest atrybutem pierwszym? → OK
|
||
|
|
- Jeśli żadne → NIE jest w 3NF
|
||
|
|
|
||
|
|
**Przykład:**
|
||
|
|
R(A, B, C), FD: {A → B, B → C}
|
||
|
|
|
||
|
|
Klucz: A
|
||
|
|
- A → B: A jest nadkluczem ✓
|
||
|
|
- B → C: B nie jest nadkluczem, C nie jest pierwszy ✗
|
||
|
|
|
||
|
|
**Wniosek:** R NIE jest w 3NF
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Q4: "Kiedy normalizacja może zaszkodzić?"
|
||
|
|
|
||
|
|
**Odpowiedź:**
|
||
|
|
|
||
|
|
1. **Systemy OLAP/raportowe:**
|
||
|
|
- Złączenia wielu tabel są kosztowne
|
||
|
|
- Dane głównie odczytywane, rzadko modyfikowane
|
||
|
|
- Lepiej: denormalizacja, schematy gwiazdy/płatka śniegu
|
||
|
|
|
||
|
|
2. **Aplikacje o wysokiej wydajności:**
|
||
|
|
- Każde złączenie to koszt
|
||
|
|
- Cache'owanie i replikacja danych może być szybsze
|
||
|
|
|
||
|
|
3. **Systemy czasu rzeczywistego:**
|
||
|
|
- Determinizm ważniejszy niż oszczędność miejsca
|
||
|
|
- Redundancja może przyspieszyć dostęp
|
||
|
|
|
||
|
|
**Zasada:** Normalizuj dla OLTP, denormalizuj dla OLAP
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Q5: "Co to jest zależność wielowartościowa (MVD)?"
|
||
|
|
|
||
|
|
**Odpowiedź:**
|
||
|
|
|
||
|
|
**Zależność wielowartościowa X ↠ Y:**
|
||
|
|
Dla każdej wartości X istnieje zbiór wartości Y, który jest niezależny od innych atrybutów relacji.
|
||
|
|
|
||
|
|
**Formalnie:** X ↠ Y w R(X, Y, Z) gdy:
|
||
|
|
Dla każdych dwóch krotek t₁, t₂ takich że t₁[X] = t₂[X]:
|
||
|
|
istnieje krotka t₃ gdzie:
|
||
|
|
- t₃[X] = t₁[X] = t₂[X]
|
||
|
|
- t₃[Y] = t₁[Y]
|
||
|
|
- t₃[Z] = t₂[Z]
|
||
|
|
|
||
|
|
**Intuicja:** Y i Z są "niezależne" przy danym X.
|
||
|
|
|
||
|
|
**Przykład:**
|
||
|
|
Pracownik ↠ Umiejętność (niezależne od języka)
|
||
|
|
Pracownik ↠ Język (niezależne od umiejętności)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Q6: "Wyjaśnij pojęcie pokrycia kanonicznego"
|
||
|
|
|
||
|
|
**Odpowiedź:**
|
||
|
|
|
||
|
|
**Pokrycie kanoniczne** to minimalny zbiór FD równoważny oryginalnemu.
|
||
|
|
|
||
|
|
**Właściwości:**
|
||
|
|
1. Prawa strona każdej FD ma jeden atrybut
|
||
|
|
2. Lewa strona jest minimalna (brak nadmiarowych atrybutów)
|
||
|
|
3. Brak redundantnych FD
|
||
|
|
|
||
|
|
**Algorytm:**
|
||
|
|
1. Rozłóż prawe strony: A → BC na A → B, A → C
|
||
|
|
2. Usuń nadmiarowe atrybuty z lewych stron
|
||
|
|
3. Usuń redundantne FD (te wynikające z innych)
|
||
|
|
|
||
|
|
**Przykład:**
|
||
|
|
F = {A → BC, B → C, A → B, AB → C}
|
||
|
|
|
||
|
|
Pokrycie kanoniczne:
|
||
|
|
Fc = {A → B, B → C}
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Kluczowe punkty do zapamiętania
|
||
|
|
|
||
|
|
1. **Redundancja** = powtarzanie danych → anomalie AIU
|
||
|
|
2. **Normalizacja** = dekompozycja eliminująca redundancję
|
||
|
|
3. **3NF** = standard praktyczny (zachowuje zależności)
|
||
|
|
4. **BCNF** = silniejsza, ale może gubić zależności
|
||
|
|
5. **Wzór 3NF:** "klucz, cały klucz, tylko klucz"
|
||
|
|
6. **Kompromis:** normalizacja vs wydajność
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📖 Źródła do pogłębienia
|
||
|
|
|
||
|
|
1. Date, C.J. - "An Introduction to Database Systems"
|
||
|
|
2. Elmasri, Navathe - "Fundamentals of Database Systems"
|
||
|
|
3. Codd, E.F. - "A Relational Model of Data for Large Shared Data Banks" (1970)
|
||
|
|
4. Garcia-Molina, Ullman, Widom - "Database Systems: The Complete Book"
|