Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:prolog:prolog_lab:prolog_lab_rdbms [2009/05/11 20:16]
wojnicki
pl:prolog:prolog_lab:prolog_lab_rdbms [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== LAB: Integracja z RDBMS ====== ====== LAB: Integracja z RDBMS ======
 +
  
 Celem laboratorium jest pokazanie możlwości integracji maszyny wnioskującej SWI Prolog z systemami zarządzania relacyjnymi bazami danych (RDBMS). Celem laboratorium jest pokazanie możlwości integracji maszyny wnioskującej SWI Prolog z systemami zarządzania relacyjnymi bazami danych (RDBMS).
Linia 29: Linia 30:
 </​code>​ </​code>​
  
-Wartości pól ''​Username''​ oraz ''​Password''​ będą podane przez prowadzącego na zajęciach.+**Uwaga**:  
 +  - Wartości pól ''​Username''​ oraz ''​Password''​ będą podane przez prowadzącego na zajęciach
 +  - Prawa dostępu do pliku ''​.odbc.ini''​ powinny być ustawione na 600.
  
-Powyższe działąnia konfigurują ​połączenie z źródłem danych ODBC o nazwie ''​prolog''​. +Powyższe działania konfigurują źródłdanych ODBC o nazwie ''​prolog'' ​(''​[prolog]''​)
-Źródło to łączy się z systemem zarządzania relacyjnymi bazami danych PostgreSQL działającym na serwerze ''​borg.ia.agh.edu.pl'',​ a konkretnie z bazą danych ''​prolog''​.+Źródło to jest skojarzone ​z systemem zarządzania relacyjnymi bazami danych PostgreSQL działającym na serwerze ''​borg.ia.agh.edu.pl'',​ a konkretnie z bazą danych ​o nazwie ​''​prolog'' ​(''​Database''​).
  
 +**Ćwiczenie**
 +
 +Sprawdź, czy źródło danych jest poprawnie skonfigurowane. W tym celu uruchom narzędzie ''​isql''​ umożlwiające wykonywanie zapytań w języku SQL na źródle ODBC:
 +
 +<​code>​
 +isql prolog
 +</​code>​
 +
 +Jeżeli połączenie powiodło się zostanie wyświetlony stosowny komunikat:
 +<​code>​
 +~$ isql prolog
 ++---------------------------------------+
 +| Connected! ​                           |
 +|                                       |
 +| sql-statement ​                        |
 +| help [tablename] ​                     |
 +| quit                                  |
 +|                                       |
 ++---------------------------------------+
 +SQL>
 +</​code>​
 +
 +Następnie wykonaj proste zapytanie np. ''​SELECT nazwa FROM kompozycje;''​. Rezultat powinien być zbliżony do tego poniżej:
 +
 +<​code>​
 +SQL> SELECT nazwa FROM kompozycje;
 ++-----------------------------------------+
 +| nazwa                                   |
 ++-----------------------------------------+
 +| Bukiet 1                                |
 +| Bukiet 2                                |
 +| Bukiet 3                                |
 +| Kosz 1                                  |
 +| Kosz rozyczek ​                          |
 +| Kosz mix                                |
 +| Kompozycja suszona ​                     |
 +| Koszyk gozdzikowy ​                      |
 +| Hiacynty w koszyku ​                     |
 +| Biala azalia ​                           |
 +| Rozowa azalia ​                          |
 +| Orchidea rozowa ​                        |
 +| Kosz z azalia ​                          |
 +| Wiazanka czerwona ​                      |
 +| Bukiecik serc                           |
 +| Ikebana z rozami ​                       |
 +| Kwitnacy kosz                           |
 +| Sloneczniki z lilia                     |
 +| Strelicje ​                              |
 +| Anturium latem                          |
 ++-----------------------------------------+
 +SQLRowCount returns 20
 +20 rows fetched
 +SQL>
 +</​code>​
  
 ===== - ODBC w SWI-Prolog ===== ===== - ODBC w SWI-Prolog =====
 +
 +SWI Prolog umożliwia wykonywanie zapytań na źródłach ODBC.
 +Rezultaty zapytania (pojedynczy wiersz) uzgodniane są ze wskazanymi szukanymi.
 +Wartości kolejnych kolejnych wierszy dostępne są poprzez mechanizm nawrotów.
 +
 +Przed wykonaniem zapytania należy nawiązać połączenie ze skonfigurowanym źródłem ODBC.
  
 [[http://​www.swi-prolog.org/​pldoc/​package/​odbc.html|Dokumentacja]] dotycząca predykatów obsługujących połączenia ODBC z bazami danych. [[http://​www.swi-prolog.org/​pldoc/​package/​odbc.html|Dokumentacja]] dotycząca predykatów obsługujących połączenia ODBC z bazami danych.
Linia 41: Linia 104:
 ===== - Połączenia ===== ===== - Połączenia =====
  
-Do nawiązaywania połączenia ​źródłem danych ODBC służy predykat ''​odbc_connect/​3''​. +Do nawiązaywania połączenia ​ze źródłem danych ODBC służy predykat ''​odbc_connect/​3''​. 
-Pierwszym argumentem jest nazwa źródła danych (w poniższym przykładzie ''​prolog''​),​ drugim jest identyfikator połączenia,​ trzecim opcje, np.+Pierwszym argumentem jest nazwa źródła danych ​ODBC (w poniższym przykładzie ''​prolog''​),​ drugim jest identyfikator połączenia,​ trzecim opcje połączenia, np.
  
 <code prolog> <code prolog>
-?- odbc_connect('​prolog',​ Polaczenie,+odbc_connect('​prolog',​ Polaczenie,
              ​[open(once)              ​[open(once)
            ]).            ]).
 </​code>​ </​code>​
  
-Przed zakończeniem korzystania z połączenia ​źródłem danych należy wywołać predykat +Przed zakończeniem korzystania z połączenia ​ze źródłem danych należy wywołać predykat 
-''​odbc_disconnect/​1'',​ którego argumentem musi być identyfikator połączenia:​+''​odbc_disconnect/​1'',​ którego argumentem musi być identyfikator połączenia ​(zakładając,​ że szukana ''​Polaczenie''​ jest uzgodniona z wartością będącą identyfikatorem połączenia utworzonym za pomocą ''​odbc_connect/​3''​):
  
 <code prolog> <code prolog>
-?- odbc_disconnect(Polaczenie).+odbc_disconnect(Polaczenie).
 </​code>​ </​code>​
  
-Zamiast identyfikatora połączenia można użyć ​synaonimu ​połączenia,​ korzystając z opcji ''​alias'':​+Zamiast identyfikatora połączenia można użyć ​synonimu ​połączenia,​ korzystając z opcji ''​alias'':​
  
 <code prolog> <code prolog>
Linia 71: Linia 134:
 ?- odbc_disconnect(prolog). ?- odbc_disconnect(prolog).
 </​code>​ </​code>​
- 
 ===== - Schemat Bazy Danych ===== ===== - Schemat Bazy Danych =====
  
Linia 132: Linia 194:
 </​code>​ </​code>​
  
 +Kompletny {{:​pl:​prolog:​prolog_lab:​baza.sql.txt|skrypt}} z schematem i danymi.
  
 ===== - Wykonywanie zapytań ===== ===== - Wykonywanie zapytań =====
  
 Zapytania można realizować korzystając z predykatu ''​odbc_query/​4''​ (albo ''​odbc_query/​3'',​ patrz [[http://​www.swi-prolog.org/​pldoc/​doc_for?​object=section(3%2c '​2.2'​%2c swi('​%2fdoc%2fpackages%2fodbc.html'​))|dokumentacja]]). Zapytania można realizować korzystając z predykatu ''​odbc_query/​4''​ (albo ''​odbc_query/​3'',​ patrz [[http://​www.swi-prolog.org/​pldoc/​doc_for?​object=section(3%2c '​2.2'​%2c swi('​%2fdoc%2fpackages%2fodbc.html'​))|dokumentacja]]).
-Pierwszym argumentem jest identyfikator połączenia,​ drugim zapytanie w języku SQL, trzecim rezultat zapytania w postaci termu ''​row/​n''​ (argumenty będą uzgodnione z wartościami w kolejnych kolumnach zwaracanych przez zapytanie), czwartym lista dodatkowych opcji.+Pierwszym argumentem jest identyfikator połączenia,​ drugim zapytanie w języku SQL, trzecim rezultat zapytania w postaci termu ''​row/​n''​ (argumenty ​predykatu ''​row/​n'' ​będą uzgodnione z wartościami w kolejnych kolumnach zwaracanych przez zapytanie), czwartym lista dodatkowych opcji.
  
 Przykładowe zapytanie zwracające jako wartości szukanych ''​Nazwa'',​ ''​Email''​ wartości kolumn ''​nazwa''​ i ''​email''​ tabeli ''​klienci''​ będzi wyglądało następująco:​ Przykładowe zapytanie zwracające jako wartości szukanych ''​Nazwa'',​ ''​Email''​ wartości kolumn ''​nazwa''​ i ''​email''​ tabeli ''​klienci''​ będzi wyglądało następująco:​
Linia 145: Linia 208:
  
 Ostatni argument ''​odbc_query/​4''​ umożliwia przekazanie dodatkowych opcji, m.in. konwersje typów pomiędzy SQL a Prologiem (patrz [[http://​www.swi-prolog.org/​pldoc/​doc_for?​object=section(3%2c '​2.2'​%2c swi('​%2fdoc%2fpackages%2fodbc.html'​))|dokumentacja]]). Ostatni argument ''​odbc_query/​4''​ umożliwia przekazanie dodatkowych opcji, m.in. konwersje typów pomiędzy SQL a Prologiem (patrz [[http://​www.swi-prolog.org/​pldoc/​doc_for?​object=section(3%2c '​2.2'​%2c swi('​%2fdoc%2fpackages%2fodbc.html'​))|dokumentacja]]).
 +
 +**Ćwiczenie**
 +
 +  - Otwórz połączenie do bazy danych korzystając ze źródła danych ''​prolog''​.
 +  - Wykonaj następujące zapytanie SQL: ''​SELECT SUM(cena), miasto FROM zamowienia JOIN odbiorcy USING (idodbiorcy) GROUP BY miasto;'',​ przeglądnij wyniki.
 +  - Zamknij połączenie.
  
 ===== - Proste zapytania ===== ===== - Proste zapytania =====
Linia 161: Linia 230:
 Częstą rozterką kupojącego jest: mam określoną sumę pieniędzy, ale co moge za to kupić np.: Częstą rozterką kupojącego jest: mam określoną sumę pieniędzy, ale co moge za to kupić np.:
   * Jakie i ile kompozycji można kupić za 200 zł?   * Jakie i ile kompozycji można kupić za 200 zł?
 +Takie zapytanie jest trudne lub wręcz niemożliwe do zaimplementowania za pomocą SQL.
  
 **Ćwiczenie** **Ćwiczenie**
Linia 172: Linia 242:
  
 ===== - Samodzielny program ===== ===== - Samodzielny program =====
 +
 +Wykorzystaj kod z poprzedniego ćwiczenia.
  
 **Ćwiczenie** **Ćwiczenie**
Linia 177: Linia 249:
 Zmodyfikuj kod programu z poprzedniego ćwiczenia, tak aby stanowił samodzielną aplikację. Zmodyfikuj kod programu z poprzedniego ćwiczenia, tak aby stanowił samodzielną aplikację.
 Program po skonsultowaniu,​ powinien zapytać o kwotę i wyświetlić wszystkie możlwie kombinacje kompozycji kwiatowych, które można za podaną kwotę kupić, podając: identyfikator kompozycji, nazwę oraz cenę. Program po skonsultowaniu,​ powinien zapytać o kwotę i wyświetlić wszystkie możlwie kombinacje kompozycji kwiatowych, które można za podaną kwotę kupić, podając: identyfikator kompozycji, nazwę oraz cenę.
 +
 +====== Uwagi, komentarze, propozycje ======
 +
 +Laboratorium jest za krótkie. Zostaje ok. 30 minut wolnego czasu.
 +
 + --- //​[[szymek@adres.pl|Szymon Świerkosz]]//​
pl/prolog/prolog_lab/prolog_lab_rdbms.1242065787.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0