Cтраница 3
В системе двухуровневой индексации элементы главного индекса указывают, в каком вторичном индексе содержатся ключи соответствующего диапазона. [31]
![]() |
Выборка сегмента ПАЦИЕНТ через вторичный индекс.| Формат сегмента-указателя индекса. [32] |
Напомним, что если ваше предложение РСВ содержит параметр PROCSEQ, идентифицирующий вторичный индекс, то вы всегда сможете задать имя индексного поля в SSA. Если же предложение РСВ не содержит параметра PROCSEQ, то предложение SENSEG для целевого сегмента индекса должно включать параметр INDICES, именующий DBD вторичного индекса. В том случае, когда ваш PSB не содержит ни одного из этих параметров, программа не имеет информации о вторичном индексе, и вы не можете сослаться на индексное поле в SSA, а значит, и пользоваться преимуществами, которые предоставляются вторичной последовательностью обработки. Таким образом ваш PSB управляет способом использования вторичного индекса. [33]
Выше мы уже упоминали о том, что возможны различные структуры для представления первичных и вторичных индексов и справочников, реализующих связи между записями. [34]
В настоящее время при использовании баз данных все большее значение приобретают вторичные ключи и вторичные индексы. Примеры вторичных ключей приведены на рис. 5.3 и 5.6. В языке CODASYL такие ключи называются поисковыми. Поисковый ключ состоит из одного или нескольких элементов данных записи-члена набора. Объявление поискового ключа в описании заставляет систему управления базами данных строить какую-либо форму индексирования для этого ключа. Индекс в терминологии CODASYL представляет собой любой способ нахождения экземпляра записи, в которой указанные элементы данных имеют заданное значение. [35]
Предположим, наконец, что допускается возможность выбора двух полей, по которым нужно создать вторичные индексы. По каким двум полям должны иметься вторичные индексы для того, чтобы математическое ожидание числа записей, подлежащих выборке, было минимальным. Предполагается, что в случае, когда существуют вторичные индексы для обоих специфицированных полей, можно строить пересечение множеств указателей в основной памяти перед выборкой любых записей. [36]
Можно дополнить базу данных, использующую организацию HISAM, HIDAM или HDAM, одним или несколькими вторичными индексами, которые сами по себе являются базами данных с организацией HISAM. Не останавливаясь подробно на этом вопросе, отметим лишь, что можно создать вторичный индекс по любому списку, включающему не более пяти полей из одного типа сегмента. Вторичный индекс может ассоциироваться со значениями этих полей, или с экземплярами сегментов, имеющими эти значения в указанных полях, или, наконец, с предками специфицированного типа сегментов для каждого из этих экземпляров. [37]
![]() |
Выборка сегментов ПАЦИЕНТ в последовательности имен.| Выборка сегментов БЛОК и БОЛЬНИЦА.| Выборка сегмента ПАЦИЕНТ без использования вторичного индекса 130. [38] |
Как уже отмечалось, сегменты БЛОК и БОЛЬНИЦА расположены ниже сегмента ПАЦИЕНТ в иерархии, созданной вторичным индексом, так что если доступ к сегментам БЛОК и БОЛЬНИЦА осуществляется через вторичный индекс, SSA должны быть заданы в новой последовательности. На рис. 9.18 показан вызов, с помощью которого вы можете произвести выборку сегментов БЛОК и БОЛЬНИЦА, используя вторичный индекс. Это позволяет выяснить, в каком БЛОКЕ какой БОЛЬНИЦЫ находится определенный пациент, без выполнения поиска во всей базе данных. [39]
При использовании рассматриваемого метода осуществляется доступ к большему числу блоков, чем при организации файла, предусматривающей вторичные индексы по всем полям. Поэтому в случае очень больших файлов метод поиска по частичному соответствию не рекомендуется. Но поскольку здесь не нужно пространство для индексов, этот метод может быть подходящей альтернативой для файлов, требующих порядка тысячи блоков. Кроме того, из-за отсутствия вторичных индексов не расходуется время на их модификацию при выполнении операций включения или удаления над главным файлом. [40]
Каждое простое или множественное поле длиной не более 126 байт можно объявить инвертированным, что предполагает построение по нему вторичных индексов или инвертированных структур. [41]
Поля сегмента-источника, которые АБД выбирает в качестве индексных полей, используются при составлении ключевого поля в сегментах-указателях базы данных вторичного индекса. Это поле служит DL / 1 для упорядочения сегментов-указателей во вторичном индексе. Индексируемое поле создается из одного - пяти полей сегмента-источника. Кроме того, АБД может включить дополнительную информацию в сегменты-указатели. На рис. 9.21 показан формат сегмента-указателя в базе данных вторичного индекса. Большая часть этой дополнительной информации мало существенна для прикладных программ. [42]
Это будет логическая база данных, образованная из физической базы данных, показанной на рис. 12.13, доступ к которой осуществляется через вторичный индекс. [43]
Известны no - крайней мере три случая, когда требуется такая гарантия: 1) поиск логически исходного сегмента; 2) поиск сегмента-цели по вторичному индексу; 3) поиск экземпляров сегмента, о существовании которых заранее известно. Для этих целей специальные программы генерации ключа могут строить таблицы значений сцепленного ключа. Для обеспечения последующих доступов к экземпляру сегмента с гарантированным успехом модель прикладной программы может при первом доступе сохранить и в дальнейшем использовать соответствующий сцепленный ключ. [44]
В предположении, что в словаре уже хранятся описания неструктурированных элементов данных, можно дополнить их теперь описаниями связей, определяющих сегменты баз данных, логические отношения и вторичные индексы. Перед внесением информации в словарь можно присвоить имена сегментам и базам данных, если это не было сделано процедурами проектирования на начальном этапе; для этого можно использовать специальные команды спецификации структуры, подобные тем, что предложены в гл. Аналогично можно передать в качестве входных данных процедурам проектирования окончательные решения проектировщика по поводу реализации логических связей и вторичных индексов. [45]