Autor: Dawid

Popularne bazy danych

W dzisiejszym wpisie chciałbym przedstawić kilka popularnych baz danych, ich cechy, jakie są plusy, a jakie minusy. Po tym wpisie zyskasz wstępny obraz jakich produktów możesz używać do przechowywania swoich danych. Pamiętaj, że nie są to wszystkie bazy danych dostępne na rynku, a kilka wybranych przeze mnie.

Ok, startujemy 🙂

MySQL

Jest to bardzo popularny silnik bazodanowy, który dostępny jest na praktycznie wszystkie systemy operacyjne tzn., że można go zainstalować zarówno na Windowsie, jak i MacOS, Linuxach. MySQL został wydany w 1995 roku i do tego czasu doczekał się 8 wersji. Poza bardzo dużym atutem w postaci możliwości działania na dosłownie każdym systemie operacyjnym, drugim co do wielkości plusem jest fakt, że można go wykorzystywać za darmo. MySQL posiada również wersję płatną, którą należy zakupić w momencie, jeżeli nasz produkt, który używa MySQL nie jest zgodny z licencją GPL. MySQL jest relacyjną bazą danych. Jest bardzo często używany, więc jest to ciekawa opcja na start, aby z pomocą tego silnika bazodanowego rozpocząć swoją przygodę z bazami danych. Dobrze sprawdzi się w aplikacjach, gdzie struktura danych jest ustalona. Niestety w momencie, jeżeli potrzebujemy, aby nasza baza danych była rozproszona, wtedy warto pomyśleć o innych bazach danych.

Microsoft SQL Server

Jest to produkt Microsoftu, który został opublikowany w 1989 roku. Aktualnie dostępna jest 15 wersja nazywana jako SQL Server 2019. Jest to jeden z wiodących systemów bazodanowych dla rozwiązań komercyjnych. Jest to baza danych płatna (i niestety tanio nie jest), ale posiada on również swoją wersję bezpłatną (express). Do komunikacji z tą bazą danych używa się języka T-SQL. Jest to baza danych strukturalna, w której można też przechowywać dane częściowo strukturalne (np. JSON) (spokojnie do tego dojdziemy w kolejnych wpisach).
Jest to zdecydowanie produkt dla osób z budżetem. Dlaczego więc wspominam o tym silniku bazodanowym? Dlatego, że m.in. na tym silniku będę chciał pokazywać jak wyglądają bazy danych w kolejnych wpisach. W pracy zawodowej na pewno spotkasz się z tym silnikiem bazodanowym wcześniej czy później. O ile w prywatnych projektach osobiście skusiłbym się na inne rozwiązania (darmowe lub tańsze), tak w pracy zawodowej znajomość tej bazy danych jest bardzo ważna, dlatego warto nie odrzucać tej bazy danych.

Oracle Database

Jest to produkt firmy Oracle, którego początki sięgają lat 70 dwudziestego wieku. Jest to najpopularniejszy silnik do zarządzania relacyjnymi bazami danych używany komercyjnie. Aktualną wersją jest wersja 19c. Jest to ogromny kombajn, który używany jest przez setki tysięcy firm,więc na pewno w swojej karierze zawodowej napotkasz ten produkt. Oracle posiada wiele wersji swojego systemu do zarządzania bazami danych, m.in. Oracle Enterprise Edition, Oracle Standard Edition, Oracle Express Edition, Oracle Lite.

PostreSQL

Jest to aktualnie jedna z trzech najbardziej popularnych baz danych typu open source obok MySQL i SQLite. Używana w ogromnej liczbie aplikacji, systemów i stron www. Podobnie jak MySQL może być instalowana na wielu systemach operacyjnych. Jest to baza danych darmowa, którą też chciałbym opisywać w przyszłości na blogu w przykładach związanych ze ścieżką, na której początku właśnie jesteś.

MongoDB

Jest to przykład nierelacyjnej bazy danych. MongoDB w świecie baz nierelacyjnych jest bardzo popularny. Posiada kilka licencji zarówno płatnych, jak i bezpłatnych. Jeżeli dane są dokumentami lub są np. w postaci JSON, XML, to zdecydowanie warto zwrócić się ku tej bazie danych. Jeżeli kiedyś staniesz przed wyborem z jakiej bazy NoSQL skorzystać, to już wiesz od jakiej bazy należy zacząć swoje rozważania. Jeżeli jednak Twoja baza jest bazą strukturalną to MongoDB jest złym adresem :p

