główna strona  Strukturalny
Język
Zapytań
 
W moim odczuciu stworzenie standardu SQL było tym w dziedzinie magazynowania i przetwarzania danych, czym wynalazek silnika spalinowego dla motoryzacji. Można się spierać, czy jest to optymalne rozwiązanie, ale mimo sędziwego wieku nadal doskonale się spisuje. I wciąż nikt nie zaproponował nic lepszego.
dochodzenie
Gdy zapragnąłem zmienić programowanie z kosztownego hobby w źródło utrzymania, okazało się, że nikt nie chce programów rozwiązujących zagadkę 8 hetmanów ani wież w Hanoi. Ważniejsze okazywały się pytania typu ile-mam-par-butów-w-magazynie? Do mierzenia się z takimi problemami używano powszechnie języka Clipper, pracującego z bazami danych w standardzie dBase. Tworzyliśmy ogromne, niezgrabne i powolne programy znakomicie wspomagające zarządzanie firmami handlowymi. Ten dobrze ugruntowany model rozleciał się jak budowla z patyków wraz z popularyzacją sieci.
Widziałem wiele mniej lub bardziej udanych prób przedłużenia życia staroświeckich rozwiązań bazodanowych. Sam napisałem w swoim czasie zgrabną bibliotekę do obsługi plików DBF, a napisany w oparciu o nią program do rejestracji pacjentów i badań w przychodni lekarskiej funkcjonował bezawaryjnie przez 10 lat. W końcu jednak dinozaury muszą wymrzeć. Taka jest kolej rzeczy.
O SQL-u słyszałem już dawno, ale wydał mi się zrazu czymś w rodzaju COBOL-u, o którym miałem jak najgorsze zdanie. To opóźniło moją fascynację SQL-em o jakieś 10 lat. Poza tym wciąż mówiono o drogich rozwiązaniach komercyjnych od Oracla czy Microsoftu, z ich sztywnymi regułami licencjonowania. Zdecydowanie poza zasięgiem drobnego polskiego przedsiębiorcy. Nagle odkryłem MySQL pod Linuksem. Potężny silnik bazodanowy dostępny dla każdego. Nie ustępujący szybkością ani wydajnością swym wielkim komercyjnym konkurentom. Z tego zachwytu napisałem w Perl-u wygodny interfejs webowy, by można było pracować z danymi przy pomocy zwykłej przeglądarki www.
Pewnego razu zlecono mi opiekę nad DOS-owym systemem z bazami danych typu Clarion. System, a jakże, zdaniem producenta, sieciowy. Jego sieciowość polegała głównie na tym, że bazy można umieścić na dysku serwera, a operator korzysta z nich przy pomocy osobnego komputera. Wszystko działa dobrze, dopóki operator jest jeden. Przy większej liczbie użytkowników zaczynał się koszmar. Komputery niespodziewanie zawisały, a dokumenty znikały w niewyjaśniony sposób. Chlebem powszednim stało się odtwarzanie danych i niezbędne po każdej awarii indeksowanie plików. To magiczne indeksowanie przez lata było niemal codzienną praktyką w znanej, poważnej firmie. Notoryczne przestoje w oczekiwaniu na przywrócenie integralności danych. Smutek i rezygnacja w oczach pracowników poddających się temu rytuałowi.
Zdumiewające, jak ludzie przystosowują się do takich anomalii. Nauczyli się, że nie mogą z rana uruchamiać komputerów jednocześnie, bo to najczęściej powoduje "zwisy". Nauczyli się, że pewne operacje, np. skomplikowane raporty, można wykonywać tylko w określonych godzinach, bo spowalniają lub wręcz uniemożliwiają pracę innym użytkownikom. Nauczyli się regularnie robić kopie bezpieczeństwa, które nieraz pozostawały jedynym ratunkiem po poważniejszej awarii. Nauczyli się cierpliwie znosić indeksowanie...
Jednak największą niedogodnością okazał się ubogi system raportowania. Nie ma narzędzi do korzystania z danych systemu innych niż sam system. A producent wyposażył swe dzieło w kilka typowych zestawień - tyle, na ile mu starczyło wyobraźni. Zdecydowanie za mało, jak na potrzeby współczesnego menedżera. Widywałem więc pracowników przeglądających transakcje dokument po dokumencie i sumujących na kartce całymi dniami potrzebne wartości. Zgroza!
Tu wkraczam ja ze swoim SQL-em. Najtrudniejsze było napisanie konwertera, który kopiowałby dane z Clariona do MySQLa, ponieważ informacje o budowie tych kiepskich, zawodnych baz są strzeżone niczym największy skarb. W końcu, korzystając ze szczątkowych informacji wygrzebanych z internetu, trochę z domysłów i prób, udało się taki konwerter napisać. Dalej poszło jak z płatka. Co noc dane są pobierane automatycznie i przesyłane do MySQL. Interfejs www pozwala je przeglądać, sortować i filtrować w dowolnym układzie. Teraz żadne pytanie menedżera nie pozostanie bez odpowiedzi.
Zabawne, kiedy pojawiła się oferta nowego programu z argumentem: "Ten jest lepszy, bo opiera się na SQL", padło w odpowiedzi: "Ach, SQL, wielka mi rzecz - my to mamy już od lat". więcej...
warianty
Cały ten serwis opiera się na SQL-u. Poszczególne szpalty pamiętane są w wierszach tabeli wraz z informacją o ich położeniu względem siebie, a wyświetlaniem i redagowaniem treści on-line zawiaduje skrypt CGI napisany w Perl-u. W tym przypadku zdecydowałem się na SQLite, silnik o skromnych wymaganiach lecz ogromnych możliwościach. W odróżnieniu od MySQL, który wymaga starannej instalacji i drobiazgowej konfiguracji, SQLite jest gotowy do pracy, jak to mówią, "zaraz po wyjęciu z pudełka". Baza danych jest pojedynczym plikiem, zawierającym wszystkie tabele oraz niezbędne metadane i można taki plik przenosić pomiędzy systemami bez obawy o utratę integralności. Bardzo upraszcza to także tworzenie kopii bezpieczeństwa. Sam silnik jest dostępny w formie niewielkiej biblioteki, którą można włączać do własnych projektów. Istnieje też szereg gotowych narzędzi do pracy z danymi tego typu, bardzo przydatnych do testów i odpluskwiania aplikacji.
Każda poważna dystrybucja Linuxa zawiera bibliotekę SQLite, a w Perl-u dysponujemy standardowym interfejsem DBI, pozwalającym na komunikację z silnikiem. W takich warunkach programowanie bazodanowe jest łatwe i przyjemne.
Rozpoczynając ostatnio przygodę z Androidem, przekonałem się z zadowoleniem, że też korzysta z SQLite w swych rozwiązaniach bazodanowych.  
Z perspektywy programisty korzystanie z MySQL, za sprawą perlowego interfejsu DBI, niewiele się róźni. Znając oba dialekty, bez trudu można pisać programy działające na obu typach baz SQL. Inny będzie tylko sposób podłączenia/zalogowania.
Nieco więcej różnic zobaczymy oczami administratora. W SQLite w ogóle nie istnieje pojęcie użytkownika ani praw dostępu. W MySQL natomiast mamy do czynienia z bardzo rozbudowanym systemem uprawnień. Możemy je przydzielać konkretnym użytkownikom, na wykonanie konkretnych operacji, do całych baz danych, do poszczególnych tabel, a nawet do pojedynczych kolumn w tabeli.
Przez ostatnie lata z powodzeniem konstruowałem oprogramowanie klienckie korzystające z MySQL. Obecnie, podzielając obawy co do dalszych losów MySQL, przejętego przez Oracle, planuję przejście na MariaDB na wszystkich administrowanych przez siebie serwerach.  
Z Microsoft SQL korzystam głównie wtedy, gdy muszę. Zgodnie z tradycją tej firmy, silnik jest wielki, niezgrabny, a składnia języka niewygodna, pełna luk i udziwnień. Zgodność z Sybase sprawia, że można się komunikować z serwerem poprzez interfejs DBI, ale brak klauzuli LIMIT, obecnej w innych dialektach, bardzo utrudnia stronicowanie, przez co zgrabne wyświetlanie wyników mocno się komplikuje.
Niemniej skonstruowałem sprawny interfejs, przy pomocy którego można podglądać i modyfikować zawartość baz danych MSSQL w przeglądarce www. Wciąż jednak lepsze rezultaty daje konwersja danych do MySQL i dalsze przetwarzanie w wygodniejszy sposób.
przykłady
Możesz zobaczyć, jak prosto sięga się do danych w przeglądarce. W tym celu udostępniłem przykładową tabelę, zawierającą dane o klasyfikacji PKWiU. Aby uzyskać dostęp do tych danych, należy podać
Login: demo
Hasło: demo
Oglądałem dziesiątki podobnych interfejsów, ale żaden nie przypadł mi do gustu. Dlatego napisałem własny. Uważam, że podstawową funkcją jest filtrowanie danych, więc tutaj jest ono dostępne bezpośrednio w widoku tabeli. Żadnych dodatkowych formatek, specjalnych trybów czy widoków. Po prostu napisz nad daną kolumną poszukiwane słowo, np. piwo w kolumnie Nazwa i kliknij Pokaż. Błyskawicznie pojawi się w odpowiedzi lista wierszy spełniających to kryterium. Przejdź na drugą stronę, klikając >>. Zaskoczenie, że na liście są śpiwory? Też zawierają przecież to słowo ;-) Można temu zapobiec, pisząc =piwo - wtedy pokażą się tylko te, gdzie poszukiwany tekst stoi na początku.
Więcej wskazówek nt. posługiwania się interfejsem można znaleźć po kliknięciu znaczka obecnego w jego górnej części.
 
opiekun: Janusz Wiśniewski :: rejestracja odwiedzin 1724 gości
desk