Temat: Pierwsze kroki z bazami danych + pytania od studenta!
Przy okazji - programista baz danych to temat rzeka. Kim on jest, w jakich projektach jego rola jest istotna, a w jakich marginalna? Poniższy wpis może wyglądać jak z grupy "Projektowanie systemów IT", ale jest to nierozerwalnie związane z zagadnieniem baz danych.
1. Nadal dość popularne są systemy IT, których cechą charakterystyczną jest:
a. "wymieszanie" miejsc z logiką biznesową - trochę w kodzie aplikacji, trochę w bazie danych
b. podejście "database centric" - zaczynamy od projektowania magazynu danych (baza) - tworzymy tabele przechowujące konkretne dane, łączymy je związkami modelującymi wzajemne powiązania, a potem dopiero "dopisujemy" do tego kod w jakimś języku programowania. Tworzymy klasy na podstawie tabel ("mapujemy" je), dopisujemy klasy z logiką biznesową. Fragmenty kodu intensywnie operujące na danych przenosimy do procedur składowanych i widoków.
c. niewielka podatność na gruntowne zmiany, gdyż wymagają one przeprojektowania schematu bazy danych (w tym przeprojektowanie związków między tabelami, przemigrowanie danych do nowej struktury) oraz zmian w kodzie w wielu różnych miejscach (kod aplikacji, kod SQL w procedurach)
W takiej sytuacji, programiści "klasyczni" (C, Java, C#, Python itd) często sami sobie przygotowują bazę danych i zapytania do niej, stając się programistami baz danych.
Z drugiej strony, często w projekt zaangażowany jest także doradca, taki "magik baz danych", który dobrze zna zagadnienia optymalizacyjne - od strojenia bazy po pisanie zapytań. Siada razem z programistami i razem tworzą produkt.
Podejście takie nadal jest popularne w:
- wielu zwłaszcza mniejszych i niezbyt nowoczesnych firmach, takich "typowych", które trochę istnieją, trochę upadają, mają jakiś tam produkt i sobie go "rzeźbią" latami.
- korporacjach, w których rozwija się produkt zaprojektowany i wykonany w czasach, w których dominowały inne metodyki wytwarzania oprogramowania, inne technologie i trendy.
- w dużych i doświadczonych, ale jednak "skostniałych", konserwatywnych firmach, organizacjach i instytucjach, jak banki, służba zdrowia, gdzie najważniejsze jest: szybkość działania, doświadczenie i znajomość słabości/zalet danej technologii przez zespół, kompatybilność wsteczna z już istniejącym kodem (często to tysiące już istniejących procedur, modułów). Tam "ma działać szybko i dobrze" + szybki i skuteczny serwis. a kwestie elastyczności w zakresie rozbudowy czy kontaktów z innymi systemami IT - stoją na dalszym planie.
Charakterystyczne jest to, ze programiści takich systemów zwykle zaczynają od diagramów ERD albo diagramu klas traktowanego jak diagram bazy danych. Widoczna jest na tym etapie walka z redundancją danych, maksymalna normalizacja modelu i staranny dobór struktur danych.
W takich firmach jest duże zapotrzebowanie na programistów baz danych.
2. Zdarzają się, zwłaszcza w systemach bankowych i medycznych, całe programy "przeniesione" do bazy danych. Tzn. w bazie znajdują się zarówno dane jak i logika. Do tego dobudowany jest jedynie interfejs użytkownika. Takie systemy, chociaż totalnie "sztywne", bardzo nieelastyczne, trudne do rozbudowy, mają jednak swoje zalety (właśnie dlatego się je stosuje) jak szybkość i homogeniczność środowiska. Wdrożenie takiego systemu na nowej instancji to po prostu przywrócenie z backupu :)
Tam "programista baz danych" znajdzie się w swoim żywiole.
3. Istnieje klasa systemów informatycznych, gdzie wielki nacisk kładzie się w pierwszej kolejności na elastyczność rozbudowy, heterogeniczność i decentralizację (m.in. źródeł danych) a dopiero później na kwestie wydajnościowe.
Są to np. nowoczesne systemy klasy ERP (bo w starszych nadal dominuje podejście z pkt. 1) dla różnych dziedzin działalności (w tym medycyna), rozproszone systemy internetowe, które projektuje się zupełnie inaczej:
- podejście w pełni obiektowe (a nie "z użyciem obiektów")
- "reality centric", tj. zaczynamy od modelowania rzeczywistości, wyodrębniania pojęć, domen, aktorów, obiektów, opisu zachowań obiektów, zupełnie nie przejmując się miejscem składowania danych, nie zajmujemy się "schematami, tabelami, kluczami, kolumnami, triggerami", itd. Operujemy diagramami UML, nie traktując diagramu klas jako "zastępnika dla ERD".
- dobrze odwzorowują zmienną, dynamiczną rzeczywistość bez patrzenia na ograniczenia stawiane przez model relacyjny
- praktycznie zupełny brak przejmowania się redundancją danych, wręcz celowa denormalizacja modelu
- brak ukierunkowania na jakieś konkretne źródło danych. System może przechowywać stan obiektów w "bazie danych" (dowolnej, w tym nierelacyjnej), słowniki mogą pochodzić z webserwisów, a niektóre dane być zaciągane z plików XML, CSV od użytkownika lub z hurtowni danych. Dziś użytkownik pracuje na Oracle'u, jutro chce przejść na PostgreSQL i nie interesują go różnice. Pojutrze część danych może być zapisywana "w chmurze" - gdzie już zupełnie nie znamy szczegółów implementacyjnych, mamy tylko wystawione API
- stosuje się wysoce abstrakcyjne warstwy pośrednie z użyciem tzw. ORMów (pozwalających nieco zmniejszyć przepaść między relacyjnymi bazami danych a "światem obiektowym", mówiąc prosto: mapując tabele na obiekty, kolekcje realizując za pośrednictwem związków między tabelami) oraz repozytoriów obiektów danych, separujących maksymalnie warstwę logiki od warstwy źródła danych. Dobrze zaprojektowany system tak naprawdę nie ma pojęcia, "na jakim źródle danych pracuje", tam może być cokolwiek.
W takich miejscach "programista baz danych" nie znajdzie praktycznie nic dla siebie. Z jednym wyjątkiem - otóż czasem w tego rodzaju rozwiązaniach zdarza się sytuacja, że trzeba "skroić system na miarę pod konkretną bazę danych". Wtedy można sobie pozwolić na optymalizację i przygotowanie pewnych zapytań pod wskazany silnik, uwzględniając jego specyfikę. Ale to raz czy dwa razy. Potem firma może podziękować takiej osobie za współpracę.
4. Osobnym zagadnieniem są firmy spoza IT, korzystające z baz danych jako końcowi użytkownicy. Mają oprogramowanie, które zapisuje do tych baz jakieś dane, ale potrzebują specjalisty do ich odczytywania i wyciągania z nich istotnych informacji, czyli - raportowania. Przyda się też tutaj nieco programowania w innych językach.
Tam programista SQL może mieć życie pełne wyzwań, bo szefowie różnych działów uwielbiają "wskaźniki, słupki i panele analityczne" :)
5. Firmy typowo badawcze, które analizują dane. Tutaj znajomość zagadnień tworzenia, migracji (!) i odpytywania baz danych są jedną z głównych umiejętności. Administracja i optymalizacja silnika nie jest priorytetem - od tego jest administrator. Przykład - medycyna i badania kliniczne. Tutaj zapytania potrafią być mega skomplikowane (choć i tak łatwiejsze, niż odpowiednie konstrukcje w SAS czy R), więc programista SQL będzie miał dość możliwości do wykazania się :)
W takich firmach potrzebne są osoby interdyscyplinarne, więc np. statystyk, programista i bazodanowiec, więc i zarobki mogą być wielokrotnie wyższe (możliwe 5 cyfrowe kwoty). Jeśli ktoś jest bazodanowcem z dobrą znajomością nie tylko SQLa, a odkryje w sobie dodatkowo "żyłkę" analityka i ma jeszcze nieco wiedzy branżowej, może istotnie zmienić pułap wynagrodzeń.
Ten post został edytowany przez Autora dnia 04.06.15 o godzinie 18:56