Vergleich von SQL und Prolog
Habe ich angefangen zu lernen, Prolog und Gedanken über den theoretischen Unterschied von der SQL-Sprache.
Beispiel:
- beide sind deklarative Sprachen
- beide unterstützen eine Tatsache-driven knowledge-Datenbank
- beide support-Frage-Stil von von Daten-abrufen von
- unterstützen beide funktionalen Abhängigkeiten
Mehr gemeinsame Punkte? Nennenswerte Unterschiede?
InformationsquelleAutor der Frage | 2010-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten (früher) Antworten hier sind ein Spiegelbild der Tatsache, dass die meisten Menschen nicht wissen, was SQL ist (eine Umsetzung der Relationalen Kalkül) oder wie das heisst (dass es eine form der Prädikatenlogik). Die folgenden Aussagen sind wahr, der sowohl in Prolog und SQL:
In der Regel Menschen sind sich nicht bewusst von diesen äquivalenzen zwischen Ihnen:
Also, was sind Ihre Unterschiede? Obwohl Sie in der gleichen konzeptuellen Domänen, Ihre Schwerpunkte sind in völlig verschiedene Richtungen. Im Prolog-terms, SQL ist in Erster Linie eine Tatsache und Relation(set) - Motor, in der Erwägung, dass der Prolog ist in Erster Linie ein Regeln und Leitlinien-Motor. Jeder kann tun der anderen, in begrenztem Umfang, aber es wird immer schwieriger, mit sich selbst kleine Steigerungen in der Komplexität. Zum Beispiel, Sie tun können Leitlinien in SQL, aber es ist fast vollständig manuell in der Natur und überhaupt nicht wie die automatische vorwärts-Leitlinien der Prolog. Und ja, können Sie eine Speicherung von Daten(Fakten) in Prolog, aber es ist überhaupt nicht für den "Speicher -, Abruf -, Projektions-und Abbau von Billionen von Zeilen mit tausenden von gleichzeitigen Benutzern", die von SQL ist.
Plus, SQL ist in Erster Linie ein Server-Paradigma Sprache, in der Erwägung, dass der Prolog ist in Erster Linie eine Client-Sprache-Paradigma.
InformationsquelleAutor der Antwort RBarryYoung
Sind Sie richtig: Prolog und SQL sind theoretisch aufeinander zu beziehen (Sie fragte, speziell über theoretische Unterschiede).
Möchte ich ergänzen RBarryYoung Antwortgeben Sie einige Hinweise zu verstehen, die Verbindung, so dass Sie einen Ausgangspunkt, um zu studieren und zu verstehen die technischen Zusammenhänge.
Prolog und SQL teilen sich ein Kern: jede Abfrage ausdrückbar in einer Teilmenge von Prolog ausgedrückt werden kann, in einer Teilmenge von SQL und Umgekehrtd.h. diese Teilmengen sind logisch äquivalent.
Zu verstehen, wie dies wahr sein kann, müssen Sie prüfen, auf welchen theoretischen Grundlagen sowohl der Prolog und SQL basieren:
Natürlich etwas aus dieser Teilmengen braucht mehr übersetzungen.
Aber ich glaube, dass die Behauptung, dass die Gleichwertigkeit in der Aussagekraft der beiden Teilmengen ist mehr als ein Appell an Turing-äquivalenz4 bei der Betrachtung Prolog-to-SQL-übersetzung.
Hinweise:
1) Leider SQL kann verwendet werden, im Gegensatz zu RDBMS theoretischen Grundlagen (relationale algebra-ule); für Beispiel, SQL-Tabellen sind nicht unbedingt Beziehungen - als pro RA - d.h. Sie können ohne (primär -) Schlüssel, also doppelte Zeilen zulässig sind. Solche Tabellen sind nicht Sätze, sondern multimengen (aka Taschen) von Tupeln. In einem solchen Kontext, alle theoretischen Ergebnisse für RA, wo Beziehungen sind Sätze, sind nicht unbedingt gültig.
2) Für eine übersetzung von SQL, TRC, siehe Ein Hinweis auf die übersetzung von SQL auf Tupel-Kalkülauch hier (postscript-Papier).
3)um mehr über die Unterschiede zwischen Datalog und Prolog sehen Was Sie schon Immer Wissen Wollten Über Datalog (Und Nie zu Fragen Wagten) (pdf-paper - links direkt auf Seite 6, überschrift H. Datalog und Prolog).
4) Für das Protokoll: RA (und so Ihre Entsprechungen safe TRC und sichere Datalog-w/o-Rekursion) ist nicht Turing-vollständig auf den Zweck, zu vermeiden, nie endenden Abfragen.
Historische Anmerkung: Prolog und Codd, die Relationale Algebra konzipiert wurden, um die gleiche Zeit (Ende der 60er Anfang der 70er Jahre) in verschiedenen Kontexten - Colmerauer konzipiert Prolog for natural language processing und Codd konzipiert RA als theoretische Grundlage des Relationalen DBMS. So, nach einer theoretischen Zusammenhang zwischen Prolog-Datalog-RA-SQL-war unbedingt etabliert a posteriori und ist implizit in der Tatsache, dass Sie basieren alle auf Erster Ordnung Prädikat Kalkül (aka der first order logic).
InformationsquelleAutor der Antwort MaD70
Prolog und SQL basieren beide auf first order logic, aber SQL-Tabellen sind einfache binäre Beziehungen, in der Erwägung, dass Prolog-Prädikate sind Horn-Klauseln.
Dies ist nicht eine obskure theoretischen Punkt. SQL-binären Beziehungen sind Aussagen zu der Tat, von der form:
f(A, B, C ... N)
Wo f ist der name der Beziehung und Eine...N seine Variablen. Prolog binäre Beziehungen sind Implikationen der form:
A <- B, C, D ... N
Wo Eine ... N selbst sind Horn-Klauseln. SQL Relationen sind ein effizienter Weg, um Daten zu beschreiben. Prolog-Beziehungen beschreiben komplexe Beziehungen zwischen Daten, die sich als Daten gesichert.
Ist es wichtig zu verstehen, dass in Prolog gibt es keine Trennung zwischen Daten und den Betrieb. Prolog-Fakten, Regeln und Anfragen sind alle Horn-Klauseln, also die Daten, dass etwas verloren geht bei der übersetzung in die meisten Kurse an der Uni. Prolog ist nicht wie C, aber mit Fakten anstelle von Variablen und Regeln anstelle von Funktionen. Auf der anderen Seite, SQL ist ein viel wie Prolog, ohne die Regeln oder Abfragen.
SQL-Abfragen sind auch Logik Prädikate, aber SQL-Abfragen werden nicht in der Datenbank selbst gespeichert. Vielmehr werden Sie verwendet, um zu extrahieren von Datensätzen aus der Datenbank von Fakten. Sie speichern könnte eine Abfrage wie eine Tabelle Zeile in einer SQL-Datenbank, aber Sie konnte nicht führen Sie es in das Formular.
Prolog Abfragen werden in der Datenbank gespeichert wie jedes andere Prolog-Prädikat, denn Sie sind wie jedes andere Prolog-Prädikat. Abfragen sind Horn-Klauseln der form:
<- B, C, D ... N
Also Auswirkungen auf einen Präzedenzfall, aber ohne Vorgeschichte, daher immer false. Fakten sind Horn-Klauseln mit einer vorgängigen aber keinen Präzedenzfall, der die form:
A <-
Also immer wahr. Prolog beweist eine Abfrage durch Widerlegung: wenn Sie nicht finden können, eine Tat (oder-Regel), die es beweist, es wird der Zustand der Ziel ist true, da eine Abfrage immer false. In dem Prozess, einige Variablen sind gebunden, so das Ergebnis Sätze konstruiert werden können, ähnlich wie SQL mit SELECT-Abfragen.
Modernen SQL-DBMS-Funktionen wie stored procedures und flow control language SQL kann verwendet werden, für die Inferenz (nicht, dass Sie wollen zu tun Inferenz in SQL). Prolog kommt bereit, mit einer Inferenz-engine abgestimmt, um seine Datenbank von Horn-Klauseln, weil das eine effiziente Form der Inferenz über die Datenbanken der Sachverhalt als binäre Beziehungen (und Nein, nicht nur, weil es ziemlich).
Prolog ist homoiconic Natur (Daten Betrieb ist-Daten) bedeutet, dass neue Daten zur Datenbank Hinzugefügt werden, damit dem Programm, da die Datenbank des Programms. Jedes mal also, wenn ein neuer Sachverhalt Hinzugefügt, um Ihre Datenbank (in der Regel mit assert/1) das gesamte Programm muss dekompiliert. Dies ist eine riesige PITA und macht Prolog ineffizient für die Speicherung von großen Datenmengen, aber es gibt keinen Grund, warum es ineffizient, auf Daten Abruf und Prolog-Systeme verwenden die gleichen algorithmen wie SQL-Systeme für diesen Zweck. SQL auf der anderen Seite ist gut sowohl für ein-und Auslagerung.
Schließlich Prolog hat ein paar features, die SQL einfach nicht haben, nämlich seine super-pattern-matching-bezeichnet die Vereinigung, die negation als scheitern und syntaktischen Elemente, die Erleichterung der Bearbeitung der Liste und Grammatik-Erklärung (Definite Clause Grammatik-notation). Das sind nur ein glücklicher Zufall und waren meist Hinzugefügt, um die Sprache, weil Sie en vogue in der Zeit war es zuerst erstellt hat (vielen Dank an LISP). SQL hab rekursive Abfragen relativ vor kurzem so, der Prolog kann sich nicht rühmen, nicht mehr.
Und natürlich beide Sprachen sind schwach auf I/O und Mathematik, obwohl zumindest können Sie einige der Arithmetik in Prolog, ohne ziehen Sie Ihre Haare aus alle den Weg.
So, wirklich, Prolog und SQL sind so ähnlich wie C und Haskell. Sie sind sowohl auf der Grundlage der gleichen Wurzel Abstraktion, first order logic (wie C und Haskell sind beide basierend auf der algebra), aber alles andere ziemlich schnell nach, dass. Auch aus der Sicht der design-Sprache, ist SQL eher gebrochen, mit vielen verschiedenen Funktionen der Sprache (pedicates, Abfragen, data manipulation language....). Prolog-das design ist sehr konsistent, so dass die ganze Sprache ist wirklich nur Prädikate und ein paar Satzzeichen.
Für mich, der wichtigste Unterschied ist dieser: ich weiß nicht, wie SQL, aber ich habe mit ihm zu arbeiten. Ich Liebe Prolog, aber ich kann es nicht verwenden, bei der Arbeit. Das Leben ist unfair 🙂
InformationsquelleAutor der Antwort Stassa Patsantzis
Der wesentliche Unterschied in meinen Augen ist, dass SQL ruft Zeilen aus Tabellen - das heißt, aus einer endlichen Menge von instanziierten Objekte entsprechend certaing filter-Bedingungen. Auf der anderen Seite, Prolog gibt Sie theoretisch alle instanziierbaren Objekte, die diese Bedingungen erfüllen. Und während in Prolog können Sie auch abrufen von Entitäten, die aus einer endlichen Menge, in SQL kann man nicht Holen der Werte aus einer theoretisch unendlichen Menge.
InformationsquelleAutor der Antwort Dr H
Gibt es viele Unterschiede, die ich denke, klar, wenn Sie starten Sie mit Ihnen. Denken Sie daran, die aufgrund von Veränderungen in der Terminologie, somethings, die als die gleiche Sache in der Vergangenheit ganz andere Dinge bedeuten jetzt.
Sehr breiten überblick, der Unterschied.
SQL-Anweisungen arbeiten, die für eine relationale Datenbank und Abfrage (ask) Daten aus dieser Datenbank, die änderungen an, die Daten und die Ergebnisse sind genau das ausgedrückt in der Sprache, in der Erwägung, dass im Prolog definieren Sie Fakten und Logik-engine erzeugt neue Tatsachen auf der Grundlage der vorliegenden Fakten. Neue Daten (zahlen) erstellt werden, über die Auswertung.
Beide etwas namens Abfragen (aber Sie funktionieren ganz anders) und Sie haben beide Daten (aber verwenden Sie es anders.)
Die Anwendungsfälle, die für SQL und Prolog sind auch ganz andere. Es würde niemals Sinn machen, zum speichern einer Adresse der Liste in Prolog in der Erwägung, dass das genau das ist, was SQL wurde entwickelt, um zu tun.
Einfach ausgedrückt SQL-wird verwendet, um den Zugriff auf einen datenspeicher und Prolog ist ein expression evaluator.
InformationsquelleAutor der Antwort Hogan
Ich denke, der wesentliche Unterschied ist, dass der Prolog ist eine Abfrage-Sprache verwendet für passende komplizierte Muster mit einer Datenbank von simple Fakten. SQL auf der anderen Seite ist beschränkt auf relationale Datenbanken.
InformationsquelleAutor der Antwort Iris
Diese erhalten Sie begonnen:
Programmierung in Prolog
Sehr früh auf, kann man das Lesen:
Genießen.
InformationsquelleAutor der Antwort Trevoke
xonix, müssen Sie mehr Erfahrung mit Entwicklung zu sagen, ob etwas getan werden kann, in sql oder nicht.
Unten sind mindestens 2 Lösungen für dein fibo-Serie. Ein mit
Stored Procedure
und die andere überCTE
. Nehmen Sie Ihre pick.METHODE 1
METHODE 2
InformationsquelleAutor der Antwort mathew
Nur ein paar Gedanken:
InformationsquelleAutor der Antwort Xonix