zamknij
Baza Danych tworzona z “Miłością” – czyli co nieco o LoveField

Baza Danych tworzona z “Miłością” – czyli co nieco o LoveField

Dominika ZaleskaDominika Zaleska

lovefield logo wyrozniajacy

O czym mowa? Myśląc o nazwie LoveField, przychodzi nam zapewne na myśl jakaś komedia romantyczna, w skrajnej formie horror autorstwa Mathieu Ratthe. 
Trudno wyobrazić sobie coś związanego z programowaniem i IT. A jednak. LoveField, którym zajmiemy się w tym artykule jest bowiem jednym z ostatnio wydanych przez Google narzędzi dla developerów. Jest to silnik zapytań do relacyjnej bazy danych dla aplikacji internetowych napisany w JavaScript. Jego składnia, choć napisana w JavaScript, jest bardzo podobna do znanego powszechnie SQL (Structured Query Language), ułatwiając naukę LoveField developerom zaznajomionym z SQL. Właśnie tą składnią i porównaniem jej do oryginalnego SQL zajmiemy się w dzisiejszym artykule.

 

Logo LoveField: źródło Google GitHub

Bezpośrednim najbardziej zaawansowanym poprzednikiem LoveField był WebSQL, wspierany wcześniej przez W3C (World Wide Web Consortium). Wsparcie dla WebSQL zostało jednak przerwane ze względu na używanie w nim backendu SQLite, przez co developerzy aplikacji internetowych woleli używać czystego SQLite zamiast WebSQL. Dodatkowo WebSQL nie dostosowuje się do różnych przeglądarek. Mniej zaawansowaną alternatywą dla WebSQL jest Indexed DB. Obydwa są wykorzystywane w LoveField jako magazyny danych: Indexed DB jako baza do trwałego zapisywania danych (zachowuje dane pomiędzy sesjami), Web SQL jako zastępnik Indexed DB dla Safari i iOS nie wspierających LoveField z Indexed DB. Oprócz Indexed DB i Web SQL LoveField obsługuje również takie magazyny danych jak: działające dla danej sesji Memory, cloudowe FireBase czy pamięć lokalna (zostanie wypuszczona jeśli pojawi się zapotrzebowanie na nią). Zaletą LoveField jest to, że jest kompatybilne z różnymi przeglądarkami (Chrome, Firefox, Internet Explorer i Safari), działa na niskich procesorach i urządzeniach o małej pamięci (Chromebook), łączy się z Closure, jQuery, Polymerami i AngularJS i potencjalnie także z innymi bibliotekami.

Naszą zabawę z LoveField zaczynamy od instalacji pobierając LoveField bezpośrednio z GitHuba lub przez konsolę za pomocą npm i bower – narzędzi ułatwiających zarządzanie plikami aplikacji za pomocą komend:

Instalacja LoveField: źródło Google GitHub
Instalacja LoveField: źródło Google GitHub
Tworzenie szkieletu Bazy Danych: źródło Google GitHub, W3CSchools
Tworzenie szkieletu Bazy Danych: źródło Google GitHub, W3CSchools

Poniższe kroki wykonywane będą w pliku HTML z podlinkowanym do niego plikiem lovefield.min.js w elemencie <script> </script> umieszczonym w <body> </body>. Drugą opcją jest wyeksportowanie części JavaScriptowej do oddzielnego pliku.
Zaczynamy od stworzenia schematu bazy danych. W LoveField schemat ten budujemy funkcją JavaScriptową lf.schema.create() o parametrach: nazwa bazy danych i wersja. lf w nazwie funkcji jest zarezerwowane dla LoveField API. Nową bazę danych o nazwie “todo” przypisujemy do zmiennej schemaBuilder. Kod ten zastępuje popularne w SQL CREATE DATABASE – tworzące nową bazę danych.

creating table
Tworzenie Tabeli: źródło Google GitHub, W3CSchools

Kolejnym krokiem tworzenia bazy danych będzie stworzenie tabel. Wykorzystamy do tego zmienną schemaBuilder stworzoną w poprzednim kroku. Tabelę tworzymy dodając do zmiennej schemaBuilder (stworzonej bazy) metodę createTable tworzącą tabelę o nazwie “Item”. W SQL jej odpowiednikiem będzie wezwanie CREATE TABLE.

Dodawanie kolumn: źródło Google GitHub,
Dodawanie kolumn: źródło Google GitHub, W3CSchools

Czyste tabele bez kolumn wydają się bezużyteczne. Te drugie tworzymy za pomocą metody addColumn razem z nazwą kolumny i typem danych, jakie się w niej znajdą. W tym przypadku są to dane o takich rodzajach jak: INTEGER (liczba całkowita), STRING (tekst), DATE_TIME (data/ czas) oraz BOOLEAN (typ logiczny – tak lub nie). Kolumna “id” została też oznaczona jako klucz główny bazy, a z danych kolumny deadline poukładanych malejąco utworzono indeksy bazy. Podobny zabieg w SQL tworzy się za pomocą komend o składni nazwa kolumny AS typ danych w nowoutworzonej tabeli. Klucz podstawowy bazy został nadany kolumnie “id” za pomocą polecenia: PRIMARY KEY ON (‘id’).

Inicjalizacja LoveField Api: źródło Google GitHub
Inicjalizacja LoveField Api: źródło Google GitHub

