Мой вопрос основан на среде T-SQL, SQL Server, но ее область применения не ограничивается этой технологией. Я работаю над базой данных с довольно сложной бизнес-логикой, с существующими представлениями, хранимыми процедурами и новыми для разработки. С помощью сравнений различных запросов или их части у меня есть сильное чувство, что есть секции, выполняющие ту же работу с другой компоновкой, но, конечно, для реорганизации всего беспорядка мне нужно что-то большее, чем чувство; поэтому я пытаюсь определить способ продемонстрировать, что два утверждения эквивалентны.Оценка эквивалентности запросов
Очевидным, но слабым ответом может быть удостовериться, что два запроса A и B производят один и тот же набор записей: если A является подмножеством B и B является подмножеством A, они являются одним и тем же набором записей; но я не уверен, что это хорошая идея, потому что, конечно, набор записей не является запросом, результаты могут зависеть от данных и значений конкретных параметров. Мои вопросы: есть способ доказать эквивалентность двух разных запросов? Я бы сказал, да, потому что оптимизация, выполняемая базой данных, должна работать над этим. Кто-то может предоставить мне некоторый указатель на документацию или книги, копающие в этом? Если нет общего метода доказательства эквивалентности, существует какой-то умный подход, основанный на регрессионном тестировании, выполненном в соответствии с некоторой эффективной эвристикой, которая выполняет эту работу?
Отредактировано позже: в случае, обратное проектирование запросов (вручную?) С помощью реляционной алгебры, может быть лучшим методом для оценки эквивалентности запроса вместо использования других запросов и/или компьютера? Есть автоматизированные инструменты, помогающие в выполнении этой «обратной инженерии», в случае?
Большое спасибо за помощь
http://stackoverflow.com/questions/4868364/how-to-prove-2-sql-statements-are-equivalent и http://dl.acm.org/citation.cfm?id=111212&dl= –