Возможно, вы захотите отсортированный словарь для каждого измерения, где KEY - это возможные элементы измерения, а VALUE - список идентификаторов.
OWNER_DICTIONARY = {
Bob: [1,5],
Jim: [2],
Sally: [3,4],
Will: []
}
COLOR_DICTIONARY = {
Blue: [5],
Green: [2],
Red: [],
Yellow: [1,3,4]
}
WEIGHT_DICTIONARY = {
Low: [1,2,4],
High: [3,5]
}
Затем вы просто используете ИНТЕРСЕКТ в ЗНАЧЕНИЯХ (список идентификаторов) ваших словарей. Если размер пересечения больше 0, у вас есть положительное совпадение.
Owner=Bob AND Weight=High
([1,5] UNION [3,5]) = [5]
Если одно из ЗНАЧЕНИЙ для ваших критериев (или одно из предыдущих ВЗАИМОДЕЙСТВИЙ) пусто [], вы можете сразу же замкнуть накоротко (вернуть ложное) без необходимости дальнейшей оценки.
В терминах базы данных вы должны поместить НЕКЛАСТЕРНЫЙ ИНДЕКС в каждое поле / столбец. и делает
EXISTS(SELECT ID FROM Table WHERE Col1=@Val1 AND Col2=@Val2 AND Col3=@Val3)
РЕДАКТИРОВАТЬ СОЮЗ -> ПЕРЕКЛЮЧЕНИЕ хороший улов @ElKamina