Jednak do tej pory nasza baza danych była tylko w fazie budowy. Bezpośrednie wywołanie pracy LoveField Api powoduje komenda powyżej. Tworzy ona nową bazę, jeśli nie ma jej jeszcze w pamięci stałej, otwiera istniejącą o tej samej wersji lub porównuje z innymi wersjami, wybierając najnowszą, jeśli następuje zmiana wersji bazy.

Wypełnianie danymi: źródło Google GitHub, W3CSchools
Wypełnianie danymi: źródło Google GitHub, W3CSchools

Mamy już bazę danych i tabele. Przydałoby się zatem wypełnić je danymi. W LoveField robimy w tym przypadku za pomocą funkcji wywoływanej zaraz po connect(). Najpierw tworzymy rzędy bazy danych pomocą metody createRow. Po stworzeniu rzędu, wklejamy go do stworzonej bazy za pomocą instrukcji db.insertOrReplace (lub zastępujemy istniejące), która jest też wartością zwrotną wspomnianej wcześniej funkcji. W SQL podobną funkcję pełni polecenie INSERT, wklejające do bazy nowy rząd danych podanych jako VALUES.

Select: źródło Google GitHub, W3CSchools

 

Kiedy nasza baza jest już stworzona i wypełniona możemy się do niej dostać i wydobyć interesujące nas rekordy (rzędy), spełniające dane kryteria. Funkcja ta przyda się w przyszłości do zmiany interface’u aplikacji w zależności od danych. Wykonujemy ją dzięki poleceniu db.select zawierającemu jako parametry – kolumny, które chcemy pokazać. from wskazuje na tabelę, z której pobieramy dane, where na warunki, którym podlegają wybierane rekordy, w tym wypadku “id” ma być równe 2: where(item.id.eq(‘2’)). W SQL odpowiednikiem takiej instrukcji jest popularne SELECT pobierające “id” i “description” z rekordów tabeli “Item” tam, gdzie id = 2.

Delete: źródło Google GitHub, W3CSchools
Delete: źródło Google GitHub, W3CSchools

Kolejną własnością LoveField jest możliwość usuwania zbędnych elementów bazy. W tym przypadku rekordów, które mają “id” równe 1, a nie są jeszcze wykonane (“done” = ‘false’). Jest to też iloczyn logiczny warunków zapisywany instrukcją: lf.op.and. Odpowiednikiem tego polecenia w SQL jest instrukcja DELETE i operator logiczny AND pokazane po lewej.

Update: źródło Google GitHub, W3CSchools
Update: źródło Google GitHub, W3CSchools

Nie zawsze jednak potrzebujemy usunąć od razu jakiś rząd bazy. Czasami wystarczy go zaktualizować. Ostatnią z omówionych szczegółowo w tym artykule metod będzie db.update.
Tym razem przechodzimy do innej tabeli o nazwie “order”. Ustawia ona wartość 51 dla wielkości zamówienia oraz euro jako walutę dla tych rekordów, gdzie walutą jest marka niemiecka (DEM) i wielkość zamówienia równa się 100. W SQL odpowiednikiem takiego polecenia jest UPDATE ustawiający wartości kolumn tabeli “order” w zależności od warunków z WHERE, filtrującego rekordy tabeli.

To tylko niektóre funkcje, jakie oferuje LoveField. Oprócz wymienionych wyżej LoveField wspiera również: klucze obce, wartości unikalne, niezerowe, import i eksport danych, joiny (łączenia danych z różnych tabel), porządkowanie rekordów (orderBy), grupowanie rekordów, agregację rekordów, aliasy kolumn i tabel, zapytania parametryczne i obserwatory, transakcje, i statyczne tworzenie bazy za pomocą pliku YAML i SPAC (Schema Parser And Code-generator) w przeciwieństwie do dynamicznego – prezentowanego powyżej. Wszystko to zostało dokładnie opisane w dokumentacji LoveField na platformie GitHub. Osobiście LoveField zwrócił moją uwagę w pozytywny sposób, przede wszystkim dzięki swojej JavaScriptowej naturze, ułatwiającej pisanie aplikacji internetowych bez konieczności dodatkowej instalacji tradycyjnych środowisk SQL-owych, a jednocześnie składni przypominającej tradycyjny SQL. Myślę, że warto przyjrzeć mu się nieco bliżej – tym bardziej, że autorzy rozwiązania stworzyli specjalny CodeLab, w czasie którego tworzymy krok po kroku internetowy analizator akcji giełdowych. Zatem – miłego eksplorowania.

Źródło: Google LoveField, https://google.github.io/lovefield/,
W3CSchools – http://www.w3schools.com/sql/default.asp

jeff

Jeff Burton w Lublinie, czyli co jeden z założycieli Electronic Arts (EA) ma do powiedzenia

ux-789160_1920

Szanuję Nadellę za to, że nie rezygnuje z Windows 10 Mobile

Przeczytaj poprzedni wpis:
jeff
Jeff Burton w Lublinie, czyli co jeden z założycieli Electronic Arts (EA) ma do powiedzenia

Trudno jest pisać o legendach. Trudno opiniować ich zachowanie, wrażenia z osobistego poznania. Trudno oceniać. Ci ludzie już mają status...

Zamknij