SQLite

Jest to baza danych typu openSource (z otwartym kodem źródłowym). Doskonale sprawdza się w przypadku np. aplikacji mobilnych lub w innych przypadkach, gdzie w naszą aplikację musi być wbudowana baza danych i nie ma tam możliwości komunikacji z serwerem bazodanowym. Obsługiwana przez wiele języków programowania za pomocą wygodnego API. 

Elasticsearch

Jest to narzędzie stworzone do pełnotekstowego wyszukiwania. Używa się go najczęściej do zbierania logów (informacji o błędach i zdarzeniach w naszej aplikacji) w naszej aplikacji. Dzięki Elasticsearch w łatwy sposób można wyszukiwać tekstowo zawartość naszych danych. Każda aplikacja powinna odkładać jakieś informacje o błędach, które się zdarzają, a z wykorzystaniem Elasticsearch analiza ich będzie przyjemnością. Elasticsearch również umieściłem w tym wpisie, ponieważ jak wspominałem w poprzednim wpisie (tutaj) bazy danych są zbiorem usystematyzowanych danych zapisanych zgodnie z określonymi regułami.

Apache Cassandra

Ostatni system bazodanowy, który chciałem opisać w dzisiejszym poście. Cassandra została stworzona przez Facebooka i została zaprojektowana dla obsługi dużej ilości rozproszonych danych na wielu serwerach. Świetnie sprawdzi się w przypadku hurtowni danych. Do minusów można jednak zaliczyć brak transakcyjności. Ważną informacją jest też fakt, że jest to rozwiązanie typu open source.


Uff … Nie są to wszystkie systemy bazodanowe, jakie istnieją na rynku, a zaledwie kilka wybranych przeze mnie, które uważam, że warto znać przynajmniej ze słyszenia i wiedzieć kilka podstawowych informacji.
A jakie Ty bazy danych wymieniłbyś w zestawieniu najpopularniejszych baz danych? Może znasz jakieś, które są jeszcze warte dodania do listy ? 🙂

Relacyjna baza danych

W poprzednim wpisie (tutaj) mówiłem o rodzajach baz danych. Wspominałem tam o relacyjnych bazach danych i dzisiaj chciałbym poszerzyć ten temat i od relacyjnego rodzaju baz zacząć prowadzić Cię po ścieżce baz danych.

Ok, a więc zaczynajmy 🙂
b
W relacyjnych bazach danych zawartość jest zorganizowana jako zbiór tabel, które mogą być ze sobą powiązane, zawierających kolumny i wiersze.
Do komunikacji z relacyjną bazą danych używa się języka zwanego SQL (Structured Query Language).
Przykładowymi bazami danych mogą być m.in. PostgreSQL, MySQL, Microsoft SQL Server, Oracle Database. Dokładniej opiszę je w jednym z kolejnych wpisów.

Mamy już kilka podstawowych informacji, ale czas na przykład, przy pomocy którego pokażę o co chodzi z relacyjnymi bazami danych.

Za przykład weźmy sklep internetowy, w którym mamy produkty, kupujących, koszyk z zakupami, zamówienia.

Między tym wszystkim występują relacje.

  • W sklepie mamy produkty
  • Produkty mogą być w koszyku z zakupami
  • Kupujący może mieć jeden koszyk z zakupami
  • Kupujący może mieć wiele zamówień

Ok, zacznijmy w takim razie krok po kroku zamieniać sklep internetowy w bazę danych.

Encja

Zacznijmy od pojęcia encji. Encja to rodzaj “obiektu” przechowywanego w bazie danych np.: towar, koszyk z zakupami, kupujący, zamówienie. Jest to jedno z pojęć, z którym spotkasz się projektując swoje bazy danych w przyszłości.

Atrybut

