Если есть описание БД


Чудесно, когда есть описание таблиц и полей в базе. Тогда можно составить SQL-builder на основе запроса на естественном языке.

Каким должно быть описание

Описание должно для каждой интересующей колонки в БД иметь таблицу справочных значений, что у неё идентификатор для связи и в каких таблицах, собственно понятное имя, если надо — соответствующее поле даты, и… да для начала достаточно.

Тогда такое метаописание позволяет конструировать на лету запросы вида выбери ЧТО из ОТКУДА_ДЛЯ_ЧТО где ЧТО = ЗНАЧЕНИЕ сортируй по ДАТЕ_ЧТО — ну и в таком духе.

Связи решают всё

Справочники понятно как связывать (просто брать и всегда связывать если задали значение). А вот если это через 33 таблицы надо связать, то всю эту структуру описательную логично укладывать в граф — и кратчайшим путем объединять таблицы.

Это работает.

Намерение и именованные сущности

Для понимания, что же нужно выбрать можно (и нужно) извлекать именованные сущности из текста запроса. Само намерение обычно select. Но могут быть и другие — связанные с визуализацией например (хотя её лучше выбирать автоматически исходя из формы ответа).

А точно работает?

Работает. И у дашбордов Visiology в частности есть подобный бот. Но появился он позже, чем я это придумал 🙂 Не суть — чат с данными придумали еще до этой идеи (французы Aristotle — но у них так и не взлетел стартап).

Это не работает, если запрос сильно отличается от естественного текста (как ни странно). Свои термины, сокращения, иногда невозможность отличить наименование сущности от её значений… черт в деталях как обычно. Да и метабазу набить бывает непросто (не всё Chinook).

Но кому что-то такое нужно — тому нужно пробовать обязательно. Легко не будет, но магический эффект гарантирован.

P.S. На графовых базах навроде Neo4j всё из коробки должно быть в разы легче, но я не пробовал (а вы попробуйте — затолкать туда обычные данные).


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *