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

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

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 2 мес. назад.

  • Автор
    Сообщения
  • #2160

    questioner
    Участник

    В языке Prolog есть встроенная база данных, но можно ли работать с ней примерно также, как с SQL?
    Можно ли говорить о нормальных формах базы данных Prolog, так как это делается для SQL, есть ли различия в их проектировании?
    Меня смущает наличие во многих реализациях Prolog предикатов asserta и assertz, которые выполняют вставку записи в начало и конец базы данных соответственно. Ведь в классических базах данных считается плохим тоном строить предположения относительно порядка следования данных.

  • #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.

Для ответа в этой теме необходимо авторизоваться.