To kolejne słowo klucz w bazach danych. Oznacza “właściwość” w encji. Każda encja posiada jakieś atrybuty np. produkt posiada m.in. nazwę, cenę, ilość sztuk dostępnych w sklepie, opis.
Koszyk posiada m.in. informacje o produktach oraz powiązanie do klienta. Kupujący posiada imię, nazwisko, nr karty kredytowej. Atrybuty posiadają swoje typy. Atrybut “imię” jest ciągiem znaków, a atrybut “cena” jest liczbą zmiennoprzecinkową.
Istnieją różne typy danych w różnych bazach dlatego będę je dokładnie opisywał potem w zależności od bazy danych.

Krotka

Krotka jest zbiorem atrybutów. Jest to instancja, czyli konkretne wartości np. dla produktu, który posiadał atrybuty: nazwę, cenę, ilość sztuk dostępnych w sklepie, opis. Jego krotką jest: koszulka, 39zł, 20 sztuk, t-shirt w kolorze niebieskim.
Inną krotką np. dla kupującego może być: imię, nazwisko, nr karty kredytowej – Adam, Nowak, nr 99 0000 0000 0000 1234).

Relacja

W relacyjnych bazach danych to nasze słowo klucz i tutaj może być to trochę mylące w stosunku do języka polskiego, ponieważ relacja to zbiór krotek nazywanych tabelą, np.:

Nazwacenailość sztukopis
Koszulka3920t-shirt w kolorze niebieskim
Spodnie8933kolor niebieski jeans

Taki zbiór krotek najczęściej przedstawiany jest w formie tabeli tak jak powyżej, dlatego nazywany jest powszechnie tabelą.

Relacja pomiędzy tabelami np. pomiędzy tabelą produktów a koszykiem zakupów to “związek”.

Pamiętaj, że wszystkie te pojęcia pochodzą z języka angielskiego dlatego tutaj wkradł się mały chochlik :p ach ten nasz język polski sprawia trochę psikusów.

Klucz główny

Zbiór atrybutów w naszej tabeli (zbiorze krotek) tworzy klucz główny, czyli unikalny identyfikator, dzięki któremu będzie można wyłapać konkretną krotkę, konkretny wiersz w naszej tabeli. Po angielsku klucz główny to primary key i najczęściej jest to jakiś id w postaci liczby np. dla produktów.

Nazwacenailość sztukopis
Koszulka3920t-shirt w kolorze niebieskim
Spodnie8933kolor niebieski jeans

