|
Программирование >> Проектирование баз данных
Обработка временных данных в :нпо11 главе: Л/юблема времен пыл-данных Вопросы нроентнрованнп временных 6a:i данных Времснтяс данные: j)c:iio.vc Временные данные, или временные ряды, - это данные, содержащие даты и время. Как мы упоминали в главе 5, посвященной типам данных Oracle, временные данные ставят перед проектировщиком базы данных ряд проблем. Нащ собственный опыт показал, что неправилыгая обработка временных данных может быть одной из основных причин серьезных проблем с производительностью и функциональностью в Oracle-системах. Проблема временных данных Почему временные данные так трудно обрабатывать? Главная причина состоит в том, что эти данные не очень хорошо вписываются в двумерную реляционную модель. Вследствие этого в большинстве случаев мы не можем использовать для поиска и выборки данных сравнение на равенство. Несмотря на то, что SQL поддерживает соединения, которые не основаны на равенстве, при реализации, как правило, отдается предпочтение эквисоеди-нениям, и подход Oracle - не исключение, хотя, честно говоря, компания недавно добавила поддержку антисоединений с целью содействия обработке определенных типов запросов к хранилищам данных. Для временных данных часто требуется соединять таблицы на базе перекрытия одного диапазона дат и другим. В SQL нет операции, позволяющей непосредственно задать такое соединение, поэтому его реализация сложна для программирования и неэффективна в плане выполнения. (Кроме того, чем больше используется неопределенных значений, тем сложнее становится код.) Эта глава посвящена вопросам проектирования, связанным с временными данными. В рассматриваемых нами случаях данные обладают характеристикой, называемой действительностью по дате. Это означает, что конкретные данные (часто один атрибут) действительны только определенный период времени. Из этого следует, что некоторые атрибуты, например цена, изменяются во времени, и мы должны спроектировать базу так, чтобы их обработка осуществлялась не только по текущим значениям, а и с учетом времени. Поскольку в большинстве случаев мы не можем выбирать временные данные, используя сравнение на равенство, в этой главе описан ряд предлагаемых в Oracle? методов, позволяющих преодолеть эти налагаемые реляционной моделью ограничения. В некоторых ситуациях мы приводим два решения проблемы. Первое (и предпочтительное) - это, как правило, процедурное, когда в программах на PL/SQL используются возможности SQL. Второе решение основано исключительно на SQL и, следовательно, является непроцедурным. Рекомендуя для временных данных процедурные решения, мы понимаем, что использование PL/SQL - не всегда приемлемый вариант. Если вы пользуетесь таким продуктом, как Oracle Forms, то достаточно легко заменить все DML-операции вызовами пользовательских хранимых процедур, но очень трудно таким вызовом заменить неявный запрос (запрос к базовой таблице блока формы). Примечание Можно, хотя это и не очень просто, заставить Oracle Forms выдать вместо запроса к таблице вызов процедуры на PL/SQL. В некоторых случаях этот труд будет хорошо вознагражден повышением производительности, если речь идет об Oracle версии ?. 1 и выше (которая допускает динамический SQL внутри PL/SQL). Другой, менее удовлетворительный, вариант - блок в форме построить на представлении, которое вызывает для возврата данных определенные пользователем функции PL/SQL. Использование специальных процессоров Многие проблемы обработки временных данных можно решить, используя новые процессоры базы данных, которые реализуются с помощью продукта Universal Server, входящего в комплект Oracle версии ?.3. К эти процессорам относятся: Процессор динамического интерактивного анализа данных (ОЬАР-процес-сор), позволяющий ускорить подготовку отчетов по нескольким измерениям, или осям. Например, объем розничных продаж можно представить как объем продаж по типам торговых предприятий, а не по видам продукции или как валовую прибыль по регионам и по дням недели. Многомерный процессор, который применяется в основном для обработки географических и геофизических данных. Он обеспечивает поиск в нескольких измерениях. Например, можно найти все образцы породы с содержанием окиси железа более 0,1%, взятые в Северном море на глубине свыше 100 ярдов. В этом запросе используются следующие измерения: широта, долгота и расстояние от поверхности. Поскольку время также является измерением, то этот процессор можно очень эффективно использовать при решении проблем временных данных, изложенных в этой главе. В частности, наличие в этом продукте пространственной опции позволяет выполнять проверку диапазонов с помощью специальных столбцов типа hhcode (в которых можно объединять значения других столбцов), избегая проблем с перерасходом индекса для запроса этого типа. (Мы поясним это ниже.) Эти дополнительные средства не являются простыми расширениями SQL-сервера СУБД Oracle - они используют собственные хранилища данных. Обеспечить хранение и обработку временных данных требуется практически во всех проектах, но далеко не во всех случаях можно обосновать необходимость использования специализированных серверов. Поэтому в этой главе делается акцент на решениях, которые доступны проектировщикам, чьи системы поддерживает только традиционный сервер. Пример с временными данными Давайте рассмотрим простой пример с временными данными. Возьмем таблицу, отражающую динамику цен на некоторые товары. Предположилг, что цены в любой момент могут изменяться, поэтому для учета этого необходимо хранить действительный диапазон данных о каждой цене. По временному ряду для данного продукта (табл. 7.1) легко установить, что в период рождественских праздников 1985 г. цена данного товара не была установлена. Для этого достаточно просмотреть этот список, найти последнюю строку, в которой дата начала периода меньше даты Рождества 1985 г., и проверить дату конца периода. Таблица 7.1. Фрагмент страницы из книги учета цен
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |