Продолжаем описание свойств операции релевантная выборка. В первой части рассматривалась фильтрация кортежей регистра правил по значениям входного вектора с последующей сортировкой отобранных кортежей по их релевантности. Упор был сделан на то, как правильно считать (оценивать) релевантность кортежей.
Здесь же более подробно остановимся на самой операции выборки (не будет ни одной формулы!). В общем случае в данной операции могут участвовать (соединяться) не только вектор с таблицей, но и две таблицы. Операцию над таблицами, в которой используется проверка на принадлежность элемента множеству, назовем релевантным соединением. Далее рассмотрим, в чем его особенности.
Атрибуты конкретные и универсальные
В предыдущей статье таблицы данных были условно разделены на таблицы фактов, которые содержат конкретные значения атрибутов, и таблицы правил, в которых могут содержаться значения-множества (универсальные значения).
Однако правильнее говорить о делении не таблиц, а их атрибутов. В одной и той же таблице один атрибут может содержать конкретные значения, а другой — значения-множества (универсальные). В соответствии с этим можно выдвинуть такой тезис:
Все атрибуты (отношений) можно разделить на два рода — конкретные и универсальные.
Атрибуты конкретного рода — это такие, значениях которых интерпретируются как элементы множеств. Например, отсутствие значения такого атрибута означает именно пустое значение (а не универсум).
Атрибуты универсального рода — такие, значения которых интерпретируются как множества. Даже если это множество состоит из одного элемента. Отсутствие значения такого атрибута обычно означает значение его универсума (все значения множества).
Значения универсальных атрибутов участвуют в оценке релевантности кортежей таблицы, — это атрибуты релевантности. Конкретные атрибуты нет смысла оценивать, поскольку релевантность всех значений всегда одинакова.
Пример — переменные, значение которых зависит от параметра(ов)
Рассмотрим регистр, в котором есть атрибуты обоих родов. Пусть это будет таблица, содержащая значения переменных некой информационной системы. Назовем ее "Значения переменных". Каждая переменная характеризуется ее именем (идентификатором) и значением. Допустим, что значение может зависеть от пользователя системы. В такой таблице можно задавать значение переменной по умолчанию (для всех пользователей) и переопределять его для конкретных.
Детерминант регистра состоит из двух атрибутов (измерений) — "Имя" и "Пользователь". Корень — из одного ресурса "Значение" (ну и еще один системный атрибут — релевантность L).
Значения регистра могут быть примерно такими (значимость пользователей принята за 100, кортежи пронумерованы для удобства):
№ | Имя (0) | Пользователь (100) | Значение | L | |
---|---|---|---|---|---|
1 | Режим | 8 | 0 | ||
2 | Режим | Иванов | 6 | 100 | |
3 | ДатаРождения | 01.01.1980 | 0 | ||
4 | ДатаРождения | Иванов | 15.02.1987 | 100 | |
5 | ДатаРождения | Петров | 09.12.2008 | 100 | |
6 | Квалификация | Петров | Средняя | 100 |
Значение переменной "Режим" для всех пользователей равно 8. Исключение — Иванов, для которого значение режима равно 5. Аналогично значение переменной "ДатаРождения". По умолчанию в системе для всех пользователей принята дата рождения 1-го января 1980 года. Но для пользователей Иванов и Петров есть более точные значения. Еще есть переменная "Квалификация", значение которой задано только для одного Петрова.
В данном регистре атрибут (измерение) "Имя" принадлежит конкретному роду. Его значение всегда должно быть задано, и нет смысла в значении универсума в данном атрибуте. Нет смысла и в оценке релевантности такого атрибута, — присваиваем таким измерениям нулевой вес, — это отличает конкретные измерения от абстрактных.
А вот измерение "Пользователь" — наоборот, универсального рода. Отсутствие конкретного значения пользователя означает использование универсума "Все пользователи". А ссылка на конкретного пользователя (Иванов или Петров) — на самом деле интерпретируется как множество из одного элемента (Иванов).
Род атрибутов влияет на алгоритм релевантной выборки (соединения).
Единство и борьба противоположностей
Как указано в начале статьи, в операции выборки данных из некой таблицы участвуют две таблицы. Одна из них (источник данных) является данными, которые требуется извлечь, а вторая (входная таблица) задает параметры выборки (что именно нужно выбрать).
Если входная таблица состоит из одного кортежа, то входные данные можно рассматривать как вектор. Это наиболее частая ситуация на практике. Но в общем случае кортежей во входной таблице может быть несколько.
Релевантное соединение отличается от обычного соединения (по равенству значений) тем, что в нем используется операция "принадлежности элемента множеству". То есть с одной стороны должно быть множество (или множества), а с другой — значения множества.
Следствием является то, что род атрибутов таблиц, участвующих в релевантном соединении, является противоположным. Если в одной таблице соединяемый атрибут конкретного рода, то во второй род этого атрибута должен быть универсальным. И наоборот. Это свойство антисимметрии рода атрибутов релевантного соединения.
Поясняем. Пусть таблица-источник данных состоит из одного атрибута конкретного рода. В этом случае имеем дело с неким множеством значений. Например, это может быть множество разных слов. Тогда при релевантном соединении на входе необходимо задавать множества (слов). Таким множеством может быть значение 'я' — которое интерпретируется как все слова, оканчивающиеся на 'я'. Можно задать на входе множество из двух подмножеств — 'я' и 'а', — тогда в выборке должны оказаться все слова таблицы-источника, оканчивающиеся на 'я' или 'а'.
Противоположная ситуация — таблица-источник состоит из одного универсального атрибута. Например, содержит множества-значения слов. Такими значениями-множествами могут быть опять же окончания слов — ('я', 'а', 'ь', 'ль', 'рь', ...). Тогда входная таблица (множество) должна содержать конкретные значения слов (если вектор — то одно слово). Операция выборки вернет те окончания, которые соответствуют данному конкретному слову.
При релевантной выборке выполняется проверка принадлежности значения конкретного атрибута значению универсального. Независимо от того, в какой таблице (входной или источнике) находятся атрибуты, условие релевантности имеет вид:
Значение конкретного атрибута принадлежит значению универсального атрибута.
Еще раз подчеркнем, что конкретность или универсальность — это интерпретация значений атрибута. Если атрибут объявлен конкретным, то все его значения (даже если они кажутся множествами) становятся конкретными. И в операции релевантного соединения выступают на стороне элементов, а не множеств.
Алгоритм релевантного соединения
Обратимся к регистру "Значения переменных". Какие выборки из него имеют смысл? Самое очевидное — извлекать значение какой-либо переменной для заданного пользователя. Например, для извлечения значения переменной "Режим" для пользователя "Иванов" входная таблица будет такой:
Имя | Пользователь |
---|---|
Режим | Иванов |
Фактически это просто вектор (один кортеж). Обращаем внимание, что род атрибутов данной таблицы противоположен роду исходной. То есть тут атрибут "Имя" — универсальный, а атрибут "Пользователь" — конкретный.
Универсальность атрибута "Имя" означает, что его значения интерпретируются как множества. Значение имени "Режим" здесь — это множество из одного элемента. Пустое (не заданное) значение данного атрибута интерпретируется как универсум. Вот такой входной вектор, например,
Имя | Пользователь |
---|---|
? | Иванов |
означает выборку всех переменных, заданных для пользователя "Иванов".
Отбор релевантных значений
В результат соединения (выборки) должны входить значения конкретных атрибутов. То есть детерминант результата соединения должен состоять из конкретных значений. Это позволяет выполнить сортировку отобранных кортежей по релевантности в пределах значения детерминанта (ключа).
Так, после отбора релевантных кортежей таблицы "Значения переменных" по указанному выше вектору {Имя: ?, Пользователь: "Иванов"} получим ту же самую таблицу, но с заполненным значением пользователя:
№ | Имя | Пользователь | Значение | L | |
---|---|---|---|---|---|
1 | Режим | Иванов | 8 | 0 | |
2 | Режим | Иванов | 6 | 100 | |
3 | ДатаРождения | Иванов | 01.01.1980 | 0 | |
4 | ДатаРождения | Иванов | 15.02.1987 | 100 |
Оставляя для каждого значения ключа "Имя + Пользователь" наиболее релевантные кортежи, получаем искомые:
№ | Имя | Пользователь | Значение | L | |
---|---|---|---|---|---|
2 | Режим | Иванов | 6 | 100 | |
4 | ДатаРождения | Иванов | 15.02.1987 | 100 |
Рассмотрим более сложный пример. Допустим, надо выбрать значения переменных для двух пользователей — Иванова и Петрова. Тогда входная таблица будет содержать два вектора (кортежа):
Имя | Пользователь |
---|---|
? | Иванов |
? | Петров |
После выполнения операции релевантного соединения (определения принадлежности элементов множествам) получим промежуточную таблицу:
№ | Имя | Пользователь | Значение | L | |
---|---|---|---|---|---|
1 | Режим | Иванов | 8 | 0 | |
2 | Режим | Иванов | 6 | 100 | |
3 | ДатаРождения | Иванов | 01.01.1980 | 0 | |
4 | ДатаРождения | Иванов | 15.02.1987 | 100 | |
1 | Режим | Петров | 8 | 0 | |
5 | ДатаРождения | Петров | 09.12.2008 | 100 | |
6 | Квалификация | Петров | Средняя | 100 |
Оставляем кортежи с наибольшей релевантностью в пределах значения детерминанта (ключа):
№ | Имя | Пользователь | Значение | L | |
---|---|---|---|---|---|
2 | Режим | Иванов | 6 | 100 | |
4 | ДатаРождения | Иванов | 15.02.1987 | 100 | |
1 | Режим | Петров | 8 | 0 | |
5 | ДатаРождения | Петров | 09.12.2008 | 100 | |
6 | Квалификация | Петров | Средняя | 100 |
Эта таблица является результатом релевантной выборки по ключу.
Мягкие условия отбора
Мягкими условиями отбора называем такие, при которых атрибут, к значениям которого обращаемся, является конкретным. Соответственно параметры отбора являются универсальными — состоят из значений-множеств.
Обычно такая ситуация возникает при обращении к каким-то фактам, из которых надо выбрать подходящие под условия с разной степенью релевантности. То есть условия выборки (подбора) данных являются не жесткими, а желательными — мягкими.
В магазине покупатель может просить "красный цвет",- а если его нет — то любой. При покупке билетов (бронировании мест) покупателю желательна определенная дата, а если она недоступна, то ближайшая свободная. И т.д.
Мягкие условия отбора — это тоже релевантное соединение. Особенность лишь в том, что обычно в результате такой выборки оставляют все релевантные кортежи, а не только первый.
Продемонстрируем мягкие условия отбора при обращении к данным таблицы "Значения переменных". Пусть надо выбрать для пользователя Петрова переменную "Квалификация", а если ее нет — любую другую. Тогда таблица обращения (входная таблица) будет иметь вид:
Имя | Пользователь | Li | |
---|---|---|---|
? | Петров | 0 | |
Квалификация | Петров | 5 |
Обращаем внимание на соблюдение правила антисимметрии рода атрибутов таблиц. В таблице "Значения переменных" атрибут "Имя" является конкретным, поэтому во входной таблице он является универсальным. Наоборот, атрибут "Пользователь" в таблице переменных является универсальным, поэтому во входной таблице он должен быть конкретным (заданным).
При обращении к таблице фактов (а здесь таблица "Значения переменных" играет роль таблицы фактов, которые извлекаются) релевантность должна быть задана во входной таблице (если количество кортежей больше одного).
После операции выборки получаем таблицу, отсортированную по релевантностям входной таблицы и таблицы переменных:
№ | Имя | Пользователь | Значение | L | Li | |
---|---|---|---|---|---|---|
6 | Квалификация | Петров | Средняя | 100 | 5 | |
5 | ДатаРождения | Петров | 09.12.2008 | 100 | 0 | |
1 | Режим | Петров | 8 | 0 | 0 |
Особенности выборки значений, принадлежащих интервалу
В первой части уже были рассмотрены релевантные выборки, при которых множества задавались одной границей интервала. Там можно было заранее (до выборки) оценить мощность (и релевантность) интервалов, поскольку значения множеств интервалов содержались в атрибуте, к которому обращаются (измерение регистра правил).
При "мягкой выборке" иная ситуация — выбираются конкретные значения атрибута (факты), а на входе задан интервал релевантности. Например, известны даты отправления поездов (факты) и надо выбрать даты, принадлежащие заданному (пользователем) интервалу.
Как правило, необходимо не только выбрать даты, но и отсортировать их по релевантности — степени близости к заданной границе. Степень близости к границе обратно пропорциональна мощности интервала, образованного границей входного интервала и границей, задаваемой значением из выборки. Обычно значения выборки задают правое значение границы ("До"), а левое значение ("С") задается соответствующей границей входного интервала. Релевантность полученных интервалов можно оценить относительно входного интервала.
Допустим, имеем следующее множество дат отправления (факты): (15, 17, 23, 25, 30). Тогда выбирая из данного множества факты в интервале [20, 25], получим множество из двух интервалов: ([20, 23], [20, 25]). В соответствии с общим правилом релевантность меньшего интервала [20, 23] выше.
Заключение
Удивительно, что простые и интуитивно понятные вещи потребовали для относительно внятного описания столько букв.
Начальная цель работ была в том, чтобы зафиксировать математику, используемую при оценке релевантности выборки данных, содержащих универсумы. А также показать необходимость понимания и учета рода атрибутов таблиц. Интерпретация атрибутов как конкретных или универсальных позволяет дать определение абстрактной операции релевантного соединения.
Для чего все это нужно? В конечном счете — для уменьшения энтропии информационных систем. Если сравнить, например, реализацию какой-либо логики программным кодом или таблицами (регистрами) правил, то ясно, что таблицы намного менее энтропийны (к тому же декларативны, а не императивны). Понятия регистров правил, универсумов, релевантного соединения вполне себе вписываются в реляционную модель данных. Статьи показывают лишь, как их правильно готовить. Используйте!