Индекс на вычисляемый атрибут - это индексная поисковая структура, использующая
не хранимые значения атрибутов, а вычисляемые на основе значения одного или
совокупности значений нескольких атрибутов. Индексная структура соответствует
обычному индексу, но отображает на набор идентификаторов условный виртуальный
атрибут, значение которого вычисляется.
При индексировании вычисляемых атрибутов используется соглашение, что одним и тем же правилом вычисления должны пользоваться функции вставки и удаления индексной записи. Это необходимо для того, чтобы поддержка поисковых структур была корректной. При этом функция вычисления значения такого вычисляемого атрибута должна зависеть лишь от значений другого или совокупности других атрибутов. Это требуется для корректного удаления индексной записи и при обновлении строки данных.
Индексация вычисляемых атрибутов имеет характеристики:
Поиск по специфически заданному условию на хранимый атрибут
Например если у объекта есть атрибут дата, но поиск накладывает ограничения на день недели. В этом случае мы можем поддерживать индекс по вычисляемому атрибуту "день недели", значение которого вычисляется на основе поля даты.
Сортировка объектов в сложном порядке
Например, вывод объектов имеющих иерархическую организацию взаимного отношения. При поддержке индекса, ориентированного на специальную сортировку, мы можем многократно использовать хранимый индекс вместо того, чтобы строить его каждый раз.
Поиск по значениям атрибутов подчиненных объектов
В этом случае значения подчиненных объектов рассматриваются как основа для вычисления вычисляемого атрибута. Поиск может выполняться наложением условия как на значение атрибута индексируемого объекта, так и на значения подчиненных объектов одновременно, что позволяет путем поддержки пусть и сложной функции вычисления вычисляемого атрибута добиться очень простого и быстрого поиска.
Реализация быстрого сложного поиска
Возможность вычислять значение вычисляемого атрибута позволяет объединить в функции вычисления довольно сложное условие, в том числе «тяжелые» для поиска операции, например логическое ИЛИ и использовать небольшое утяжеление действий по поддержке такого индекса, но существенно выиграть при поиске данных.
Индексация вычисляемого атрибута может быть выполнена также во многих не-MUMPS системах баз данных путем добавления еще одного хранимого атрибута и поддержкой индекса для него. Этот добавляемый атрибут просто должен автоматически поддерживаться в соответствующем состоянии триггерами. При изменении значений атрибутов, на основе которых вычисляется этот дополнительный атрибут, триггеры просто должны обновить его значение. В этой ситуации хранение дополнительного атрибута просто технически избыточно и логически необязательно, хотя во многих системах баз данных оно и не может быть полностью устранено.
Один из примеров применения вычисляемых атрибутов - вхождение объекта в иерархическое отношение с другими объектами. Например, если в системе вводится условное деление значений атрибутов на группы. В обычном варианте применяется введение дополнительной связывающей таблицы, отображающей номер группы на допустимые значения, входящие в нее. При этом возникает проблема поддержки полного перечня такого отображения, и, кроме того, при выборке возникает относительно тяжелая операция соединения двух таблиц. В то время как введение вычисляемого атрибута и индексация по нему решает вопрос поиска наиболее элегантным образом.
Кроме технических проблем в данном случае упрощается сопровождение и развитие системы - со временем сложность классификации может быть существенно изменена, и в классификацию может попасть очень сложное условие, поддерживать же в этом случае структуру данных для отображения будет еще сложнее, если вообще это будет целесообразно.
Подробнее о книге "MUMPS СУБД"
При индексировании вычисляемых атрибутов используется соглашение, что одним и тем же правилом вычисления должны пользоваться функции вставки и удаления индексной записи. Это необходимо для того, чтобы поддержка поисковых структур была корректной. При этом функция вычисления значения такого вычисляемого атрибута должна зависеть лишь от значений другого или совокупности других атрибутов. Это требуется для корректного удаления индексной записи и при обновлении строки данных.
Индексация вычисляемых атрибутов имеет характеристики:
- Значение индексируемого атрибута не хранится.
- Функция вычисления может быть довольно сложной.
- Функция вычисления может приводить вычисляемое значение к индексной сортировке.
- Функция вычисления может использовать не только логические атрибуты самой строки данных, но и атрибуты других объектов, жестко с ней связанных.
Поиск по специфически заданному условию на хранимый атрибут
Например если у объекта есть атрибут дата, но поиск накладывает ограничения на день недели. В этом случае мы можем поддерживать индекс по вычисляемому атрибуту "день недели", значение которого вычисляется на основе поля даты.
Сортировка объектов в сложном порядке
Например, вывод объектов имеющих иерархическую организацию взаимного отношения. При поддержке индекса, ориентированного на специальную сортировку, мы можем многократно использовать хранимый индекс вместо того, чтобы строить его каждый раз.
Поиск по значениям атрибутов подчиненных объектов
В этом случае значения подчиненных объектов рассматриваются как основа для вычисления вычисляемого атрибута. Поиск может выполняться наложением условия как на значение атрибута индексируемого объекта, так и на значения подчиненных объектов одновременно, что позволяет путем поддержки пусть и сложной функции вычисления вычисляемого атрибута добиться очень простого и быстрого поиска.
Реализация быстрого сложного поиска
Возможность вычислять значение вычисляемого атрибута позволяет объединить в функции вычисления довольно сложное условие, в том числе «тяжелые» для поиска операции, например логическое ИЛИ и использовать небольшое утяжеление действий по поддержке такого индекса, но существенно выиграть при поиске данных.
Индексация вычисляемого атрибута может быть выполнена также во многих не-MUMPS системах баз данных путем добавления еще одного хранимого атрибута и поддержкой индекса для него. Этот добавляемый атрибут просто должен автоматически поддерживаться в соответствующем состоянии триггерами. При изменении значений атрибутов, на основе которых вычисляется этот дополнительный атрибут, триггеры просто должны обновить его значение. В этой ситуации хранение дополнительного атрибута просто технически избыточно и логически необязательно, хотя во многих системах баз данных оно и не может быть полностью устранено.
Один из примеров применения вычисляемых атрибутов - вхождение объекта в иерархическое отношение с другими объектами. Например, если в системе вводится условное деление значений атрибутов на группы. В обычном варианте применяется введение дополнительной связывающей таблицы, отображающей номер группы на допустимые значения, входящие в нее. При этом возникает проблема поддержки полного перечня такого отображения, и, кроме того, при выборке возникает относительно тяжелая операция соединения двух таблиц. В то время как введение вычисляемого атрибута и индексация по нему решает вопрос поиска наиболее элегантным образом.
Кроме технических проблем в данном случае упрощается сопровождение и развитие системы - со временем сложность классификации может быть существенно изменена, и в классификацию может попасть очень сложное условие, поддерживать же в этом случае структуру данных для отображения будет еще сложнее, если вообще это будет целесообразно.
Подробнее о книге "MUMPS СУБД"
Комментариев нет:
Отправить комментарий