Małgorzata Łyczywek · 13 marzec 2024
Wprowadzenie do baz danych: narzędzia, techniki, trendy.
Bazy danych – jedna z najbardziej uniwersalnych umiejętności w branży IT. Spotykamy się z nimi wszędzie, chociaż nie zawsze mamy tego świadomość. Od aplikacji mobilnych po zaawansowane systemy biznesowe, są fundamentem zarządzania informacją. Ważne jest zrozumienie ich rodzajów, funkcji i narzędzi, by skutecznie wykorzystać w praktyce.
W artykule poruszę:
Część 1:
👉 Podstawy baz danych
👉 Narzędzia i oprogramowanie
👉 SQL i NoSQL
Część 2:
👉 Projektowanie i modelowanie bazy danych
👉 Optymalizacja i bezpieczeństwo
👉 Nauka i rozwój umiejętności
Część 1:
Podstawy Baz Danych
Zapewne już wiesz, że Podstawy baz danych stanowią fundament dla każdego, kto chce wejść do branży IT. To najczęściej powtarzające się wymaganie we wszystkich ofertach pracy niezależnie od poziomu stanowiska.
Bazy są konieczne aby przechowywać i zarządzać informacją, a ta jest wszędzie wokół nas .
Znajomość definicji takich pojęć jak tabela, rekord, pole czy klucz główny jest początkiem, aby zrozumieć, jak dane są ustrukturyzowane i jak można z nich korzystać.
Tabela, rekord, pole…czyli co
Tabela:
Struktura przechowująca dane w wierszach i kolumnach, gdzie każdy wiersz reprezentuje rekord, a kolumna - pole. Zazwyczaj wizualnie przypomina tabelkę w Excelu.
Rekord:
Zbiór powiązanych danych, zwykle odpowiadający jednemu obiektowi, osobie lub zdarzeniu, przechowywany w wierszu tabeli.
Pole:
Jednostka danych; kolumna w tabeli, która przechowuje określony typ informacji dla wszystkich rekordów.
Klucz główny:
Unikatowy identyfikator rekordu w tabeli, zapewniający, że każdy rekord jest jednoznacznie identyfikowalny.
Modele danych
Do podstaw zaliczymy też znajomość różnych modeli danych - od tych, które od razu przychodzą na myśl - relacyjnych, przez hierarchiczne, sieciowe, czy obiektowe. Modele są różnorodne jaki różnorodne są możliwości ich zastosowań. Warto poznać różnice, które później przydają się przy projektowaniu i tworzeniu baz danych, tak by spełniały specyficzne wymagania i cele biznesowe.
- Relacyjny: Model danych oparty na tabelach, których rekordy są powiązane za pomocą kluczy obcych. Umożliwia tworzenie złożonych zapytań i jest szeroko stosowany w tradycyjnych bazach danych.
- Hierarchiczny: Model danych, w którym dane są organizowane w strukturze drzewiastej. Każdy element ma jednego nadrzędnego i może mieć wielu podrzędnych, co przypomina strukturę rodzinną lub katalogów systemu plików.
- Sieciowy: Rozszerzenie modelu hierarchicznego, pozwalające na tworzenie bardziej złożonych powiązań, gdzie jeden rekord może mieć wielu nadrzędnych i wielu podrzędnych, formując sieć relacji.
- Obiektowy: Model danych, który reprezentuje dane za pomocą obiektów, podobnie jak w programowaniu obiektowym. Dane i ich zachowania (metody) są pakowane razem, co ułatwia modelowanie złożonych struktur danych.
Gdy dwóch programistów rozmawia, może paść takie pytanie:
- Z jakiej bazy danych korzystasz?"
- Głównie postgresa, a ty?
Jednak tak naprawdę, mowa tutaj o narzędziu jakim jest system zarządzania bazą danych.
System zarządzania bazami danych to oprogramowanie umożliwiające efektywne tworzenie, zarządzanie i manipulowanie danymi. DBMS stanowi most między bazą danych a użytkownikami lub aplikacjami, oferując zarówno prostotę obsługi, jak i zaawansowane funkcje, które spełniają różnorodne wymagania operacyjne i analityczne. Odpowiedni wybór DBMS może znacząco wpłynąć na wydajność, skalowalność i bezpieczeństwo aplikacji.
Systemy baz danych
Wśród popularnych systemów zarządzania bazami danych (DBMS) znajdują się MySQL, PostgreSQL, MongoDB, Oracle i SQL Server, każdy z nich zaprojektowany do obsługi specyficznych scenariuszy i wymagań.
- MySQL: Jest to darmowy, otwartoźródłowy system zarządzania relacyjnymi bazami danych, bardzo popularny wśród aplikacji internetowych. Charakteryzuje się łatwością użycia, dużą wydajnością oraz wszechstronnością. MySQL jest często wybierany dla projektów webowych ze względu na swoją kompatybilność z wieloma językami programowania i platformami.
- PostgreSQL: Darmowy ale bardziej zaawansowany otwartoźródłowy system zarządzania relacyjno-obiektowymi bazami danych. Znany z wytrzymałości, skalowalności, oraz wsparcia dla zaawansowanych funkcji SQL. PostgreSQL jest idealnym wyborem dla złożonych aplikacji dużych przedsiębiorstw wymagających niezawodnych transakcji i operacji na dużych zbiorach danych.
- MongoDB: Nierelacyjny system zarządzania bazami danych (NoSQL), który przechowuje dane w formacie dokumentów podobnym do JSON. MongoDB jest projektowany z myślą o skalowalności, prostocie i szybkości działania, co sprawia, że jest doskonałym rozwiązaniem dla aplikacji wymagających szybkiego dostępu do dużych ilości zróżnicowanych danych. Szczególnie popularny wśród startupów.
- Oracle: Potężny i wszechstronny system zarządzania relacyjnymi bazami danych, szeroko stosowany w dużych przedsiębiorstwach na całym świecie. Oracle oferuje zaawansowane środowisko bazodanker# funkcje bezpieczeństwa, niezawodność i skalowalność, co czyni go odpowiednim wyborem dla krytycznych aplikacji biznesowych i dużych baz danych.
- MS SQL Server: System zarządzania relacyjnymi bazami danych opracowany przez Microsoft, znany z łatwości integracji z innymi produktami Microsoft, takimi jak .NET i Microsoft Azure. SQL Server oferuje szeroki zakres usług w tym bezpieczeństwa i optymalizacji pamięci. Jest to środowisko łatwe w użyciu dla początkujących, oferując jednocześnie zaawansowane opcje dla bardziej doświadczonych użytkowników.
Przydatne narzędzia
Oprócz samych DBMS, istnieją również narzędzia do projektowania i zarządzania bazami danych, które ułatwiają modelowanie danych, automatyzację zadań i optymalizację wydajności, zapewniając tym samym wsparcie na każdym etapie cyklu życia bazy danych.
Przykładowo: DBVisualizer jest uniwersalnym menedżerem baz danych, który wspiera wiele różnych systemów zarządzania bazami danych, takich jak MySQL, PostgreSQL, Oracle, i wiele innych. Umożliwia użytkownikom wizualizację struktury bazy danych, edycję i wykonanie zapytań SQL, zarządzanie danymi oraz analizę wydajności bazy, wszystko przez przyjazny interfejs graficzny.
Natomiast na swoich kursach korzystam z MySQL Workbench, który jest oficjalnym narzędzie. od twórców MySQL, zaprojektowanym specjalnie do pracy z bazami danych MySQL. Umożliwia modelowanie danych, tworzenie wizualnych schematów, rozwijanie zapytań SQL, wszystkiego co potrzeba zarówno do nauki jak i pracy zawodowej. Jednocześnie jest intuicyjny w obsłudze.
Języki zapytań baz danych
Zapytania do bazy mają zwrócić nam dane. Języki zapytań odpowiadają więc za komunikację z bazą, pozwalając na tworzenie, modyfikowanie, wyszukiwanie i manipulowanie przechowywanymi danymi. Dwa główne typy języków zapytań to SQL dla systemów relacyjnych oraz różne “dialekty” używane w bazach NoSQL dla systemów nierelacyjnych.
SQL (Structured Query Language):
SQL jest standardowym językiem zapytań używanym w relacyjnych bazach danych. Jego podstawy obejmują strukturę zapytań składających się z różnych klauzul, takich jak SELECT, FROM, WHERE, GROUP BY, HAVING i ORDER BY, które służą do ekstrakcji, aktualizacji, wstawiania i usuwania danych. SQL umożliwia również tworzenie i modyfikację struktur bazy danych, takich jak tabele i indeksy. Służy też do wykonywania skomplikowanych operacji na danych, takich jak złączenia tabel, transakcje oraz agregacje.
NoSQL:
W bazach nierelacyjnych, takich jak MongoDB, Cassandra czy Couchbase, zamiast jednolitego języka zapytań stosuje się różne podejścia do manipulacji danymi. W przeciwieństwie do baz relacyjnych , które korzystają z jednego języka sql, zapytania NoSQL różnią się w zależności od typu bazy danych. Na przykład, w MongoDB zapytania są wyrażane jako dokumenty JSON, co ułatwia pracę z hierarchicznymi strukturami danych i pozwala na manipulację złożonymi danymi.
Część 2
Projektowanie schematu bazy danych
Projektowanie schematu bazy danych polega na definiowaniu struktury danych, jakie będą przechowywane w bazie, włączając w to tabele, kolumny, typy danych i relacje między tabelami. Dobrze zaprojektowany schemat powinien odzwierciedlać potrzeby biznesowe aplikacji oraz zapewniać skalowalność i elastyczność.
Na przykład, schemat dla aplikacji e-commerce może zawierać tabele dla użytkowników, produktów, zamówień i płatności, każda z odpowiednimi relacjami.
Diagramy ER
Diagramy ER (Entity-Relationship) są graficznym przedstawieniem struktury bazy danych. Pokazują encje (takie jak tabele), ich atrybuty i relacje między nimi. Użycie diagramów ER pomaga w wizualizacji i planowaniu struktury bazy danych przed jej fizycznym utworzeniem. Na przykład, diagram ER dla aplikacji zarządzania zasobami ludzkimi może ilustrować relacje między tabelami pracowników, działów i projektów.
Normalizacja i denormalizacja danych
Projektując bazę na pewno dojdziemy do momentu normalizacji danych. Normalizacja to proces organizowania danych w bazie danych w sposób, który redukuje redundancję i zależności. Dzieli dane na tabele i tworzy relacje między nimi za pomocą kluczy obcych, co minimalizuje powtórzenia i ułatwia utrzymanie danych. Na przykład, zamiast przechowywać adresy klientów bezpośrednio w tabeli zamówień, tworzy się oddzielną tabelę dla adresów i łączy ją z zamówieniami za pomocą klucza obcego.
Denormalizacja jest odwrotnym procesem, który polega na świadomym decydowaniu o wprowadzeniu powtórzeń (redundancji) danych w celu zwiększenia wydajności zapytań, szczególnie w systemach o dużym obciążeniu odczytu.
Na przykład: załóżmy mamy dwie tabele w bazie danych sklepu internetowego: Klienci i Zamówienia. Tabela Klienci przechowuje informacje o klientach (np. ID Klienta, Imię, Nazwisko), a tabela Zamówienia przechowuje informacje o zamówieniach (np. ID Zamówienia, ID Klienta, Data Zamówienia, Kwota). Informacje o klientach i ich zamówieniach są powiązane relacją za pomocą klucza obcego ID Klienta.
Dla lepszej wydajności, świadomie możemy zdecydować się na dodanie wybranych informacji o kliencie bezpośrednio do tabeli Zamówienia. Tabela Zamówienia po denormalizacji mogłaby zawierać dodatkowe kolumny, takie jak: Imię Klienta i Nazwisko Klienta, chociaż jest to duplikacja, to pozwala na szybsze pobieranie informacji o zamówieniach wraz z podstawowymi danymi klienta bez konieczności wykonywania złączenia tabel.
Czym są Indeksy na bazie danych?
Dalsza optymalizacja bazy danych wprowadzi nas w świat indexów.
Indeksowanie to technika optymalizacyjna polegająca na tworzeniu dodatkowych struktur danych, które pomagają szybciej wyszukiwać dane. Indeksy mogą znacząco przyspieszyć odczyt danych, ale ich tworzenie i utrzymanie może wpływać na wydajność zapisu
Na przykład, indeks na kolumnie “Stanowisko” w tabeli pracowników pozwoli szybciej wyszukiwać rekordy na podstawie stanowiska, ponieważ baza danych będzie mogła skorzystać z indeksu do bezpośredniego lokalizowania rekordów zamiast przeszukiwać każdy rekord jeden po drugim. W wyniku tej zmiany, zapytania typu “Znajdź wszystkich pracowników o stanowisku”sprzedawca” będą wykonane znacznie szybciej.
Jednakże, każdy indeks dodaje dodatkowy narzut na operacje zapisu do bazy danych, takie jak dodawanie nowych rekordów, aktualizacje lub usuwanie. Dzieje się tak, ponieważ baza danych musi nie tylko zaktualizować tabelę danych, ale również indeks lub wszystkie indeksy, które zawierają informacje, które pojawiają się w zmodyfikowanych danych. W przypadku dużej ilości operacji zapisu, zarządzanie tymi indeksami może wpłynąć na ogólną wydajność systemu.
W kontekście tego przykładu, jeśli tabela pracowników jest często aktualizowana lub jeśli pracownicy są często dodawani lub usuwani, utrzymanie indeksu na kolumnie “Stanowisko” może wpłynąć na czas potrzebny na przeprowadzenie tych operacji. Z tego powodu, decyzja o utworzeniu indeksu powinna być zawsze wynikiem rozważenia między potrzebą szybkiego dostępu do danych (odczyt), a koniecznością efektywnego przeprowadzania operacji zapisu
Pomijaną kwestią jest też fizyczne zużycie dysków na skutek intensywnych zapisów. Chociaż w czasach, gdy trzymamy nasze dane w chmurze wydaje się to mało ważne (nie nasz problem), to jednak jest to aspekt optymalizacji pod względem ekologicznym zmniejszenie zużycia i wydłużenie żywotności dysków.
Bezpieczeństwo danych
Oprócz optymalizacji wydajności, niezwykle ważne jest zapewnienie bezpieczeństwa i niezawodności baz danych przez skuteczne strategie utrzymania.
Odzyskiwanie Danych:
Oczywiście, że ludzie dzielą się na tych którzy robią backupy i tych którzy będą je robili ;)
Regularne tworzenie kopii zapasowych (backupów) danych jest ważnym elementem strategii bezpieczeństwa. Backupy umożliwiają odtworzenie danych w przypadku awarii sprzętu, uszkodzenia danych.
Co może złego się zdarzyć?
Wiele! Uszkodzenia mogą powstać jako wynik błędu oprogramowania lub innych nieprzewidzianych zdarzeń, takich jak ataki hakerskie. Ważne jest, aby backupy były robione cyklicznie, przechowywane w bezpiecznej lokalizacji, najlepiej oddzielonej geograficznie od głównego systemu baz danych. To ostatnie zminimalizuje ryzyko utraty danych spowodowane katastrofami naturalnymi lub innymi czynnikami zewnętrznymi.
Jeśli wydaje Ci się to nieprawdopodobne, to nawet giganci spotykają się ze zdarzeniami losowymi. W 2021 w Strasburgh spłonął jeden z budynków serwerowni OVH, w kilkanaście godzin OVH odzyskało stracone dane dzięki kopiom zapasowym w innej lokalizacji. Mniej szczęśliwe zakończenie wydarzyło się w Polsce firmie 2BE. W wyniku włamania do jednej z dużych usług hostingowych, zostały wyczyszczone bezpowrotnie serwery wraz z danymi ich klientów. Kopie zapasowe niestety były przechowywane w tym samym miejscu, w ramach tej samej infrastruktury serwerowej. Finalnie firma ogłosiła upadłość.
Wypadki się zdarzają!
Zabezpieczenia bazy danych:
Jak widać bezpieczeństwo jest tematem, którego nie wolno pominąć. Zabezpieczenie danych przechowywanych w bazach danych przed nieautoryzowanym dostępem wymaga zastosowania wielowarstwowych środków bezpieczeństwa, w tym:
• Autentykacja: Proces weryfikacji tożsamości użytkownika próbującego uzyskać dostęp do systemu baz danych. Może to być realizowane przez tradycyjne metody, takie jak login i hasło, jak również przez bardziej zaawansowane systemy, np. uwierzytelnianie dwuskładnikowe czy certyfikaty cyfrowe.
• Autoryzacja: Określa, do jakich zasobów i operacji na danych ma dostęp zautoryzowany użytkownik. Systemy zarządzania bazami danych pozwalają na szczegółowe określenie uprawnień dla poszczególnych użytkowników i grup, co ogranicza potencjalne ryzyko nadużyć.
• Szyfrowanie Danych: Szyfrowanie danych przechowywanych w bazie danych oraz danych przesyłanych między klientem a serwerem baz danych zapewnia ochronę przed odczytem przez nieuprawnione osoby. Szyfrowanie może być stosowane zarówno na poziomie danych spoczywających (przechowywanych na dysku), jak i danych w ruchu (przesyłanych przez sieć).
Implementacja tych zabezpieczeń wymaga starannego planowania i konfiguracji, ale jest niezbędna do ochrony wrażliwych informacji i zapewnienia ciągłości działania systemów baz danych. Na szczęście systemy dają nam wiele gotowych rozwiązań oraz sugestie dobrych praktyk.
Pozostaje też kolejny temat - przechowywanie danych zgodnie z lokalnym prawem. Są to tematy złożone, które również powinien uwzględnić projektant bazy danych.
Nauka baz danych
Na rynku dostępne są różne materiały edukacyjne i podejścia do nauki, takie jak kursy online, książki, wykłady, warsztaty oraz studia podyplomowe.
Każdemu według potrzeb!
Jednym z najefektywniejszych sposobów nauki jest uczestnictwo w kursie z mentorem. Mentor oferuje bezpośrednie wsparcie, wskazówki oraz zapewnia utrzymanie tempa nauki.
Nauka baz wymaga praktyki. Praktyczne ćwiczenia i projekty są jednak niezbędne do utrwalenia teoretycznej wiedzy. Tak jak ten artykuł pewnie uporządkuje w głowie różne obszary, nie sprawi, że znasz bazy danych.
W czasie kursu SQL od podstaw wykonywanie konkretnych zadań pozwala na sprawdzenie się w rozwiązywaniu problemów. Jest to umiejętność niezbędna do pracy w rzeczywistym środowisku developerskim. Dodatkowo, uczestnictwo w projektach grupowych uczy pracy zespołowej i komunikacji w branży IT.
Kolejną pomocą są portale takie jak Stack Overflow, Reddit czy dedykowane grupy na platformach społecznościowych jak discord. Razem stanowią super uzupełnienie I dają możliwość dyskusji wielu osób nad jednym problem.
Bazy danych są umiejętnością przyszłości
Gdy w branży IT wiele się dzieje i wszyscy z zapartym tchem śledzą rozwój sztucznej inteligencji, nie można zapomnieć o tym, co te sztuczne inteligencje napędza, czyli ogromne zbiory danych. Zaawansowane analizy i przetwarzanie Big Data stają się fundamentem dla innowacji, a bazy danych w chmurze umożliwiają łatwy dostęp do tych zasobów z dowolnego miejsca na świecie. Narzędzia takie jak Hadoop i Spark rewolucjonizują podejście do przetwarzania danych, zapewniając platformy zdolne do obsługi złożonych operacji na nieprzejrzystych ilościach danych.
Ponadto, na horyzoncie pojawiają się nowe trendy, takie jak kwantowe bazy, bazy danych czasu rzeczywistego, które pozwalają na błyskawiczne reagowanie na zmiany, oraz technologia blockchain, która obiecuje nowy poziom bezpieczeństwa i transparentności w zarządzaniu danymi. Te rozwijające się technologie nie tylko przesuwają granice możliwości, ale także otwierają drzwi do nowych, ekscytujących zastosowań sztucznej inteligencji i otwierają jeszcze większe zapotrzebowanie na specjalistów od danych w przyszłości.