Nic nie stoi na przeszkodzie, aby kluczem głównym była np. nazwa (ale wtedy musi ona być unikalna dla wszystkich wierszy w naszej tabeli. Istnieje też możliwość, aby klucz główny składał się z 2 wierszy (atrybutów) np. z nazwy i ceny. Najczęściej jednak używa się osobnego atrybutu o nazwie id (identyfikator).
Ważna informacja to taka, że bazy danych optymalizują wyciąganie zawartości bazy danych po kluczach głównych to znaczy, że wyciągnięcie produktu po id 1 (kluczu głównym) będzie szybsze niż wyciągnięcie produktu po np. cenie (która nie jest kluczem głównym). Bazy danych są szybkie i żeby zobaczyć różnice nasza baza musi mieć naprawdę ogromną ilość krotek (wierszy), ale warto o tym pamiętać, ponieważ gdy nasz sklep będzie wielkości Allegro albo Amazona, wtedy optymalizacja bazy danych ma duże znaczenie.

Klucz obcy

Tabele mogą być ze sobą powiązane. Aby dokonać powiązania robi się to za pomocą kluczy obcych (forign key). W naszym przypadku mamy Produkty i koszyk z zakupami.

Nazwacenailość sztukopis
Koszulka3920t-shirt w kolorze niebieskim
Spodnie8933kolor niebieski jeans

Koszyk z zakupami

IdId produktuilość sztukId klientaCzy Produkt opłacony
1121Nie
2211Nie

Jak widać w koszyku są 2 produkty o Id Produktu 1 co oznacza koszulki zamówione przez klienta o Id 1 oraz ten sam klient zamówił również 1 sztukę produktu o Id 2 co z tabeli Produktów wskazuje nam na spodnie w cenie 89 zł.

W przypadku kluczy obcych jest to po prostu klucz główny z tabeli, która jest powiązana.

Powiązania

Na podstawie informacji o kluczach obcych widać, że między tabelami mogą występować powiązania. W relacyjnych bazach danych mamy do czynienia z 3 rodzajami powiązań:

Powiązanie Jeden do jeden

To powiązanie, w którym jedna krotka odpowiada jednej krotce z innej tabeli. Przykładem może być sytuacja, w której klient może tylko raz skorzystać z unikatowego kodu rabatowego, wtedy konkretny kod rabatowy jest powiązany z konkretnym klientem.

Powiązanie Jeden do wielu

Tutaj mamy sytuację, w której jak nazwa wskazuje mamy powiązanie jeden do wielu. Przykładem może być powiązanie produkt producent, w którym producent może mieć wiele produktów, ale produkt może należeć do jednego producenta.

Powiązanie Wiele do wielu

To ostatni typ powiązania. W tym przypadku mamy do czynienia np. w powiązaniu koszyka z zakupami i produktami. Jeden produkt może być w wielu koszykach oraz jeden koszyk może mieć wiele produktów w sobie.
W tym przypadku mamy do czynienia z tabelą pośrednią, ponieważ nie da się inaczej przedstawić relacji wiele do wielu. Potrzebna jest nam jakaś tabela, która będzie to wszystko łączyła.


Ok, to na tyle, jeżeli chodzi o wstępne przedstawienie tematu relacyjnych baz danych. Wiem, że wpis był naprawdę długi, ale poruszyłem tutaj wszystkie podstawowe zagadnienia, z jakimi spotkasz się w ramach kroczenia ścieżką baz danych. W kolejnych wpisach będę przedstawiał kolejne zagadnienia relacyjnych baz danych oraz szczegółowo omawiał opisane w tym wpisie zagadnienia.

Visual Studio Code Extensions

W tym wpisie chciałem przedstawić dodatki do Visual Studio Code, których używam. Być może któryś z nich pomoże Ci w korzystaniu z VS Code.

Jeżeli nie wiesz, czym jest Visual Studio Code to kilka słów o nim możesz znaleźć w tym wpisie (tutaj). Extensions w Visual Studio pozwalają na bardziej efektywną pracę z narzędziem np.. podpowiadanie kodu, kolorowanie go, wstawianie kawałów kodu automatycznie, co przyśpiesza pisanie.

Ten wpis jest spisem dodatków, których używam i zawiera dodatki związane z wieloma językami jakich używam. Przejrzyj listę może coś Ci się spodoba. Czasem wracaj do tego wpisu. Wraz z poszerzaniem się Twojej wiedzy z zakresu IT kolejne dodatki z tej listy zaczną być dla Ciebie bardziej interesujące 🙂

Zaczynajmy !!!

Read More

Co to jest baza danych?

Jest to wpis, który otwiera nową ścieżkę w świat programowania. Będę w niej pokazywał czym są bazy danych, do czego służą, jakie są rodzaje oraz będę pokazywał jak pracować z bazami danych i jak je wykorzystać w programach, jakie będą przez Ciebie tworzone 🙂

Ok, a więc zaczynajmy wycieczkę po szlaku baz danych.

Najpierw zacznijmy od wytłumaczenia czym są bazy danych.

Read More

Klasy statyczne w C#

Klasa statyczna to taka klasa, której nie możemy utworzyć instancji.

 W tym wpisie (tutaj) mówiłem czym jest klasa, jeżeli nie wiesz czym jest, to najpierw zapoznaj się z wpisem.

Klasa może posiadać swoją instancję w postaci konkretnego obiektu, aby utworzyć obiekt musimy użyć słowa kluczowego “new” np.:

Ołówek ołówekŻółty = new Ołówek();

Ołówek to klasa, która opisuje czym jest ołówek, że posiada jakąś długość, czy jest naostrzony, jaki ma kolor.

Obiekt to konkretny ołówek np. ten, który leży na twoim biurku lub ten, który leży w sklepie.

Klasa statyczna to taka, gdzie nie można utworzyć konkretnego obiektu i jest związana z typem klasy, a nie jego konkretną instancją.

Pewnie zadajesz sobie teraz pytanie, do czego został stworzony tak dziwny twór, jak klasy statyczne.

Pokażę Ci przykład, który rozwieje to pytanie 🙂

Read More

Klasy i metody generyczne

W tym wpisie poruszę 2 tematy: czym są metody generyczne oraz czym są klasy generyczne.

Zanim jednak wyjaśnimy sobie te 2 zagadnienia, trzeba powiedzieć czym jest określenie generyczne.

Generyczny, czyli uogólniony. Programowanie generyczne (programowanie uogólnione) jest jednym z paradygmatów programowania. Mówiąc prosto, jest to pisanie kodu uogólnionego, w którym nie do końca wiemy jaki typ danych będzie dostępny, ale wiemy, że niezależnie od typu danych zachowanie będzie takie samo.

Jak zawsze przykład rozjaśni o co chodzi 🙂

Read More

Czym jest enum w C# i do czego można go wykorzystać?

Dzisiaj chciałem poruszyć temat enum w C# czym jest i dlaczego warto go stosować.

Zacznijmy od odpowiedzi na pytanie nr 1: Czym jest słowo kluczowe enum?

Enum to typ wyliczeniowy zdefiniowanych przez zestaw nazwanych stałych bazowego typu całkowitoliczbowego.

Od razu przykład, który wyjaśni co i jak:

enum PoraRoku{
  Wiosna,
  Lato,
  Jesien,
  Zima
}

Każdej z podanych wartości odpowiada kolejna liczba całkowita począwszy od 0 (chyba, że zakodujemy to inaczej :p ), czyli tak naprawdę nasz enum wygląda tak:

Read More

Czym są metody wirtualne w C#?

Metody Wirtualne to po prostu metody, które można nadpisać w klasie dziedziczącej.

Metoda wirtualna jest oznaczana słowem kluczowym virtual.

Czas na szybki przykład pokazujący co i jak 🙂

public class Book
{
    public int GetPageCount()
    {
        return 300;
    }
    public virtual string GetPrice()
    {
        return "30 złoty";
    }
}

public class PromotionBook : Book
{

    public override string GetPrice()
    {
        return "15 złoty";
    }
}
Read More

Czym jest polimorfizm?

Dzisiaj poruszę temat polimorfizmu, czym jest i do czego jest używany.

Najprościej mówiąc polimorfizm jest to wielopostaciowość, tzn. że pod jedną metodą może się kryć tak naprawdę wiele metod.

Polimorfizm można podzielić na 2 rodzaje:

  • Polimorfizm statyczny
  • Polimorfizm dynamiczny

Polimorfizm Statyczny

Polimorfizm statyczny można podzielić na 2 rodzaje:

  • Przeciążanie metod

Przykład:

Read More

Czym się różni klasa abstrakcyjna od interfejsu ?

Dzisiaj szybkie podsumowanie tematu klas abstrakcyjnych i interfejsu.

Linki do poprzednich wpisów 🙂

Interface

Abstrakcja

Nie można utworzyć instancji klasy abstrakcyjnej ani interfejsu.

Klasa może dziedziczyć tylko po jednej klasie abstrakcyjnej, ale może dziedziczyć po wielu interfejsach.

Klasa abstrakcyjna może mieć w sobie implementację, a interface nie (do wersji C# 8.0 opublikowanej w sierpniu 2019).

Od 2019 klasa abstrakcyjna dalej może mieć implementację, a interface może mieć prostą implementację metod.

Prostą to znaczy, że nie może korzystać z np. z wstrzykiwanych przez konstruktor serwisów, repozytoriów itd. (jeżeli nie wiesz o co chodzi spokojnie dowiesz się w kolejnych wpisach).

Interface może dziedziczyć tylko po innych interfejsach. Klasa abstrakcyjna może dziedziczyć po klasach abstrakcyjnych, interfejsach a nawet po zwykłych klasach.

Kiedy używać klasy abstrakcyjnej a kiedy interfejsu ?

Zacznij od interfejsu i używaj interfejsu chyba, że chcesz lub potrzebujesz, aby metoda posiadała implementację, wtedy użyj klasy abstrakcyjnej, która dziedziczy po interfejsie 🙂