суббота, 21 мая 2016 г.

MUMPS: Нормирование значений в индексах

Для индексирования данных важным моментом является понимание чувствительности атрибутов к регистру.

Ключевой операцией для использования индекса является обращение к искомому значению в глобал или локаль, и поиск выполняет непосредственно СУБД, поскольку значения индексов в MUMPS хранятся сортированно.

В обычных случаях используются значения атрибутов как есть. При этом, для того, чтобы найти необходимую запись в индексе, нужно чтобы она существовала в точности в том же виде. Если мы не предпринимаем никаких дополнительных мер, то такой индекс будет чувствителен к регистру. Или, иными словами, сравнение будет выполняться "как есть".

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

Традиционно, большинство систем баз данных использует приведение строк к верхнему регистру, но это необязательное правило.

Одна из проблем, вытекающих из построения регистронезависимого поиска - это то, что после приведения к единому регистру несколько различных значений могут стать равны, например:
Исходное       Нормированное
Шар            ШАР
шар            ШАР
ШАР            ШАР
и, в этом случае, при необходимости использовать такой индекс для поиска чувствительно к регистру, необходимо применять дополнительную операцию фильтрации. В ней нужно проверить равенство искомого атрибута атрибуту найденной записи.

Чувствительность к регистру является, вообще говоря, частным примером общей нормировки значений. При внесении данных в базу данных могут нормироваться как сами значения атрибутов, так и их индексные значения. Вот несколько распространенных примеров нормирования значений атрибутов:
  • Приведение к единому регистру
  • Отбрасывание лидирующих и завершающих пробельных символов
  • Замена последовательности пробельных символов на один пробел
  • Удаление непечатных символов
  • Капитализация названий


Разработчик должен самостоятельно решить, на каком из этапов должна производиться нормировка значений - при изменении значения атрибута или при вычислении индексного значения. Очевидно, что применение нормировки, если она использовалась хотя бы раз, далее всегда необходимо при обращении к индексу.

В случае применения нормированных значений индексов для уникального индекса разработчик должен принять соответствующие меры для разрешения конфликта - что является для базы данных уникальным - оригинальное значение атрибута или его нормированное представление. В такой ситуации традиционным выбором разработчиков является опора на оригинальное значение, и ведение в индексных записях в действительности неуникальных записей, и обеспечение уникальности не структурно, а алгоритмически. В любом случае, у разработчиков обычно есть выбор, что является более важным критерием - ведение уникальности собственно индекса или уникальности значений записей при сохранении нормированности.

Подробнее о книге "MUMPS СУБД"

Комментариев нет:

Отправить комментарий