SQLf

SQLf — это расширение языка SQL, применяющее методы теории нечётких множеств для выражения гибких (нечётких) запросов к традиционным (или «обычным») реляционным базам данных. Язык был предложен в 1990-х годах (одна из первых публикаций датируется 1994 годом) Патриком Боском и Оливье Пивером[1][2]. SQLf является академической концепцией, активная разработка которой прекратилась[3]. Язык не имеет нативной поддержки в современных коммерческих и open-source СУБД; на практике концепции подобных расширений были вытеснены встроенными функциями современных реляционных баз данных[4].

Описание

SQLf является одним из известных предложений системы гибких запросов (наряду с такими альтернативами, как FSQL и FQUERY), позволяющей применять лингвистическую квантификацию над множеством строк в запросах, реализуемую посредством расширения вложенных и разбиенных структур SQL с помощью нечётких квантификаторов[5]. Кроме того, SQLf разрешает использовать квантификаторы для задания количества критериев поиска, которыми должна обладать каждая отдельная строка. Для оценки запросов предложено несколько механизмов[6], наиболее важным из которых считается основанный на принципе t-сечения[7]. Он основан на построении классических запросов, которые по заданному порогу «t» формируют t-сечение результата нечёткого запроса, что снижает дополнительные вычислительные издержки применения нечёткого языка. Современные подходы к оценке и оптимизации нечётких запросов включают использование нечётких моделей затрат (fuzzy cost models), алгоритмов для обработки Top-k запросов (таких как Fagin's Algorithm и Threshold Algorithm), а также применение q-gram индексов[8][9].

Синтаксис и структура запросов

Фундаментальной структурой запроса в SQLf является мультиреляционный блок. Его построение основано на трёх базовых операциях реляционной алгебры: проекция, декартово произведение и выборка, а также на применении концепций нечётких множеств. Результатом запроса в SQLf выступает нечёткое множество строк, то есть нечёткая (fuzzy) реляция вместо обычной.

Базовый блок SQLf состоит из конструкции с обязательными частями SELECT, FROM и необязательной WHERE. Семантика данной структуры следующая:

  • Клауза SELECT соответствует операции проекции. Она определяет атрибуты отношений (или выражения атрибутов), которые будут выбраны. Результирующая таблица — это нечёткое множество, упорядоченное по степени удовлетворения в убывающем порядке.
  • Клауза SELECT также задаёт калибровку, позволяющую ограничить множество возвращаемых строк. Она задаётся с помощью конструкции WITH CALIBRATION [k|α|k,α] (или с использованием n и λ). Различают два типа калибровки: количественную и качественную. При количественной калибровке (параметр k или n) пользователь задаёт число результатов, которые должны быть получены, и тогда выбираются строки с наивысшими степенями принадлежности до указанного количества ответов. При качественной калибровке (качественный порог α или λ) пользователь указывает минимальную степень удовлетворения, которой должна соответствовать каждая извлекаемая строка[3].
  • Клауза FROM соответствует декартову произведению. Запрос выполняется над декартовым произведением отношений, указанных в этой части запроса.
  • Клауза WHERE совпадает с выборкой (селекцией). Она определяет условие, по которому рассчитывается степень удовлетворения. Строки, не удовлетворяющие условию, отбрасываются. Это условие формируется как нечёткий предикат, который может включать любые атрибуты отношений.

Пример запроса SELECT, возвращающего список отелей, которые являются «дешёвыми». Запрос выбирает все строки из таблицы Hotels, удовлетворяющие нечёткому предикату cheap, заданному нечётким множеством μ=(, , 25, 30). Результат сортируется по убыванию степени принадлежности строки требуемому критерию.

SELECT name, address
  FROM  Hotels
  WHERE price IS "cheap"<ref name="FuzzyQueriesBaseGroup">{{cite web |url=https://basegroup.ru/community/articles/fuzzylogic-queries |title=Нечеткие запросы к базам данных |website=BaseGroup |access-date=2026-05-28 }}</ref>;

Сравнение и современные альтернативы

SQLf занимает определённое место среди технологий нечётких баз данных, таких как FSQL и нечёткие объектно-ориентированные базы данных (FOOD). В отличие от FSQL, который работает с нечёткими базами данных, SQLf ориентирован на традиционные реляционные базы данных. Отличие от нечётких объектно-ориентированных баз данных (FOOD) заключается в том, что в FOOD неопределённость заложена в саму модель данных, а SQLf применяет нечёткую логику только на уровне запроса[5].

В современных системах управления базами данных (таких как PostgreSQL и SQL Server) вместо специализированных языков применяются встроенные функции и расширения для нечёткого сопоставления строк (например, pg_trgm, EDIT_DISTANCE)[4].[10]

Примечания

  1. Bosc, P.; Pivert, O. (1995). “SQLf: a relational database language for fuzzy querying”. IEEE Transactions on Fuzzy Systems [англ.]. 3 (1): 1—17. DOI:10.1109/91.366566. ISSN 1063-6706. Дата обращения 2024-06-16. |access-date= требует |url= (справка)
  2. Bosc, P. Knowledge Management in Fuzzy Databases : [англ.] / P. Bosc, O. Pivert. — Heidelberg : Physica-Verlag HD, 2000. — P. 171–190. — ISBN 978-3-7908-1865-9.
  3. 1 2 SQLf2 and SQLf3: Two Extensions of SQLf for Fuzzy Queries. CLEI. Дата обращения: 28 мая 2026.
  4. 1 2 Implementing Fuzzy Search in SQL Server Using New Inbuilt Functions. SQL Server Central (февраль 2025). Дата обращения: 28 мая 2026.
  5. 1 2 Fuzzy Querying in Relational Databases: SQLf and FSQL. WSEAS (2005). Дата обращения: 28 мая 2026.
  6. Bosc, P. SQLf Query Functionality on Top of a Regular Relational Database Management System // Knowledge Management in Fuzzy Databases : [англ.] / P. Bosc, O. Pivert. — 2000. — Vol. 39. — P. 171–190. — ISBN 978-3-7908-2467-4. — doi:10.1007/978-3-7908-1865-9_11.
  7. Bosc, Patrick. On the Efficiency of the Alpha-Cut Distribution Method to Evaluate Simple Fuzzy Relational Queries // Fuzzy Logic and Soft Computing : [англ.] / Patrick Bosc, Olivier Pivert. — 1995. — Vol. 4. — P. 251–260. — ISBN 978-981-02-2345-8. — doi:10.1142/9789812830753_0029.
  8. Cost-Oriented Optimization of Fuzzy Relational Database Queries (2012). Дата обращения: 28 мая 2026.
  9. Efficient Top-k Search Using q-gram Indices (2010). Дата обращения: 28 мая 2026.
  10. A Handbook to Implement Fuzzy Search in PostgreSQL. DEV Community. Дата обращения: 28 мая 2026.