praca_magisterska/pytania/odpowiedzi/27-jakosc-modelu-danych.md

237 lines
9.8 KiB
Markdown
Raw Normal View History

2025-12-21 19:58:11 +01:00
# Pytanie 27: Jakość modelu danych w projekcie informatycznym
## Pytanie
**"Dlaczego jakość modelu danych jest krytycznie ważnym czynnikiem jakości projektu informatycznego?"**
Przedmiot: MODA (Modelowanie Danych)
---
## 📚 Odpowiedź główna
### 1. Model danych jako fundament systemu
```
┌─────────────────────────────────────────────────────────────────┐
│ ARCHITEKTURA SYSTEMU │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ UI │ │ Logika │ │ Integracje │ │
│ │ │ │ biznesowa │ │ │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────┬────┴────────────────┘ │
│ │ │
│ ↓ │
│ ╔════════════════════════════════╗ │
│ ║ MODEL DANYCH ║ ← FUNDAMENT │
│ ║ (schemat bazy, encje, ║ │
│ ║ relacje, ograniczenia) ║ │
│ ╚════════════════════════════════╝ │
│ │
│ Zmiana modelu danych → kaskadowe zmiany w całym systemie! │
└─────────────────────────────────────────────────────────────────┘
```
---
### 2. Konsekwencje złego modelu danych
| Problem | Konsekwencje |
|---------|--------------|
| **Redundancja** | Anomalie (insert, update, delete), niespójność |
| **Brak normalizacji** | Duplikacja, trudna aktualizacja |
| **Nadmierna normalizacja** | Wolne zapytania (wiele JOIN) |
| **Złe typy danych** | Błędy konwersji, utrata precyzji |
| **Brak ograniczeń** | Nieprawidłowe dane w bazie |
| **Słaba dokumentacja** | Niezrozumiały schemat |
### Przykład: Anomalie przy braku normalizacji
```
Tabela nienormalizowana (zamówienia):
┌────────┬─────────┬─────────────┬───────────┬─────────┐
│OrderID │Customer │CustomerAddr │ Product │ Price │
├────────┼─────────┼─────────────┼───────────┼─────────┤
│ 1 │ Jan │ Warszawa │ Laptop │ 3000 │
│ 2 │ Jan │ Warszawa │ Mysz │ 50 │
│ 3 │ Anna │ Kraków │ Laptop │ 3000 │
└────────┴─────────┴─────────────┴───────────┴─────────┘
Problemy:
❌ UPDATE: Jan zmienia adres → aktualizuj wiele wierszy
❌ DELETE: Usunięcie zamówienia 3 → tracimy info o Annie
❌ INSERT: Nowy klient bez zamówienia → nie można dodać
```
---
### 3. Wpływ na różne aspekty projektu
#### Wydajność
```
Zły model:
SELECT * FROM orders
JOIN customers ON orders.customer_name = customers.name -- string comparison!
JOIN products ON orders.product_name = products.name
WHERE customers.city = 'Warszawa';
→ Full table scans, wolne JOIN na stringach
Dobry model:
SELECT * FROM orders o
JOIN customers c ON o.customer_id = c.id -- integer FK
JOIN products p ON o.product_id = p.id
WHERE c.city_id = 1; -- indexed lookup
→ Index scans, szybkie JOIN na integer PK/FK
```
#### Skalowalność
| Model | Skalowalność |
|-------|--------------|
| **Denormalizowany (złe)** | Ogromne tabele, trudne sharding |
| **Nadmiernie znormalizowany** | Wiele JOIN, complex queries |
| **Zbalansowany** | Optymalne partycjonowanie, cache-friendly |
#### Utrzymywalność
```
Zły model:
- Pole "data" typu VARCHAR przechowuje JSON, XML, CSV...
- Brak dokumentacji co oznaczają kody (status=1,2,3?)
- Nazwy kolumn: col1, col2, temp_field, test123
Dobry model:
- Dedykowane tabele i kolumny z opisowymi nazwami
- ENUM lub tabela słownikowa dla statusów
- Komentarze w schemacie, dokumentacja ERD
```
---
### 4. Koszty naprawy złego modelu
```
Koszt zmiany modelu danych w czasie:
Koszt
│ ████
│ ████████████
│ ████████████████████
│ ████████████████████████████
│ ████████████████████████████████████
│ ████████████████████████████████████████████
│████████████████████████████████████████████████████
└────────────────────────────────────────────────────→ Czas
Projekt Dev Test Prod 2 lata 5 lat
Migracja w produkcji: downtime, ryzyko utraty danych,
koordynacja z aplikacjami, rollback plan
```
**Reguła 1:10:100:**
- Naprawa w fazie projektowania: 1x
- Naprawa w fazie developmentu: 10x
- Naprawa w produkcji: 100x
---
### 5. Cechy dobrego modelu danych
| Cecha | Opis |
|-------|------|
| **Poprawność** | Odzwierciedla dziedzinę biznesową |
| **Kompletność** | Wszystkie wymagane dane |
| **Spójność** | Brak sprzeczności, integralność |
| **Minimalizm** | Brak zbędnej redundancji |
| **Elastyczność** | Możliwość rozszerzenia |
| **Wydajność** | Odpowiednia denormalizacja gdzie potrzeba |
| **Dokumentacja** | ERD, słownik danych |
---
### 6. Wpływ na jakość danych (GIGO)
```
Garbage In, Garbage Out:
┌──────────────────┐
│ Złe dane wejść. │ → Zły model → Złe decyzje biznesowe
│ (brak walidacji) │
└──────────────────┘
Dobry model wymusza jakość:
- NOT NULL gdzie wymagane
- CHECK constraints (age > 0)
- FOREIGN KEY (referential integrity)
- UNIQUE (brak duplikatów)
- Trigger dla złożonej walidacji
```
---
### 7. Model danych a architektura aplikacji
```
┌─────────────────────────────────────────────────────────────────┐
│ Model danych wpływa na: │
│ │
│ • ORM mapping (Entity classes) │
│ • API endpoints (REST resources) │
│ • UI forms (pola formularzy) │
│ • Validation rules │
│ • Business logic │
│ • Reports & Analytics │
│ • Data warehouse schema │
│ • Integration contracts │
│ │
│ Zmiana w modelu → propagacja do WSZYSTKICH warstw! │
└─────────────────────────────────────────────────────────────────┘
```
---
## 🧠 Mnemoniki
### "Model = Fundament domu":
Zły fundament → dom się zawali (kosztowna przebudowa)
### "GIGO = Garbage In, Garbage Out":
Zły model → złe dane → złe decyzje
### "1:10:100 = Koszt naprawy rośnie":
Im później naprawa, tym drożej
---
## ❓ Pytania dodatkowe
### Q1: "Jak mierzyć jakość modelu danych?"
**Odpowiedź:** Metryki: liczba anomalii, poziom normalizacji, pokrycie constraints, liczba orphan records, czas wykonania typowych zapytań, coupling między tabelami, dokumentacja coverage.
### Q2: "Kiedy denormalizacja jest uzasadniona?"
**Odpowiedź:** Read-heavy systemy (raportowanie), krytyczne zapytania wymagające wielu JOIN, cache/materialized views, data warehouse (star schema), gdy koszt UPDATE < koszt JOIN.
### Q3: "Jak ewoluować model w produkcji?"
**Odpowiedź:** Migracje (Flyway, Liquibase), blue-green deployment, feature flags, backward compatible changes (add column, nie remove), expand-contract pattern.
---
## 🎯 Kluczowe punkty
1. **Fundament:** Model danych = podstawa całego systemu
2. **Kaskada:** Zmiana modelu → zmiany wszędzie
3. **Koszt:** 1:10:100 - wczesne poprawki tańsze
4. **Jakość:** Constraints wymuszają poprawność danych
5. **Dokumentacja:** ERD, słownik danych niezbędne
---
## 📖 Źródła
1. Date - "An Introduction to Database Systems"
2. Fowler - "Patterns of Enterprise Application Architecture"
3. Ambler - "Agile Database Techniques"