ДОСТУП К СЛОЖНЫМ ДАННЫМ
ACCESSING COMPLEX DATA

Область техники, к которой относится изобретение
Настоящее изобретение относится, в общем, к области программных приложений. В частности, настоящее изобретение относится к программным приложениям для хранения и сообщения данных, таким как базы данных. Еще более конкретно, аспекты настоящего изобретения относятся к сохранению и запрашиванию данных в таких программных приложениях.
Описание предшествующего уровня техники
Для управления большими объемами данных разработаны программные приложения, такие как приложения работы с крупноформатными таблицами и базами данных, позволяющие организовать и хранить эти данные логическим образом. Типичные приложения работы с крупноформатными таблицами и базами данных содержат большое количество записей информации, каждая из которых имеет заранее определенное количество полей. В контексте базы данных обычно используется система управления базами данных, обеспечивающая программные инструментальные средства, которые упрощают работу с базой данных. Примерные системы управления базами данных включают в себя, помимо прочего, Microsoft Access и Miscrosoft SQL Server. Базы данных обычно позволяют пользователям создавать взаимосвязи сложных данных, которых нет в крупноформатных таблицах, что повышает их производительность, но при этом еще больше усложняется освоение приложений работы с базами данных для новых пользователей.
Типичная система управления базами данных позволяет пользователю добавлять, изменять или удалять данные, запрашивать данные с использованием фильтров, а также позволяет сообщать о записях в базе данных. Данные в базах данных обычно представляются с помощью строк и столбцов. Пересечение строки и столбца является полем. Обычно любое заданное поле может содержать всего одно скалярное значение данных. Запросы данных обычно формируются с помощью языка запросов, такого как язык структурированных запросов (SQL). Такие запросы можно выполнять в отношении локально хранимых данных или подавать в сервер базы данных для выполнения.
В некоторых случаях база данных может содержать иерархию данных вместо простой таблицы значений. Например, в приложении для контроля выполнения производственных вопросов каждый вопрос может быть поручен одному или более работникам. Поэтому пользователь должен моделировать этот вид иерархии, используя множество связанных таблиц, и запрашивать такие таблицы, используя относительно сложные запросы, в которых соединяются данные из множества таблиц. Более конкретно, может существовать одна таблица производственных вопросов и другая таблица работников, включающая всех возможных работников, которым может быть поручен какой-то вопрос, и, наконец, таблица связей, связывающая вопросы с работниками, которым они поручены. Создание такой иерархии таблиц может быть трудоемким и запутанным для пользователя, особенно если он еще не вполне освоил приложения работы с базами данных. Запрашивание данных по такой иерархии также может быть проблематичным из-за сложного характера многотабличных запросов, особенно если у пользователя нет глубоких знаний языка запросов.
Настоящее изобретение было создано с учетом перечисленных выше и других проблем.
Краткое изложение сущности изобретения
Согласно настоящему изобретению предложены реализуемый в вычислительной машине способ и машиночитаемый носитель для добавления сложных данных в концептуальную таблицу. Под концептуальной таблицей подразумевается таблица, которая содержит по меньшей мере один сложный тип данных. Сложный тип данных представляет собой один или более скалярных столбцов и/или другие сложные типы, которые "сгруппированы" вместе с образованием единого нового типа данных. Сначала принимают сигнал на добавление сложного типа данных в таблицу. Затем создают одну или более таблиц данных. Кроме того, в концептуальной таблице создают связи с упомянутыми одной или более таблицами данных.
Согласно другим аспектам настоящее изобретение относится к реализуемому в вычислительной машине способу и машиночитаемому носителю для моделирования данных в концептуальной таблице. Сначала принимают сигнал сохранить одно или более значений данных. Анализируют структуру концептуальной таблицы и определяют одно или более отображений на одну или более таблиц данных. И, наконец, данные сохраняют в упомянутых одной или более таблицах данных.
Согласно другим аспектам настоящее изобретение относится к реализуемому в вычислительной машине способу и машиночитаемому носителю для расширения запроса концептуальной таблицы. Сначала принимают запрос концептуальной таблицы. Затем анализируют структуру концептуальной таблицы и применяют к запросу одно или более правил расширения. И, наконец, выдают расширенный запрос.
Согласно следующим аспектам настоящее изобретение относится к реализуемому в вычислительной машине способу и машиночитаемому носителю для выполнения курсорной адресации в концептуальной таблице. Сначала принимают сигнал на доступ к сложным данным в концептуальной таблице. Считывают одно или более отображений, ассоциированных с этими сложными данными. И, наконец, считывают скалярные данные из одной или более таблиц данных с использованием этих отображений.
Согласно другим дополнительным аспектам настоящее изобретение относится к системе для моделирования концептуальной таблицы. Модуль моделирования данных добавляет сложные таблицы в таблицу и сохраняет сложные данные в одной или более таблиц данных. Модуль расширения запроса расширяет запросы концептуальной таблицы с целью включения в них одного или более запросов таблиц данных. Модуль курсорной адресации извлекает сложные данные в концептуальной таблице.
Изобретение можно реализовать в виде процесса в вычислительной машине, вычислительной системы или изделия, такого как программный продукт для вычислительной машины или машиночитаемый носитель. Машиночитаемый носитель может быть компьютерным носителем информации, считываемым вычислительной системой и кодирующим программу, составленную из команд вычислительной машины, предназначенную для выполнения процесса вычислительной машины. Машиночитаемый носитель может также быть распространяемым на несущей сигналом, считываемым вычислительной системой и кодирующим программу, составленную из команд вычислительной машины, предназначенную для выполнения процесса вычислительной машины.
Эти и другие признаки, а также преимущества, которые характеризуют настоящее изобретение, будут очевидны после прочтения следующего подробного описания и анализа прилагаемых чертежей.
Перечень фигур чертежей
Фиг.1 - среда базы данных, в которой может быть реализовано настоящее изобретение;
фиг.2 - пример подходящей среды вычислительной системы, в которой может быть реализовано настоящее изобретение;
фиг.3 - иллюстрация модулей, содержащихся в одном варианте осуществления настоящего изобретения;
фиг.4 - иллюстрация последовательности операций, выполняемых в соответствии с вариантом осуществления настоящего изобретения;
фиг.5 - иллюстрация последовательности операций, выполняемых в соответствии с вариантом настоящего изобретения;
фиг.6 - иллюстрация последовательности операций, выполняемых в соответствии с вариантом настоящего изобретения;
фиг.7 - иллюстрация последовательности операций, выполняемых в соответствии с вариантом настоящего изобретения.
Подробное описание изобретения
На фиг.1 показан моментальный снимок экрана, иллюстрирующий табличный вид 102 базы данных для заказа продукции в системе управления базами данных. Таблица 102 состоит из строк и столбцов данных. Каждая строка данных обычно содержит одну запись данных. Как правило, каждый столбец данных в базе данных предположительно включает в себя элементы данных однородного типа. Например, столбец 104 "идентификатор (ИД) заказа" содержит элементы данных в цифровом формате, столбец 106 "Клиент" содержит данные в виде буквенно-цифровых последовательностей, столбец 108 "Дата заказа" содержит данные в формате даты и т.д. Столбец "ИД заказа" одной записи соответствует полю "ИД заказа" этой записи. Таким образом, группа полей может представлять собой столбец. Специалистам в данной области техники будет понятно, что в базе данных можно хранить много других видов данных и отображать их с помощью таблицы в системе управления базами данных. Настоящее изобретение позволяет моделировать сложную иерархию данных с помощью концептуализации простой таблицы базы данных (которая имеет вид, подобный таблице 102 базы данных, но другую структуру), освобождая тем самым пользователей от бремени формирования сложных запросов к множеству таблиц и многократных переходов между множеством таблиц для просмотра и работы с данными.
Настоящее изобретение можно реализовать в виде вычислительной системы; на фиг.2 показан пример подходящей среды вычислительной системы, в которой можно реализовать варианты осуществления изобретения. В этой наиболее стандартной конфигурации система 200 содержит по меньшей мере один процессорный блок 202 и память 204. В зависимости от точной конфигурации и вида вычислительного устройства память 204 может быть энергозависимой (например, ОЗУ), энергонезависимой (например, ПЗУ, флэш-память и т.п.) или их комбинацией. Эта наиболее стандартная конфигурация обведена на фиг.2 штриховой линией 206.
В дополнение к памяти 204 система может содержать еще по меньшей мере одну другую форму машиночитаемого носителя. Машиночитаемыми носителями могут быть любые имеющиеся носители, к которым может осуществлять доступ система 200. Например, без ограничения перечисленным, машиночитаемые носители могут быть компьютерными носителями информации и коммуникационными средами.
Компьютерные носители информации включают в себя энергозависимые и энергонезависимые, съемные и несъемные носители, реализованные с применением любого метода или технологии хранения информации, например машиночитаемых команд, структур данных, программных модулей или других данных. Примерами компьютерных носителей информации являются память 204, съемное запоминающее устройство 208 и несъемное запоминающее устройство 210. Компьютерные носители информации включают в себя, без ограничения перечисленным, ОЗУ, ПЗУ, электрически программируемое ПЗУ (ЭППЗУ), электрически стираемое программируемое ПЗУ (ЭСППЗУ), флэш-память или память другой технологии, CD-ROM, цифровые универсальные диски (DVD) или другие оптические запоминающие устройства, магнитные кассеты, магнитную ленту, магнитные диски или другие магнитные запоминающие устройства или любые другие носители, которые можно использовать для хранения требуемой информации и к которым может осуществлять доступ система 200. Любые такие компьютерные носители информации могут быть частью системы 200.
Система 200 может также содержать коммуникационное соединение (соединения) 212, которое позволяет системе осуществлять связь с другими устройствами. Коммуникационное соединение (соединения) 212 является примером коммуникационной среды. Коммуникационные среды обычно воплощают машиночитаемые команды, структуры данных, программные модули или другие данные в модулированном информационном сигнале, таком как несущая волна или другой механизм транспортировки, и включают в себя любые среды доставки информации. Термин "модулированный информационный сигнал" означает сигнал, одна или более характеристик которого установлены или изменяются таким образом, чтобы кодировать информацию в этом сигнале. Например, без ограничения перечисленным, коммуникационные среды включают в себя проводные среды, например проводную сеть или прямое проводное соединение, и беспроводные среды, например акустические, радиочастотные, инфракрасные или другие беспроводные среды. Термин "машиночитаемый носитель" в данном контексте охватывает как носители информации, так и коммуникационные среды.
Согласно одному варианту осуществления изобретения система 200 содержит периферийные устройства, такие как устройство (устройства) ввода 214 и устройство (устройства) вывода 216. Примерные устройства ввода 214 включают в себя, без ограничения перечисленным, клавиатуру, мышь, перо, устройство речевого ввода, устройство тактильного ввода и т.д. Примерные устройства вывода 216 включают в себя, без ограничения перечисленным, дисплеи, динамики и принтеры. Для целей настоящего изобретения под дисплеем подразумевается первичное устройство вывода. Каждое из этих устройств широко известно и поэтому не будет описываться подробно.
Имея в виду изложенную вычислительную среду, следующие чертежи будут описаны со ссылками на логические операции, выполняемые для реализации процессов, воплощающих различные варианты осуществления настоящего изобретения. Эти логические операции реализуются (1) в виде последовательности реализуемых в вычислительной машине операций или программных модулей, выполняемых в вычислительной системе, и/или (2) в виде соединенных между собой схем машинной логики или схемных модулей в вычислительной системе. Выбор формы реализации зависит от требований технических характеристик вычислительной системы, в которой реализуется изобретение. Соответственно, описанные логические операции, воплощающие варианты осуществления настоящего изобретения, называются по-разному: операции, конструктивные блоки, действия или модули. Специалистам будет понятно, что эти операции, конструктивные блоки, действия и модули могут быть реализованы в программных средствах, программно-аппаратных средствах, в специализированной цифровой логике и любой их комбинации, не выходя за рамки объема притязаний настоящего изобретения, охарактеризованного в прилагаемой формуле изобретения.
На фиг.3 показаны модули согласно одному варианту осуществления настоящего изобретения. Модуль пользовательского интерфейса позволяет пользователям просматривать, изменять, запрашивать или иным образом воздействовать на данные. Пользователь взаимодействует с модулем 304 моделирования данных, модулем 306 расширения запроса и модулем 308 курсорной адресации через модуль 302 пользовательского интерфейса. Аналогично данные из модулей 304, 306 и 308 выводятся на дисплей посредством модуля 302 пользовательского интерфейса.
Пользовательский интерфейс 302 передает параметры табличной иерархии в модуль 304 моделирования данных и может также принимать сигнал обратной связи из модуля 304 моделирования данных, чтобы помочь пользователю при дальнейшем определении или изменении таблиц. Модуль 302 пользовательского интерфейса передает запросы пользователя в модуль 306 расширения запроса и аналогично принимает результаты запроса из модуля 306 расширения запроса. Модуль 302 пользовательского интерфейса передает запросы на данные от пользователя в модуль 308 курсорной адресации для извлечения данных и принимает извлеченные данные из модуля 308 управления курсорной адресации.
В одном варианте осуществления модуль 302 пользовательского интерфейса непосредственно визуализирует данные, возвращенные из одного или более модулей 304, 306 и 308, на дисплее. В альтернативном варианте осуществления модуль 302 пользовательского интерфейса использует интерфейсы прикладного программирования (API) для обновления дисплея.
Модуль 304 моделирования данных позволяет создавать и изменять концептуальную таблицу. Под концептуальной таблицей подразумевается таблица данных, которая может содержать сложные (не скалярные) данные в виде другой таблицы, а также сложные данные. Таблица данных обычно содержит только скалярные данные и может включать в себя числа, буквенно-цифровые последовательности, дроби и т.п. Сложные данные могут включать в себя одну или более вложенных таблиц, которые сами по себе могут содержать дополнительные уровни вложенных таблиц. Концептуальная таблица может содержать произвольное количество таких иерархически связанных таблиц. При этом заданное поле в концептуальной таблице может физически отображаться в поле в другой таблице. Кроме того, это физическое отображение и его последствия могут быть полностью прозрачными для пользователя. Модуль 304 моделирования данных может принимать параметры, задаваемые пользователем для концептуальной таблицы, из пользовательского интерфейса 302.
В одном варианте осуществления изобретения концептуальная таблица хранится в виде одной или более таблиц данных, содержащих скалярные данные. Значения скалярных данных, которые существуют только в концептуальной таблице, хранятся в таблице данных, специально выделенной для неотображенных скалярных значений. Одно или более значений данных, которые физически отображаются в таблицу данных, "дробятся" модулем 304 моделирования данных так, чтобы эти значения данных физически хранились в таблице 310 данных. В результате пользователь должен работать всего с одной концептуальной таблицей, а сложности преобразования концептуальной таблицы во множество иерархических таблиц для хранения прозрачны для пользователя. Аналогично реализация дробления не обязательно придает дополнительную сложность средству хранения базы данных или процессору запросов к базе данных.
В одном варианте осуществления изобретения значения данных в концептуальной таблице дробятся на соответствующие таблицы данных, когда в таблицу добавляется сложный столбец. В альтернативном варианте осуществления значения данных в концептуальной таблице дробятся на соответствующие таблицы данных, когда от пользователя поступает команда на сохранение. В еще одном варианте значения данных в концептуальной таблице дробятся на соответствующие таблицы данных каждый раз, когда обнаруживается изменение значения.
Модуль 306 расширения запроса принимает запрос концептуальной таблицы из модуля 302 пользовательского интерфейса и расширяет этот запрос на основе иерархической структуры концептуальной таблицы. В одном варианте осуществления модуль 306 расширения запроса расширяет запрос на основе иерархической структуры концептуальной таблицы, используя набор правил, определенных разработчиком. Примерный набор правил расширения запроса будет показан ниже в таблицах 1-12.
В альтернативном варианте осуществления изобретения модуль 306 расширения запроса расширяет запрос путем "соединения" (в терминологии области баз данных этот термин используется в значении, аналогичном "объединению") подгруппы релевантных таблиц данных в единую таблицу данных, а затем выполняет запрос концептуальной таблицы в отношении этой единой таблицы данных. В другом альтернативном варианте осуществления модуль 306 расширения запроса расширяет запрос путем соединения всех таблиц 310 данных, связанных концептуальной таблицей, независимо от релевантности в единую таблицу данных, а затем выполняет запрос концептуальной таблицы в отношении этой единой таблицы данных.
В одном варианте осуществления изобретения модуль 306 расширения запроса выполняет запросы непосредственно в отношении таблиц 310 данных. В альтернативном варианте осуществления модуль 306 расширения запроса передает расширенный запрос в сервер базы данных для исполнения. Такой вариант не обязательно требует каких-либо изменений в процессоре запросов или сервере базы данных.
Модуль 308 курсорной адресации позволяет осуществлять чтение концептуальной таблицы и перемещение (навигацию) по ней. При приеме сигнала открыть концептуальную таблицу через пользовательский интерфейс 302 модуль 308 управления курсорной адресации анализирует любые существующие отображения в таблицы данных. Извлечение значений скалярных данных из этих таблиц данных осуществляется с использованием упомянутых отображений, и значения скалярных данных возвращаются в пользовательский интерфейс 302 для вывода на дисплей.
Если пользователь выбирает поле концептуальной таблицы, содержащее таблицу данных, то осуществляет обращение к табличным отображениям в этом поле. Снимается мгновенный образ таблиц данных, на которые имеется отображение, и результаты выводятся на дисплей в концептуальной таблице. В одном варианте осуществления таблицы данных, на которые имеется отображение, также блокируются от редактирования, чтобы их содержание нельзя было изменить. В альтернативном варианте осуществления эти таблицы данных, на которые имеется отображение, не блокируются, а вместо этого периодически проверяются на наличие обновлений, которые должны быть распространены в выводимую на дисплей концептуальную таблицу.
Специалистам в данной области техники будет понятно, что хотя в примерных вариантах осуществления, представленных в связи с фиг.3, использована концептуальная таблица, которая может содержать таблицы данных, может применяться произвольное количество уровней опосредованности, не выходя за рамки объема настоящего изобретения. Например, концептуальная таблица может содержать одну или более концептуальных таблиц, которые сами по себе могут содержать другие концептуальные таблицы. В этой ситуации необходимо принять меры, чтобы исключить возникновение бесконечного цикла, а именно обращения (прямого или косвенного) концептуальной таблицы к самой себе, которое создает бесконечное количество уровней опосредованности.
В одном варианте осуществления изобретения модуль 304 моделирования данных может выполнять сохранение данных атомарно. Это означает, что при любой попытке сохранения заданных данных обновляются либо все таблицы данных, либо ни одна из них. Это позволит исключить считывание данных, когда таблицы данных находятся в переходном состоянии. Атомарные записывания в таблицах данных можно реализовать посредством семафора, блокировки файлов или другого известного метода, а также можно дополнительно ввести откат (отмену одного или более незаконченных записываний).
На фиг.4 показана последовательность операций согласно одному варианту осуществления изобретения, в котором создается концептуальная таблица. В операции 402 приема принимают от пользователя сигнал на добавление сложного типа данных в существующую таблицу или в концептуальную таблицу. Этот сигнал может быть принят от пользователя через пользовательский интерфейс, от автоматизированного процесса вычислительной машины или другого источника ввода. Прием сигнала инициирует операцию 404 создания по меньшей мере одной таблицы данных.
В операции 404 создания создается по меньшей мере одна таблица данных, содержащая любые скалярные значения, ассоциированные со сложными данными. Данные, введенные в поле сложных данных, будут раздроблены в соответствующую таблицу данных при сохранении концептуальной таблицы. В одном варианте осуществления каждая создаваемая таблица данных принимает форму одного или более файлов базы данных. В другом варианте осуществления каждая создаваемая таблица данных принимает форму структуры данных в одном или более файлах базы данных. В еще одном варианте осуществления операция 404 создания дополнительно инициализирует одно или более скалярных значений значением по умолчанию в каждой создаваемой таблице данных. В одном варианте осуществления, когда уже существует подходящая таблица данных, операцию 404 создания можно пропустить и просто связать с ней таблицу данных.
После операции 404 создания в операции 406 связывания добавляется одна или более связей с концептуальной таблицей, соответствующих одной или более таблицам данных, созданных в операции 404 создания. Можно использовать связь для определения положения таблицы данных, когда посредством курсорной адресации выбирается поле сложных данных (как описано выше в связи с фиг.3 и ниже в связи с фиг.7). Можно также использовать связь для определения положения таблицы данных, когда добавляется или изменяется скалярное значение в поле сложных данных (как было описано выше в связи с фиг.3).
В операции 408 определения определяют, требуются ли дополнительные таблицы для размещения сложных данных. Если требуются дополнительные таблицы, ветвь "ДА" возвращает процесс обратно к операции 404 создания. Если больше таблиц не требуется, ветвь "НЕТ" направляется к концу процесса 410.
После достижения конца процесса 410 сложные данные можно просматривать или воздействовать на них посредством курсорной адресации (как описано выше в связи с фиг.3 и ниже в связи с фиг.7) и сохранять путем дробления (как описано выше в связи с фиг.3 и ниже в связи с фиг.5).
В одном варианте осуществления изобретения можно вставить в концептуальную таблицу существующую таблицу данных. В таком варианте осуществления в операции верификации (не показана) можно удостовериться в наличии этой таблицы данных, и тогда операция 404 создания будет пропущена.
На фиг.5 показана последовательность операций согласно одному варианту осуществления настоящего изобретения, в которой данные из концептуальной таблицы дробятся и сохраняются в одной или более соответствующих таблиц данных.
В операции 502 приема принимают сигнал на сохранение одного или более значений сложных данных, ассоциированных с концептуальной таблицей. Этот сигнал может быть результатом явного сохранения пользователем данных в приложении управления базами данных. Альтернативно сигнал может быть принят от автоматизированного процесса, который синхронизирует измененные данные. Прием сигнала в операции 502 приема инициирует операцию 504 анализа.
В операции 504 анализа анализируют концептуальную таблицу, через которую сохраняют значения сложных данных, и определяют структуру концептуальной таблицы. На основе этих структурных данных в операции 506 определения определяют одно или более отображений в местоположения в таблице данных. Эти отображения могут иметь форму набора координат таблицы данных, указателя на область памяти, содержащую таблицу данных, имени файла с таблицей данных, уникального идентификационного номера записи или других средств, с помощью которых можно осуществлять обращение к данным, или любой их комбинации.
В операции 508 сохранения одно или более значений данных из концептуальной таблицы сохраняют в соответствующей этим значениям данных таблице данных с помощью этих отображений, при этом данные в концептуальной таблице уже последовательно раздроблены. Данные можно затем соединить обратно с помощью управления курсором (как описано выше в связи с фиг.3 и ниже в связи с фиг.7). В одном варианте осуществления в операции 508 сохранения сохранение данных осуществляют атомарно. В другом варианте осуществления в операции 508 сохранения в отношении неполных сохранений может выполняться откат.
На фиг.6 показана последовательность операций согласно одному варианту осуществления настоящего изобретения, в котором запрос концептуальной таблицы расширяется с целью обработки раздробленных данных. В операции 602 приема принимают запрос концептуальной таблицы. В одном варианте осуществления такой запрос может быть введен пользователем в текстовой форме. В другом варианте осуществления такой запрос можно построить полностью или частично с помощью графического пользовательского интерфейса. В еще одном варианте осуществления такой запрос может автоматически формироваться вычислительной машиной.
В операции 604 анализа анализируют концептуальную таблицу, через которую должны запрашиваться сложные данные, и определяют структуру концептуальной таблицы вместе с любыми ассоциированными отображениями в таблицы данных. Эти отображения могут иметь любую из нескольких различных форм (как обсуждалось выше в связи с фиг.5).
В операции 606 определения используют структурные данные и отображения из операции 604 анализа в сочетании с набором правил расширения, чтобы определить, подходят ли какие-либо правила для данного запроса и предусматривают ли эти правила какое-либо расширение. Если для данного запроса нет соответствующих правил или если применимое правило показывает, что расширение завершено, то процесс идет по ветви "НЕТ" к операции 610 выдачи. Если одно или более правил подходит для данного запроса, процесс идет по ветви "ДА" к операции 608 применения.
Если одно или более правил расширения подходят для применения к запросу, в операции 608 применения запрос расширяют согласно этим правилам. В одном варианте осуществления изобретения в операции применения может создаваться новый запрос как часть расширения запроса. Некоторые примерные правила расширения изложены ниже в таблицах 1-12, включая расширение с использованием таких терминов SQL, как JOIN ("СОЕДИНИТЬ") для объединения таблиц данных перед оценкой данных. Специалистам будет понятно, что операция 606 определения и операция 608 применения могут осуществляться многократно, пока запрос не будет полностью расширен и готов к выдаче в операции 610 выдачи. Можно применять более одного правила в разном порядке, и одно правило можно применять более одного раза в расширении запроса. В варианте осуществления, реализующем инкрементальное расширение запроса, правила расширения запроса могут поддерживаться ортогональными друг другу и поэтому относительно простыми. В варианте осуществления с выполнением инкрементального расширения запроса может понадобиться структура данных для сохранения промежуточных результатов применения правила инкрементального расширения. В альтернативном варианте осуществления в операции 608 применения может применяться множество правил расширения запроса.
В операции 610 выдачи выдают запрос, расширенный в операциях 606 и 608 определения и применения. В одном варианте осуществления изобретения в операции 610 выдачи данные запрашивают непосредственно в базе данных. В альтернативном варианте осуществления в операции 610 выдачи посылают запрос в сервер базы данных.
На фиг.7 показана последовательность операций согласно варианту осуществления настоящего изобретения, в котором выполнение курсорной адресации позволяет извлекать данные из раздробленной концептуальной таблицы. В операции 702 приема принимают сигнал на открытие сложных данных в концептуальной таблице. Такой сигнал может быть результатом открытия пользователем существующей концептуальной таблицы со сложными данными, которые необходимо вывести на дисплей перемещения пользователем курсора в поле концептуальной таблицы, содержащее сложные данные, или другого ввода, реализованного пользователем или вычислительной машиной.
В операции 704 считывания считывают одно или более отображений в местоположения в таблицах данных, которые ассоциированы с данной концептуальной таблицей. Как обсуждалось выше, эти отображения могут принимать множество форм. Затем в операции 706 извлечения извлекают значения скалярных данных из таблиц данных, указанных упомянутыми отображениями. Скалярные значения, извлеченные в операции 706 извлечения, используют для заполнения концептуальной таблицы, которую выводят на дисплей в операции 708 вывода на дисплей.
В операции 708 вывода на дисплей выводят на дисплей концептуальную таблицу, содержащую скалярные значения, извлеченные в операции 706 извлечения. В операции 708 вывода на дисплей концептуальная таблица может быть непосредственно визуализирована на экране в одном варианте осуществления, может быть визуализирована с помощью интерфейсов прикладного программирования (API) в другом варианте осуществления, или могут использовать другие известные специалистам методы вывода данных на дисплей в других вариантах осуществления.
Специалистам в данной области техники будет понятно, что заявленные варианты осуществления изобретения можно применить не только в контексте приложений работы с базами данных и крупноформатными таблицами, в которых используются сложные типы данных, но также в контексте таких объединенных сервисных наборов, как Microsoft Sharepoint. Такие сервисные наборы могут включать в себя собственные сложные типы данных, содержащие множество значений (например, множественные варианты выбора, прикрепленные файлы и т.д.). Эти сложные типы данных можно обрабатывать по существу так же, как в описанных выше примерных вариантах осуществления изобретения.
В одном конкретном варианте осуществления изобретения в модуле 306 расширения (фиг.3), а также в операции 606 определения и операции 608 применения (фиг.6) используется набор правил расширения запросов SQL. Примерный набор нескольких правил расширения запросов SQL представлен в таблицах 1-11. Эти правила касаются ситуаций различной сложности. В одном примере (таблица 1) расширяется относительно простой запрос SELECT ("ВЫБРАТЬ"). Простой запрос "ВЫБРАТЬ" определяется как запрос, не содержащий группирования или агрегатов. При отсутствии ограничений на сложные скалярные поля, в расширенном запросе требуется обращение только к порождающей таблице. Если имеется ограничение на сложный скаляр в операторе WHERE ("ГДЕ") запроса, то необходимо выполнить соединение между таблицей и сложным типом данных (см. таблицу 1 в качестве основного примера). Фильтры в операторе "ГДЕ" следует изменять по потребности для обращения к сложному типу данных, а не к сложному столбцу в таблице. Поля в операторах "ВЫБРАТЬ" необходимо изменять аналогичным образом с помощью соответствующих обращений к таблице. Если требуется выполнить соединение не по левому краю на сложном скаляре между какой-то таблицей и другой таблицей, то расширенный запрос будет включать в себя подзапрос на соединение порождающей таблицы с ее сложной таблицей (см. таблицу 4 в качестве основного примера). Если в операторе "ГДЕ" нерасширенного запроса возникает NOT "НЕТ", то это "НЕТ" будет преобразовано в следующее: [Таблица]. [Сложный Столбец]НЕ В (ВЫБРАТЬ[Сложный Столбец] ИЗ [Таблица] СОЕДИНИТЬ [Простая Таблица] НА [Таблица].[Сложный Столбец]=[Простая Таблица]. [Сторонний Ключ] ГДЕ [Простая Таблица]. [Сложный Скаляр]= значение).
Таблицы 4-11 иллюстрируют правила расширения для запросов с агрегатами. Одно такое правило состоит в том, что агрегаты сложных типов исполняются в отношении "СОЕДИНЕНИЯ ПО ЛЕВОМУ КРАЮ" таблицы и сложного типа данных. Другое такое правило состоит в том, что при наличии агрегатов различных сложных типов в нерасширенном запросе каждый агрегат будет вычисляться с использованием подзапроса. Также в случаях, когда встречается оператор HAVING ("ИМЕЮЩИЙ") (таблица 10), эти случаи будут преобразованы в оператор "ГДЕ" во внешнем запросе. Если оператор HAVING "ИМЕЮЩИЙ" ссылается на сложный тип, на который не выполняется ссылка иным образом в совокупном списке "ВЫБРАТЬ", то можно создать новый подзапрос для соединения этой таблицы и этого сложного типа.
Таблица 1Пример фильтра на сложном скаляре
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопросаИЗ ВопросовГДЕ Поручено Кому. ИД Работника = 1
Расширенный запрос
ВЫБРАТЬ ОТДЕЛЬНУЮ СТРОКУ Вопросов. Имя ВопросаИЗ Вопросов ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому. ИД=f_Поручено Кому. Поручено Кому. ИДГДЕ f_Поручено Кому. ИД Работника =1
Таблица 2Пример фильтра на множестве сложных скаляров
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопросаИЗ ВопросовГДЕ Поручено Кому. ИД Работника = 1 ИЛИРешено Кем. ИД Работника = 2
Расширенный запрос
ВЫБРАТЬ ОТДЕЛЬНУЮ СТРОКУ Вопросов. ИмяВопросаИЗ (Вопросы ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому. ИД=f_Поручено Кому. ИД Поручено Кому)ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Решено Кем. ПО Вопросам. РешеноИД=f_Решено Кем. ИД Решено Кем.ГДЕ f_Поручено Кому. ИД Работника = 1 ИЛИf_Решено ИД = 2
Таблица 3Примеры подзапросов при соединении на сложном скаляре
Запрос,написанный пользователем
ВЫБРАТЬ Вопросы. ИмяВопроса. Х.ИмяРаботникаИЗ Вопросов Внутреннее соединение Работники Х ПО Вопросам. Поручено Кому. ИД = Х. ИДРаботникаГДЕ Поручено Кому. ИД Работника = 1
Расширенный запрос
ВЫБРАТЬ ОТДЕЛЬНУЮ СТРОКУ У. ИмяВопросаХ.ИмяРаботникаИЗ (ВЫБРАТЬ Вопросы. Имя Вопроса,f_Поручено ИД Работника ИЗ Вопросов ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам.Поручено Кому. ИД = f_Поручено Кому. Поручено Кому. ИД) КАК У ВНУТРЕННЕЕ СОЕДИНЕНИЕ Работники Х ПО Х. ИД Работника= У. ИД РаботникаГДЕ У. ИД Работника =1
Таблица 4Пример агрегата на сложном скаляре
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопроса, СЧЕТ (Поручено Кому)ИЗ ВопросовГРУППИРОВАТЬ ПО ИмениВопроса
Расширенный запрос
ВЫБРАТЬ Вопросы. ИмяВопросаСЧЕТ(f_Поручено Кому. ИД Работника) КАК Счет ИД РаботникаИЗ Вопросов ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому. ИД=f_Поручено Кому. Поручено Кому ГРУППИРОВАТЬ ПО Вопросам. Имя Вопроса.
Таблица 5Агрегат на сложном типе с ограничением на одном и том же сложном скаляре
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопроса, СЧЕТ (Поручено Кому)ИЗ ВопросовГДЕ Поручено Кому. ИД Работника =3ГРУППИРОВАТЬ ПО ИмениВопроса
Расширенный запрос
ВЫБРАТЬ х. ИмяВопросаСЧЕТ (f_Поручено Кому. ИД Работника) КАК Счет ИД РаботникаИЗ(ВЫБРАТЬ ОТДЕЛЬНАЯ СТРОКА Вопросов. ИмяВопроса.Поручено КомуИЗ Вопросов СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому=f_Поручено Кому. Поручено КомуГДЕ f_Поручено Кому. ИД Работника = 3) КАК Х ВНУТРЕННЕЕ СОЕДИНЕНИЕ f_Поручено Кому ПО х. Поручено Кому=f_Поручено Кому. Поручено КомуГРУППИРОВАТЬ ПО Вопросам. ИмяВопроса
Таблица 6Пример агрегата на сложном типе с ограничением на другом сложном скаляре
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопроса, СЧЕТ (Поручено Кому)ИЗ ВопросовГДЕ Решено Кем. ИД Работника = 3
Расширенный запрос
ВЫБРАТЬ х. ИмяВопроса,СЧЕТ (f_Поручено Кому. ИД Работника) КАК Счет ИД РаботникаИЗ(ВЫБРАТЬ ОТДЕЛЬНУЮ СТРОКУ Вопросов. ИмяВопроса. Поручено Кому, Вопросы. Решено КемИЗ Вопросов СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Решено Кем ПО Вопросам. Решено Кем=f_Решено Кем. Решено КемГДЕ f_Решено Кем. ИД Работника = 3) КАК Х ВНУТРЕННЕЕ СОЕДИНЕНИЕ f_Поручено Кому ПО х. Поручено Кому=f_Поручено Кому. Поручено КомуГРУППИРОВАТЬ ПО Вопросам. ИмяВопроса
Таблица 7Пример агрегатного сложного типа 1 с ограничением на сложном скаляре 1 и сложном скаляре 2
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопроса, СЧЕТ (Поручено Кому)ИЗ ВопросовГДЕ Поручено Кому. ИД Работника = 2ИЛИ Решено Кем. ИД Работника = 3
Расширенный запрос
ВЫБРАТЬ х. ИмяВопросаСЧЕТ (f_Поручено Кому. ИД Работника) КАК Счет ИД РаботникаИЗ(ВЫБРАТЬ ОТДЕЛЬНУЮ СТРОКУ Вопросов ИмяВопросаВопросы. Поручено Кому, Вопросы. Решено КемИЗ (Вопросы СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому =f_Поручено Кому. Поручено Кому) СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Решено Кем ПО Вопросам. Решено=f_Решено Кем. Решено КемГДЕ f_Поручено Кому. ИД Работника = 2 ИЛИf_Решено Кем. ИД Работника = 3) КАК ХВНУТРЕННЕЕ СОЕДИНЕНИЕ f_Поручено Кому ПО х. Поручено Кому=f_Поручено Кому. Поручено КомуГРУППИРОВАТЬ ПО Вопросам. ИмяВопроса
Таблица 8Примеры агрегатов на сложном типе 1 и сложном типе 2
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопроса, СЧЕТ (Поручено Кому)СЧЕТ (Решено Кем)ИЗ ВопросовГРУППИРОВАТЬ ПО ИмениВопроса
Расширенный запрос
ВЫБРАТЬ [СЧЕТ Поручено Кому по каждому вопросу] ИмяВопроса. [Счет Поручено Кому по каждому вопросу]. Счет АТ ИД Работника [Счет Решено Кем по каждому вопросу]. Счет RB ИД РаботникаИЗ(ВЫБРАТЬ Вопросы. ИмяВопросаСЧЕТ (f_Поручено Кому. ИД Работника) КАКСчет А ИД РаботникаИЗ вопросов СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому=f_Поручено Кому. Поручено КомуГРУППИРОВАТЬ ПО Вопросам ИмяВопроса) КАК [Счет Поручено Кому по каждому вопросу]ВНУТРЕННЕЕ СОЕДИНЕНИЕ(ВЫБРАТЬ Вопросы. ИмяВопроса,Счет (f_Решено Кем. ИД Работника) КАКСЧЕТ RB ИД РаботникаИЗ Вопросов ЛЕВОЕ СОЕДИНЕНИЕ f_Решено Кем ПО Вопросам. Решено Кем=f_Решено Кем. Решено КемГРУППИРОВАТЬ ПО Вопросам. ИмяВопроса) КАК [Счет Решено Кем по каждому вопросу]ПО [Счет Поручено Кому по каждому вопросу]. Имя Вопроса=[Счет Решено Кем по каждому вопросу]. ИмяВопроса
Таблица 9Примеры агрегатов на сложном типе 1 и сложном типе 2 с ограничениями на сложном скаляре 1 и сложном скаляре 2
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопроса, СЧЕТ (Поручено Кому)СЧЕТ (Решено Кем.)ИЗ ВопросовГРУППИРОВАТЬ ПО ИмениВопросаГДЕ (Поручено Кому. ИД Работника = 1 ИРешено Кем. ИД Работника = 3) ИЛИ (Поручено Кому. ИД Работника = 3 И Решено Кем. ИД Работника = 5)
Расширенный запрос
ВЫБРАТЬ [СЧЕТ Поручено Кому по каждому вопросу] ИмяВопроса. [Счет Поручено Кому по каждому вопросу]. Счет АТ ИД Работника [Счет Решено Кем по каждому вопросу]. Счет RB ИД РаботникаИЗ(ВЫБРАТЬ Вопросы. ИмяВопросаСЧЕТ (f_Поручено Кому. ИД Работника) КАКСчет АТ ИД Работника ИЗ (ВЫБРАТЬ ОТДЕЛЬНУЮ СТРОКУ Вопросов. ИмяВопроса. Вопросы. Поручено Кому,Вопросы. Решено КемИЗ (Вопросы СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому=f_Поручено Кому. Поручено Кому) ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Решено Кем. По вопросам. Решено Кем =f_Решено Кем. Решено Кем ГДЕ (f-Поручено Кому. ИД Работника) = 1 Иf_Решено ИД Работника = 3) ИЛИ(f_Поручено Кому. ИД Работника = 3 Иf_Решено Кем. ИД Работника = 5) КАК Х СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮf_Поручено Кому ПОХ. Поручено Кому =f_Поручено Кому. Поручено КомуГРУППИРОВАТЬ ПО Х. ИмяВопроса) КАК [Счет Поручено Кому по каждому вопросу]ВНУТРЕННЕЕ СОЕДИНЕНИЕ(ВЫБРАТЬ Вопросы. ИмяВопроса,Счет (f_Решено ИД Работника) КАКСЧЕТ RB ИД РаботникаИЗ (ВЫБРАТЬ ОТДЕЛЬНУЮ СТРОКУ Вопросов. ИмяВопроса, Вопросы, Поручено Кому, Вопросы, Решено КемИЗ (Вопросы ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому= f_Поручено Кому. Поручено Кому) ВНЕШНЕЕ СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Решено Кем ПО Вопросам. Решено= f_Решено Кем. Решено Кем. ГДЕ(f_Поручено ИД Работника = 1 Иf_Решено ИД Работника = 3) ИЛИ(f_Поручено Кому. ИД Работника = 3 Иf_Решено Кем. ИД Работника = 5) КАК У СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Решено Кем ПОУ. Решено Кем=f_Решено Кем. Решено КемГРУППИРОВАТЬ ПО У. ИмяВопроса) КАК [Счет Решено Кем по каждому Вопросу] ПО [Счет Поручено Кому по каждому вопросу]. ИмяВопроса = [Счет Решено Кем по каждому вопросу]. ИмяВопроса
Таблица 10Пример сложного типа в операторе ИМЕЮЩИЙ
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопросаИЗ ВопросовГРУППИРОВАТЬ ПО ИмениВопросаИМЕЮЩИЙ СЧЕТ (Поручено Кому) = 4
Расширенный запрос
ВЫБРАТЬ Вопросы. ИмяВопросаИЗ Вопросов СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому =f_Поручено. Поручено КомуГРУППИРОВАТЬ ПО Вопросам. ИмяВопросаИМЕЮЩИЙ СЧЕТ (f_Поручено Кому. ИД Работника) = 4
Таблица 11Пример агрегата на сложном типе 1 со сложным типом 2в операторе ИМЕЮЩИЙ
Запрос,написанный пользователем
ВЫБРАТЬ ИмяВопроса, СЧЕТ (Решено)ИЗ ВопросовГРУППИРОВАТЬ ПО ИмениВопросаИМЕЮЩИЙ СЧЕТ (Поручено кем) = 4
Расширенный запрос
ВЫБРАТЬ [Счет Решено Кем по каждому вопросу]. ИмяВопроса [Счет Решено Кем по каждому вопросу]. Счет ИД РаботникаИЗ(ВЫБРАТЬ Вопросы ИмяВопросаСчет (f_Решено Кем. ИД Работника) КАКСчет RB ИД РаботникаИЗ вопросов СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Решено Кем ПО Вопросам. Решено=f_Решено КемГРУППИРОВАТЬ ПО Вопросам. ИмяВопроса) КАК [Счет Решено Кем по каждому вопросу]ВНУТРЕННЕЕ СОЕДИНЕНИЕ(ВЫБРАТЬ Вопросы. ИмяВопроса,СЧЕТ (f_Поручено Кому. ИД Работника) КАКСчет АТ ИД РаботникаИЗ Вопросов СОЕДИНЕНИЕ ПО ЛЕВОМУ КРАЮ f_Поручено Кому ПО Вопросам. Поручено Кому=f_Поручено Кому. Поручено КомуГРУППИРОВАТЬ ПО Вопросам. ИмяВопроса) КАК [Счет Поручено Кому по каждому вопросу]ПО [Счет Поручено Кому по каждому вопросу] ИмяВопроса = [Счет Решено Кем по каждому вопросу] ИмяВопросаГДЕ [Счет Поручено Кому по каждому вопросу] Счет АТ ИД Работника = 4
Описанные выше различные варианты осуществления изобретения предназначены всего лишь для иллюстрации и не ограничивают объем изобретения. Специалистам в данной области техники будут понятны различные изменения и модификации, которые можно внести в настоящее изобретение без точного соблюдения проиллюстрированных и описанных примерных вариантов осуществления и применений и не выходя за рамки объема притязаний настоящего изобретения, который определен прилагаемой формулой изобретения.