Różnice

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

Odnośnik do tego porównania

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]
Linia 1: Linia 1:
-====== 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). 
- 
-Interackja taka jest możliwa z wykorzystaniem [[wp>​ODBC]]. 
- 
-===== - Konfiguracja ODBC ===== 
- 
-Aby móc skorzystać z tzw. źródła danych ODBC, należy w domowym katalogu utworzyć plik o nazwie ''​.odbc.ini''​ oraz umieścić w nim poniższą treść: 
- 
-<​code>​ 
-[prolog] 
-Description = PostgreSQL Unicode 
-Driver = PostgreSQL Unicode 
-Trace = No 
-TraceFile = ​ 
-Database = prolog 
-Servername = borg.ia.agh.edu.pl 
-Username ​               = 
-Password ​               = 
-Port  ​       = 5432 
-Protocol = 6.4 
-ReadOnly = No 
-RowVersioning = No 
-ShowSystemTables = No 
-ShowOidColumn = No 
-FakeOidIndex = No 
-ConnSettings = ​ 
-</​code>​ 
- 
-Wartości pól ''​Username''​ oraz ''​Password''​ będą podane przez prowadzącego na zajęciach. 
- 
-Powyższe działąnia konfigurują połączenie z źródłem danych ODBC o nazwie ''​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''​. 
- 
- 
-===== - ODBC w SWI-Prolog ===== 
- 
-[[http://​www.swi-prolog.org/​pldoc/​package/​odbc.html|Dokumentacja]] dotycząca predykatów obsługujących połączenia ODBC z bazami danych. 
- 
-===== - Połączenia ===== 
- 
-Do nawiązaywania połączenia z ź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. 
- 
-<code prolog> 
-?- odbc_connect('​prolog',​ Polaczenie, 
-             ​[open(once) 
-           ]). 
-</​code>​ 
- 
-Przed zakończeniem korzystania z połączenia z źródłem danych należy wywołać predykat 
-''​odbc_disconnect/​1'',​ którego argumentem musi być identyfikator połączenia:​ 
- 
-<code prolog> 
-?- odbc_disconnect(Polaczenie). 
-</​code>​ 
- 
-Zamiast identyfikatora połączenia można użyć synaonimu połączenia,​ korzystając z opcji ''​alias'':​ 
- 
-<code prolog> 
-?- odbc_connect('​prolog',​ _, 
-             [ alias(prolog),​ 
-               ​open(once) 
-           ]). 
-</​code>​ 
- 
-Tak otwarte połączenie można zakończyć:​ 
- 
-<code prolog> 
-?- odbc_disconnect(prolog). 
-</​code>​ 
- 
-===== - Schemat Bazy Danych ===== 
- 
-Schemat bazy danych, dostępnej jako źródło danych ''​prolog''​ przedstawiony jest poniżej. 
- 
-<code sql> 
-CREATE TABLE klienci ( 
-    idklienta varchar(10) NOT NULL, 
-    haslo varchar(10) NOT NULL, 
-    nazwa varchar(40) NOT NULL, 
-    miasto varchar(40) NOT NULL, 
-    kod char(6) NOT NULL, 
-    adres varchar(40) NOT NULL, 
-    email varchar(40),​ 
-    telefon varchar(16) NOT NULL, 
-    fax varchar(16),​ 
-    nip char(13), 
-    regon char(9) 
-); 
- 
-CREATE TABLE kompozycje ( 
-    idkompozycji char(5) NOT NULL, 
-    nazwa varchar(40) NOT NULL, 
-    opis varchar(100),​ 
-    cena numeric(7,​2),​ 
-    minimum integer, 
-    stan integer 
-); 
- 
- 
-CREATE TABLE odbiorcy ( 
-    idodbiorcy integer NOT NULL, 
-    nazwa varchar(40) NOT NULL, 
-    miasto varchar(40) NOT NULL, 
-    kod char(6) NOT NULL, 
-    adres varchar(60) NOT NULL 
-); 
- 
- 
-CREATE TABLE zamowienia ( 
-    idzamowienia integer NOT NULL, 
-    idklienta varchar(10) NOT NULL, 
-    idodbiorcy integer NOT NULL, 
-    idkompozycji char(5) NOT NULL, 
-    termin date NOT NULL, 
-    cena numeric(7,​2),​ 
-    zaplacone boolean, 
-    uwagi varchar(200) 
-); 
- 
- 
-CREATE TABLE historia ( 
-    idzamowienia integer NOT NULL, 
-    idklienta varchar(10),​ 
-    idkompozycji char(5), 
-    wartosc numeric(7,​2),​ 
-    termin date 
-); 
- 
-</​code>​ 
- 
- 
-===== - 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]]). 
-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. 
- 
-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:​ 
- 
-<code prolog> 
-?- odbc_query(prolog,​ '​SELECT nazwa, email FROM klienci'​ ,row(Nazwa, Email), []). 
-</​code>​ 
- 
-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]]). 
- 
-===== - Proste zapytania ===== 
- 
-**Ćwiczenie** 
- 
-Zaimplementuj:​ 
-  - predykat ''​op/​0''​ otwierający połączenie ze źródłem danych ''​prolog'',​ 
-  - predykat ''​cl/​0''​ zamykający w/w połączenie,​ 
-  - predykat ''​kompozycje/​2''​ udostępniający informacje o kompozycji tj. identyfikator oraz cenę. **Uwaga**: może być konieczne zastosowanie konwersji typów, użyteczny predykat: ''​atom_number/​2''​ (patrz [[http://​www.swi-prolog.org/​pldoc/​doc_for?​object=section(2%2c '​4.21'​%2c swi('​%2fdoc%2fManual%2fmanipatom.html'​))|dokumentacja]]). 
- 
-Przetestuj działanie w/w predykatów. 
- 
-===== - Złożone przetwarzanie ===== 
- 
-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ł? 
- 
-**Ćwiczenie** 
- 
-Zaimplementuj predykat ''​jakieza/​2'',​ tak aby zapytanie: 
-<code prolog> 
-?- jakieza(200,​X). 
-</​code>​ 
-uzgadniało X z listą nazw identyfikatorów kompozycji kwiatowych, które można kupić mając do dyspozyji 200 zł. **Uwaga**: predykat winien być niedeternistyczny,​ umożliwiać znalezienie alternatywnych rozwiązań. 
- 
- 
-===== - Samodzielny program ===== 
- 
-**Ćwiczenie** 
- 
-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ę. 
pl/prolog/prolog_lab/prolog_lab_rdbms.txt · ostatnio zmienione: 2019/06/27 15:50 (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