Quali sono le somiglianze e le differenze in termini di concetti fondamentali e implementazione tra un linguaggio di database relazionale sql
e un linguaggio di programmazione logica come prolog
e clojure core.logic
? I due sono intercambiabili?Quanto sono simili le lingue di database relazionali e la programmazione logica?
risposta
Le somiglianze vengono acquisite dal linguaggio di query Datalog. Here è la motivazione e una migliore spiegazione della connessione tra logica e database. Questo estratto dovrebbe indirizzare la tua domanda:
Tuttavia, accoppiamento Prolog e database relazionali mostrano alcune dissonanze . Fatti e regole in Prolog sono organizzati in un ordine totale e la semantica di un programma Prolog dipende da questo ordine. Nel contrasto , le relazioni in un database sono considerate come serie non ordinate di tuple e il risultato di una query è indipendente da qualsiasi ordine fisico . L'elaborazione dei programmi Prolog è orientata a tuple mentre i database relazionali sono orientati. Prolog offre le funzioni procedurali come il predicato di taglio per consentire al programmatore di controllare il processo di inferenza . L'ordine di valutazione di un programma Prolog è predeterminato, mentre le espressioni nel calcolo relazionale sono puramente dichiarativo e la valutazione effettiva viene lasciata a un processore di query che può riorganizzare la query per scopi di ottimizzazione. L'ottimizzazione delle query è stata fondamentale per il successo dei database relazionali. La natura procedurale del motore Prolog lascia l'onere dell'ottimizzazione con il programmatore.
Una differenza importante è che SQL is only Turing complete con alcuni trucchi piuttosto pazzi che non erano possibili fino ANSI SQL 99. Prolog is Turing complete ed è quindi un linguaggio di programmazione generico.
Sebbene SQL e Prolog dimostrino entrambi concetti di logica del primo ordine, nessuno dei due è un'implementazione completa di predicate calculus.
Prolog e altri linguaggi di programmazione logica sono fortemente dipendenti dalla ricorsione, sia per la definizione di strutture di dati che per i predicati.
SQL di per sé non consente la ricorsione e l'introduzione di stored procedure è stata eseguita con limitazioni sulla profondità di annidamento di tali chiamate. Per esempio. SQL Server 2000 a 2012 consente at most 32 nested calls.
Nei database relazionali le "relazioni" sono reificate come tabelle (o più flessibilmente, come viste). L'aspetto più simile di Prolog è dynamic factbases, che in alcune implementazioni (SWI, Amzi) consente l'indicizzazione delle prestazioni, molto simile all'indicizzazione delle tabelle relazionali per le prestazioni in SQL.
Sebbene gli RDBMS SQL siano progettati per funzionare in modo efficiente con insiemi di dati molto più ampi di quelli di cui necessita un'implementazione Prolog, Prolog può almeno essere utilizzato per prototipare sia il database che gli aspetti di processo di un progetto di sistema.
Vedere here for a 2005 thesis che esplora estendendo i database relazionali con l'inferenza di Prolog.
- 1. Quanto sono trasferibili le abilità di programmazione tra le lingue?
- 2. Lingue che ottimizzano l'utilizzo della programmazione logica
- 3. Database relazionali e matematica?
- 4. Strumento per analizzare e confrontare la logica di funzioni simili?
- 5. I database relazionali sono inadeguati per Node.js?
- 6. Quali sono alcuni modi in cui le persone distribuiscono le modifiche ai database relazionali utilizzando Node.js?
- 7. Quanto sono diverse le semantiche tra Python e JavaScript?
- 8. phpMyAdmin - Errore: le caratteristiche relazionali sono disabilitate
- 9. Le lingue "ferro" sono pronte per la prima serata?
- 10. Quali sono le buone soluzioni di database NoSQL e non relazionali per il database di controllo/registrazione
- 11. orientato agli oggetti, come le strutture di database relazionali
- 12. Quali sono le lingue simili ad Assembler buone o interessanti, ma ad un livello superiore?
- 13. Quanto sono efficienti le proiezioni di MongoDB?
- 14. Triple Stores vs Database relazionali
- 15. Programmazione logica a Lua?
- 16. Quanto sono sufficienti le prove?
- 17. Lingue fortemente tipizzate per la programmazione Web
- 18. Come eseguire la modellazione dell'ereditarietà nei database relazionali?
- 19. Ottenere longitudine e latitudine simili dal database
- 20. "Uint32", "int16" e simili; sono C++ standard?
- 21. Lingue di programmazione funzionale del flowcharting
- 22. Quanto sono simili/diversi i make di gnu, microsoft nmake e posix standard make?
- 23. Tutte le lingue dinamiche sono tipografiche?
- 24. NoSQL vs. Database relazionali vs Ibrido possibile
- 25. MSBuildWorkspace.Create() - Le lingue supportate sono zero
- 26. Gioca quadro e Node.js non bloccante comportamento per database relazionali
- 27. Perché la maggior parte delle lingue non ottimizza "0 * ..." e ci sono lingue che funzionano?
- 28. Perché la codifica e la decodifica sono necessarie per qualsiasi linguaggio di programmazione/database?
- 29. Trova righe simili nel database
- 30. Riferimento di funzioni simili tra i linguaggi di programmazione