2010-07-12 2 views
1

im сталкивается с проблемой оптимизации дизайна базы данных с помощью автоматизированного механизма. база данных будет включать таблицы, которые связывают произвольные данные с атрибутом , например. Таблица A содержит все идентификаторы лиц, которые нажали кнопку покупки, таблица B содержит все идентификаторы, у которых нет возврата, ....Как оптимизировать логическую функцию?

так даны некоторые очень простые MainTables, например. A, B, C, D, которые должны быть составлены с помощью операций теории множеств (объединение, пересечение, дополнение) с использованием какого-то GUI, что приводит к появлению новых подмножеств

при создании большего количества подмножеств, они все больше зависят друг от друга , например E = (A и B), F = (A и B и C) - оба являются логической функцией, а id лица находится в пределах этих наборов или нет.

теперь я пытаюсь оптимизировать запрос базы данных, который заполняет/запрашивает моя таблица так, что запрос не является F = (A join B join C), но F = (E join C), что имеет смысл. E имеет меньшее количество строк, поскольку его уже подмножество

Наконец, это означает, что im спрашивает, если таковые имеются, математический/программный алгоритм может оптимизировать мою проблему со многими наборами и подмножествами (может быть, несколько сотен), поэтому я могу быстро и эффективно заполнять таблицы

Я уже думал о создании новых подмножеств только с использованием информации MainSet и оптимизации эти GUI-созданные-Subs et, используя алгоритм Карно-Вейча, но это могло бы приводить, например, A и B и C. Я не знаю, как сделать второй шаг оптимизации для преобразования (A, B и C) в (E и C) и с еще большей сложностью, что приводит к проблеме нахождения наиболее эффективной комбинации (sub) Сет

ТНХ за любые советы

+0

им еще не уверен, но есть ответ, я думаю, что решение лежит в пределах вопроса. Я думаю, что он также может использовать KV для таких оптимизаций. Дело в том, чтобы включить все подмножества в процесс. Не только, например, MainSet. делать KV над A, B, C, E для (A и B и C) приведет к (E и C), потому что это будет маленький термин, но я не уверен, правильно ли это, что я сказал –

ответ

0

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

ID A B C 
--- -- -- -- 
1 1 0 1 
2 1 1 0 
etc... 

Это означает, что -й в базе данных сервера будет делать все оптимизации для вас:

-- Select all people in set A 
SELECT * FROM MyTable WHERE A = 1 

-- Select all people in set E 
SELECT * FROM MyTable WHERE A = 1 AND B = 1 

-- Select all people in set F 
SELECT * FROM MyTable WHERE A = 1 AND B = 1 AND C = 1 

(Я бы также рекомендовал дать столбцам лучшие имена)

+0

, что действительно отличная идея - плохо помните –

Смежные вопросы