Kapitola 16: Prolog a Databáze – Od SQL k logice

Pokud jste někdy tvořili web nebo aplikaci, pravděpodobně jste narazili na databáze jako MySQL nebo PostgreSQL. Tyto systémy ukládají data do tabulek (jako v Excelu). Říkáme jim relační databáze a mluvíme s nimi jazykem SQL. Možná vás překvapí, že Prolog je sám o sobě velmi výkonná databáze. Ale místo tabulek používá logiku a vztahy. V této kapitole se podíváme na to, v čem je Prolog jiný a v čem je dokonce lepší než klasické SQL.

16.1 Tabulky vs. Predikáty

V klasické databázi (SQL) je svět rozdělen do přísných tabulek. Každá tabulka má sloupce a řádky. V Prologu máme predikáty. Je to skoro to samé, ale mnohem flexibilnější.

RELAČNÍ DATABÁZE (SQL) Systém pro ukládání dat do tabulek. Je skvělý pro strukturovaná data (seznamy zaměstnanců, skladové zásoby), ale méně vhodný pro složité vztahy.
ZNALOSTNÍ GRAF (PROLOG) Způsob ukládání dat jako sítě vztahů. Data nejsou v tabulkách, ale jsou propojena jako pavučina. Prolog je přirozeným jazykem pro práci s těmito grafy.

Srovnání: Uživatelé

SQL (Tabulka):

| ID | Jmeno | Vek |
|----|-------|-----|
| 1  | Petr  | 25  |
| 2  | Jana  | 22  |

Prolog (Fakta):

user(1, 'Petr', 25).
user(2, 'Jana', 22).

16.2 Dotazování: SELECT vs. Cíl

Jak získat data? V SQL píšeme příkazy, které říkají "VYBER mi TOHLE z TAMTOHO". V Prologu jen popíšeme vzor toho, co hledáme.

Úkol: Najdi jména uživatelů starších 20 let.

SQL:

SELECT Jmeno FROM users WHERE Vek > 20;

Prolog:

?- user(_, Jmeno, Vek), Vek > 20.

Všimněte si, jak je to podobné. Čárka , v Prologu funguje jako AND (a zároveň) v SQL.

Tabulka vs Pavučina
Obrázek 16.1: SQL je jako tabulka v Excelu. Prolog je jako pavučina vztahů.

16.3 Relační síla: Proč Prolog vyhrává v grafu

Kde Prolog skutečně září, jsou vztahy. Představte si sociální síť. Chcete najít "přítele přítele přítele".

V SQL je to noční můra. Musíte spojovat tabulky (JOIN) stále dokola:
SELECT ... FROM friends AS f1 JOIN friends AS f2 ON ... JOIN friends AS f3 ON ...
Je to pomalé a složité.

V Prologu? Použijeme rekurzi, kterou už známe!

% Přátelství je obousměrné
pritel(X, Y) :- kamarad(X, Y).
pritel(X, Y) :- kamarad(Y, X).

% Cesta v grafu přátelství
spojeni(X, Y) :- pritel(X, Y).                % Přímý přítel
spojeni(X, Y) :- pritel(X, Z), spojeni(Z, Y). % Přítel přítele...

Tento kód najde spojení mezi libovolnými dvěma lidmi, ať je řetěz jakkoliv dlouhý. V SQL byste museli napsat jiný dotaz pro délku 2, jiný pro délku 3 atd. Prolog to zvládne jedním pravidlem.

Klíčový koncept: Prolog je databáze, která myslí

Zatímco SQL databáze je jako chytrá kartotéka, Prolog je jako detektiv s touto kartotékou v hlavě. Nejenže data ukládá, ale umí z nich okamžitě vyvozovat nové souvislosti (např. "kdo je přítel přítele"), aniž byste museli psát složité dotazy.

Otázky k zamyšlení

  1. Proč se Prologu říká "deklarativní" jazyk, stejně jako SQL? Co mají společného? (V obou popisujeme CO chceme, ne JAK to získat).
  2. Kdy byste použili SQL a kdy Prolog? (SQL pro bankovní transakce a tabulky, Prolog pro sociální sítě, doporučovací systémy a složité vztahy).
  3. Jaký je rozdíl mezi JOIN v SQL a čárkou , v Prologu? (V podstatě dělají to samé – spojují dvě podmínky).

🧪 Laboratoř: Knihovna budoucnosti