Ответ в теме: Отличия базы данных SQL от Prolog

      Комментарии к записи Ответ в теме: Отличия базы данных SQL от Prolog отключены
#2173

SQL – язык запросов к базе данных, как и Prolog, он является декларативным. SQL-базы данных, как и любая другая база данных позволяет хранить данные и осуществлять доступ к ним, это определяет наличие схожих черт между ними. И SQL и Prolog являются полными по Тьюрингу языками программирования, т.е. на них теоретически может быть решена любая задача. На прологе могут быть выражены реляционные зависимости, которые лежат в основе реляционных СУБД, к которым относятся SQL-базы.

При таком сравнении наверное можно рассматривать факты Prolog – как данные базы данных, представление (вид, view) SQL-базы – как правила Prolog. Отношение (relation) базы данных SQL, очень грубо понимаемое как таблица может быть представлено в Prolog в виде кортежей. Но мне эти “сходства и аналогии”, кажутся притянутыми за уши.

SQL базы обычно выполняют контроль целостности – разные реализации могут реализовывать его по-разному, но вставить две значения с одинаковым первичным ключом в таблицу вряд-ли получится. На Prolog никакого контроля автоматически не выполняется, вы можете написать правила, которые при вставке будут выполнять что-то такое.

Ключевое различие в самой модели вычислений, т.к. данные – это все-таки не факты. В теории БД по Кодду порядок данных в базе не имеет значения, программист не должен рассчитывать на какой-то определенный порядок выборки данных из базы. Факты пролога обрабатываются в определенном порядке, вы можете управлять положением добавляемых данных – функция asserta выполняет вставку в начало, а assertz – в конец.

Некоторые реализации Prolog позволяют сохранять в базу данных исходный код, порядок выборки данных будет определять порядок выполнения кода, т.е. в этом смысле нет различий между данными и кодом.

Prolog во всех смыслах выглядит более гибким, однако, в силу того, что оба языка являются Тьюринг-полными, любое утверждение на Prolog может быть выражено на языке SQL.

В целом, такое сравнение не совсем корректно, т.к. в Prolog может использоваться внешняя БД, основанная на цепочках (chains). Такая база имеет гораздо больше общего с традиционными БД. Кроме того, имеется замечательный Datalog, который нередко описывается в книжках по базам данных недалеко от SQL, но он имеет очень много общего с языком Prolog.

С другой стороны, я разрабатываю небольшой проект на Prolog и активно пользуюсь внутренней базой данных (только для хранения фактов), при этом мне было очень удобно реализовать специальные функции для вставки и удаления в базу, которые выполняют что-то типа контроля целостности, т.е. возможно эмулировать нечто похожее на привычные всем БД на Prolog. В моем проекте это было очень удобно, но я не уверен что это также эффективно, как и SQL для хранения большого количества данных – у меня данных не может быть много, иначе я бы был вынужден использовать Chains-DB.