Часто поиск в базе данных необходимо выполнять на основе определенных значений. Для этого вопроса учтите, что существует таблица с количеством ключей K = {K1, K2 ... Km}
и количеством мета-столбцов C = {C1, C2 ... Cn}
. Мета-столбцы не включены ни в один из ключей. Каковы элегантные и эффективные способы выполнения запроса, когда критерии поиска определены как S = {Ki, Cj1, Cj2 ... Cjh}
?
Разъяснения:
- Мета-столбец - это любой столбец, который не является частью ключа;
- S - это критерий поиска, который всегда содержит только один ключ и необязательные мета-столбцы для фильтрации;
Пример из реальной жизни (система обработки историй):
- Ключ: временной диапазон, story_id
- Мета-столбцы: заголовок, репортер, редактор, ...
Требуется, чтобы можно было выполнять поиск по любому из ключей с любым количеством дополнительных фильтров, предоставляемых для мета-столбцов.
Возможные решения:
- Одним из решений является использование динамического SQL. Это не является предпочтительным, учитывая эти причины .
- Использовать хранимые процедуры, по одной процедуре на ключ. Поскольку указывается только подмножество мета-столбцов, можно использовать выражения типа
table.column = NVL(paratemers.column, table.column)
для мета-столбцов. Я не уверен, точно ли Oracle оптимизирует эту часть запроса, чтобы избежать сравнения, когда parameters.column
равно NULL
- это часть вопроса. Если да, возможно, это решение проблемы.
Существуют ли элегантные решения, которые не жертвуют производительностью?