Co to jest baza danych?
Baza danych to uporządkowany zbiór danych przechowywany w komputerze tak, żeby programy mogły szybko i bezpiecznie je wyszukiwać, dodawać, zmieniać i usuwać. Zarządza nią oprogramowanie nazywane systemem zarządzania bazą danych (DBMS), takie jak PostgreSQL, MySQL, SQLite albo MongoDB.
Aktualizacja: 24 września 2026
Kiedy logujesz się na stronie, serwis musi znaleźć twoje konto wśród milionów innych, sprawdzić hasło i wczytać ustawienia, wszystko w kilka milisekund. Nie otwiera pliku tekstowego i nie czyta go linia po linii. Wysyła do bazy danych zapytanie takie jak SELECT * FROM users WHERE email = 'ana@example.com', a baza danych przeskakuje od razu do właściwego wiersza dzięki indeksowi, podobnie jak skorowidz na końcu książki.
Jak działa baza danych
Współpracują tu dwa elementy. Baza danych to dane uporządkowane w stałej strukturze. System zarządzania bazą danych (DBMS) to program, który przechowuje te dane w plikach, dba o ich spójność i odpowiada na zapytania. PostgreSQL, MySQL i SQLite to systemy DBMS; twoja lista klientów to baza danych.
W relacyjnej bazie danych dane są przechowywane w tabelach. Każda tabela ma kolumny (imię, kraj, punkty) i wiersze (po jednym na użytkownika). Zapytanie przechodzi przez takie kroki:
- Twój program wysyła zapytanie, zwykle napisane w SQL (Structured Query Language).
- DBMS analizuje zapytanie i planuje, jak na nie odpowiedzieć: które tabele odczytać i czy indeks pozwoli pominąć większość wierszy.
- Odczytuje dane z dysku stronami o stałym rozmiarze (domyślnie 4096 bajtów w SQLite, 8 KB w PostgreSQL), trzymając często używane strony w pamięci.
- Filtruje, sortuje i łączy wiersze, a potem zwraca wynik.
Python ma wbudowane SQLite, więc możesz uruchomić prawdziwą bazę danych tutaj:
Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5
Program nigdzie nie mówi, jak szukać. Opisuje wynik, którego chce, a DBMS decyduje, jak go uzyskać. To główna różnica między zapytaniem do bazy danych a pisaniem pętli po liście.
Rodzaje baz danych
| Rodzaj | Przechowuje dane jako | Przykłady | Typowe zastosowanie |
|---|---|---|---|
| Relacyjna (SQL) | Tabele z wierszami i kolumnami, powiązane kluczami | PostgreSQL, MySQL, SQLite, Oracle, SQL Server | Użytkownicy, zamówienia, płatności: większość aplikacji |
| Dokumentowa | Dokumenty podobne do JSON | MongoDB, Firestore, CouchDB | Rekordy, których pola różnią się między sobą |
| Klucz-wartość | Wartość wyszukiwana po jednym kluczu | Redis, DynamoDB | Pamięć podręczna, sesje, liczniki |
| Kolumnowa (wide-column) | Wiersze z elastycznymi kolumnami rozłożone na wiele serwerów | Cassandra, HBase | Bardzo duża liczba zapisów |
| Grafowa | Węzły i relacje między nimi | Neo4j | Sieci społecznościowe, rekomendacje |
| Szeregów czasowych | Pomiary indeksowane czasem | InfluxDB, TimescaleDB | Metryki, odczyty z czujników |
| Wektorowa | Listy liczb (embeddingi) | pgvector, Pinecone, Milvus | Wyszukiwanie podobieństw w funkcjach AI |
Bazy, które nie są relacyjne, często określa się zbiorczo jako NoSQL. Relacyjne bazy danych pozostają domyślnym wyborem w większości aplikacji, bo tabele, ograniczenia i SQL dobrze pokrywają szeroki zakres problemów. Wiele produktów łączy też rodzaje: PostgreSQL przechowuje dokumenty JSON, a pgvector dodaje do niego wyszukiwanie wektorowe.
Transakcje: wszystko albo nic
Przelew pieniędzy od Any do Bena wymaga dwóch zmian: dodania Benowi i odjęcia Anie. Jeśli program zawiesi się między nimi, pieniądze pojawią się znikąd. Transakcja grupuje zmiany tak, że zapisane zostają albo wszystkie, albo żadna. Tutaj druga zmiana łamie regułę (saldo nie może spaść poniżej zera), więc baza danych cofa też pierwszą:
transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}
Kwota 40 została Benowi dodana, a potem odebrana, więc sumy nadal się zgadzają. Relacyjne bazy danych obiecują transakcjom cztery właściwości, znane jako ACID: atomowość (wszystko albo nic), spójność (reguły takie jak CHECK zawsze obowiązują), izolacja (dwóch użytkowników wykonujących transakcje jednocześnie nie widzi nawzajem swojej niedokończonej pracy) i trwałość (zapisana zmiana przetrwa awarię albo zanik zasilania).
Baza danych a arkusz kalkulacyjny i plik
| Plik tekstowy lub CSV | Arkusz kalkulacyjny | Baza danych | |
|---|---|---|---|
| Rozmiar | Tyle, ile program zdoła wczytać | 1 048 576 wierszy na arkusz w Excelu | Miliardy wierszy |
| Wielu piszących naraz | Nie | W ograniczonym zakresie | Tak, dzięki blokadom i transakcjom |
| Znalezienie jednego rekordu | Odczyt całego pliku | Filtr lub wyszukiwanie | Wyszukiwanie w indeksie |
| Reguły dla danych | Brak | Opcjonalna walidacja | Typy, ograniczenia, klucze obce |
| Zadawanie pytań | Własny kod | Formuły | SQL albo API zapytań |
Arkusz kalkulacyjny to dobre narzędzie dla jednej osoby, która przegląda kilka tysięcy wierszy. Gdy dane zapisuje jednocześnie kilka programów albo użytkowników albo dane muszą spełniać reguły, właściwym narzędziem jest baza danych.
Jak bazy danych chronią dane
DBMS zapisuje każdą zmianę w dzienniku, zanim dotknie plików z danymi (dziennik zapisu z wyprzedzeniem, write-ahead log), więc po awarii może powtórzyć albo cofnąć niedokończoną pracę. PostgreSQL może przechowywać sumę kontrolną dla każdej 8-kilobajtowej strony i zgłosić błąd sumy kontrolnej, gdy psujący się dysk zwróci uszkodzone dane. Użytkownicy i uprawnienia decydują, kto może czytać albo zmieniać które tabele, a replikacja trzyma kopie na innych serwerach. Programy muszą też przekazywać dane od użytkownika jako parametry, jak symbole zastępcze ? powyżej, a nigdy przez wklejanie ich do tekstu SQL, bo właśnie tak dochodzi do ataków SQL injection.
Częste nieporozumienia
- "SQL to baza danych." SQL to język. PostgreSQL, MySQL i SQLite to bazy danych, które go rozumieją.
- "NoSQL oznacza zupełny brak SQL." Termin zwykle rozumie się jako "not only SQL" (nie tylko SQL), a kilka baz NoSQL ma języki zapytań podobne do SQL, na przykład CQL w Cassandrze.
- "Baza danych to zawsze duży serwer." SQLite to pojedynczy plik, który program otwiera bezpośrednio, bez żadnego serwera. Działa w każdym telefonie z Androidem i iOS.
- "Dane w bazie są bezpieczne na zawsze." Baza danych chroni przed awariami, a nie przed kimś, kto przez pomyłkę wykona
DELETE. Kopie zapasowe nadal są potrzebne.
Co dalej
Kurs SQL uczy zapytań od pierwszego SELECT. Dokumentacja SQLite omawia kolejne kroki: czym jest SQLite, tworzenie tabeli, indeksy i ochronę przed SQL injection. Żeby zobaczyć, jak dane są rozłożone na dysku, przeczytaj co to jest bajt, a strona o sumie kontrolnej wyjaśnia, jak wykrywa się uszkodzone strony.