LINUX.ORG.RU

Приоритетная выборка данных

 


0

1

Привет!

Необходимо хранить данные в виде key-value, но значние может быть различным в зависимости от N «поправок» или «уточнений». Например ключ K, по умолчанию его значение V, если установлена поправка N1 — V1, если установлена N2 — V2, если установлены обе поправки — V12. Приоритет различных комбинаций поправок должен настраиваться. Как эту задачу представить в базе данных?

Вариант в лоб: таблица с колонками

 N1, N2, key, value 
и серия выборок:
SELECT value FROM tbl WHERE key = 'key' AND N1 = n1 AND N2 = n2;
...                                     AND N1 = n1 AND N2 IS NULL;
...                                     AND N1 IS NULL AND N2 = n2;
...                                     AND N1 IS NULL AND N2 IS NULL;

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

★★★★★

Витает мысль использовать некий весовой параметр для поправок, но в законченную идею мысля никак не разовьется.

staseg ★★★★★ ()

Мысля с весами поспела.

SELECT key, value, 
CASE WHEN N1 = 1 THEN 4
     ELSE 0
END +
CASE WHEN N2 = 1 THEN 2
     ELSE 0
END +
CASE WHEN N3 = 1 THEN 1
     ELSE 0
END as weight

Спасибо за внимание!

staseg ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.