Обзор существующих БД. Современныые СУБД основываются на использовании моделей данных (МД), позволяющих описывать объекты предметных областей и взаимосвязи между ними. Существуют три основные МД и их комбина- ции, на которых основываются СУБД: реляционная модель данных (РМД), сетевая модель данных (СМД), иерархическая модель данных (ИМД). Основное различие между этими моделями данных состоит в способах описания взаимодействий между объектами и атрибутами. Взаимосвязь выражает отношение между множествами данных. Исполь- зуются взаимосвязи "один к одному", "один ко многим" и "многие ко многим". "Один к одному" - это взаимно однозначное соответс- твие, которое устанавливается между одним объектом и одним атри- бутом. Hапример, в определенный момент времени в одной ЭВМ ис- пользуется один определенный процессор. Hомеру выбранной ЭВМ соответствует номер выбранного процессора. "Один ко многим"- од- но-многозначное соответствие, которое устанавливается между од- ним объектом и многими атрибутами. Например, один пользователь для решения различных задач использует различные языки програм- мирования."Многие ко многим" - это соответствие между многими объектами и многими атрибутами. Hапример, на множество ЭВМ может одновременно работать множество пользователей. Взаимосвязи между объектами и атрибутами удобно представлять в виде графов и ги- перграфов. В основе реляционной модели лежит математическое понятие теоретико-множественного отношения, которое представляет собой подмножество декартова произведения списка доменов. Домен- это просто множество значений. Пусть задан набор доменов D1,...,Dk. Декартовым произведе- нием доменов D1, D2,...,Dk (обозначается как D1 x D2 x ... x Dk) называется множество всех кортежей (v1, v2, ...,vk) длины k, та- ких, что, v1 принадлежит D1, v2 принадлежит D2 и т.д. Х(D1,...,Dk) = {(d1,...,dk) / dicDi} Hапример, если k=2, D1 = {0,1}, и D2 = {a,b,c}, то D1 x D2 есть {(0,a), (0,b), (0,c), (1,a), (1,b), (1,c)}. Отношением называется некоторое подмножество декартова про- изведения одного или более доменов. Удобно представлять отноше- ние как таблицу, где каждая строка- это кортеж, а каждый столбец является атрибутом. Домены - это подмножество значений атрибута. Кортежи - это упорядоченные множества. Столбцы таблицы - это элементы данных, а строки - записи. Hапример на рис.1 представлено отношение с атрибутами: го- род, штат, население. ( Майами, Оклахома, 13880) - есть кортеж. город │ штат │ население ───────────────────┼──────────────────┼──────────────────── Сан-Диего │ Техас │ 4490 Майами │ Оклахома │ 13880 Питтсбург │ Айова │ 509 Рис.1. Пример отношения. Отношение может быть представлено в виде файла. Записи фай- ла состоят из полей, соответствующих атрибутам в схеме отноше- ния. Многие языки определения данных, основанные на реляционной - 2 - модели, дают пользователю возможность специфицировать организа- цию файла. Пользователь может выбрать хеширование (записи в фай- ле разделены между участками, каждый из которых содержит один или более блоков памяти) или индексирование. Для отношений с не- большим числом кортежей, иная альтернатива - "куча". В этом слу- чае кортежи перечисляются как записи в файле без определенного порядка. Сетевые модели данных базируются на табличных и графовых представлениях: вершинам графа обычно сопоставляются некоторые типы сущности, которые представляются таблицами, а дугам- типы связей. Наиболее развитойй сетевой моделью данных является мо- дель, предложенная в отчете (апрель 1971 г.) Рабочей группы по базам данных (РГБД) Ассоциации по языкам систем обработки данных (CODASYL), спецификации которой впоследствии неоднократно перес- матривались. Помимо определения модели данных создатели первона- чального отчета преследовали также цель обеспечить включение ее средств в Кобол. В СМД элементарные данные и отношения между ними представ- ляются в виде ориенированной сети (вершины - данные, дуги - от- ношения). Рассмотрим "классическую" сетевую модель данных CODASYL. Основные "строительные блоки" структуры сетевой базы данных - тип записи и тип набора. Тип записи представляет собой множество записей, обладающих структурой и другими свойствами, специфици- рованными в описании данного типа записей в схеме базы данных для всех записей этого типа. Запись - совокупность логически связанных полей, характери- зуется именем и полями, входящими в нее. Полем называется единая неделимая единица информации, которая характеризуется идентифи- катором, типом и размером. Помещенная в базу данных запись может существовать в ней не только самостоятельно, но и являться одновременно детальной или главной записью каких-либо наборов в зависимости от того, описан ли ее тип в схеме базы данных как тип главной записи или деталь- ной записи каких-либо типов наборов. Тип набора сетевой модели представляет собой множество на- боров, обладающих структурой и другими свойствами, специфициро- ванными в схеме базы данных для этого типа набора. Hаборы СМД служат для представления отношений вида 1:n между главными запи- сями и детальными записями одного или нескольких типов. Каждый экземпляр набора состоит из одного экземпляра запи- си, называемой главной записью набора, и в общем случае динами- чески изменяющегося при обновлениях базы данных множества записей, называемых детальными записями набора. Главная и детальная записи данного набора связываются с по- мощью указателей в цепь и образуют упорядоченную последователь- ность. Могут быть предусмотрены дополнительные указатели, связы- вающие каждую детальную запись набора непосредственно с ее главной записью, а также указатели, обеспечивающие обход записей набора в обратном направлении. Типы главных и детальных записей наборов данного типа объявляются в описании этого типа набора в схеме. Каждый экземпляр главной записи набора, появляясь в базе данных, порождает экземпляр набора этого типа. Главные и детальные записи одних наборов могут быть однов- ременно главными и/или детальными записями других наборов того же самого или иных типов. Таким образом, из записей базы данных и наборов может быть сконструирована база данных произвольно сложной стркутуры. - 3 - институт ┌───────┬───────┐ ┌──────────────┤ МГИЭМ │ Быков ├──────────────┐ │ └───────┴───────┘ │ ┌──┴──┐ ┌──┴──┐ │ АВТ │ │ ФЭТ │ └──┬──┘ └──┬──┘ │ ┌─────┐ ┌─────┐ │ └────────────┤ ФИТ ├──────────────┤ ФПМ ├─────┘ └──┬──┘ └─────┘ ┌──────────┴──────────┐ ┌─┴─┐ ┌─┴─┐ │ Р │ │ Л │ └─┬─┘ └─┬─┘ │ ┌────┐ ┌────┐ │ └──┤ АП ├────┤ ЭП ├───┘ └────┘ └────┘ Рис.2. Пример БД сетевой структуры. набор: факультеты; главная запись: институт; детальная запись: АВТ, РТФ, ФПМ, ФЭТ; набор: специальность; главная запись: РТФ; детальная запись: Р, АП, ЭП, Л; запись: институт; поля: МГИЭМ, Быков. Иерархическая модель данных (ИМД) основана на понятии де- ревьев, состоящих из вершин и ребер. Вершина дерева ставится в соответствие совокупности атрибутов данных, характеризующих не- который объект. Вершины и ребра дерева как бы образуют иерархи- ческую древовидную структуру, состояющую из n уровней. уровень 1 институт корневая ┌───────┬───────┐ вершина │ МГИЭМ │ Быков │ └───────┼───────┘ ┌────────┬───┴────┬────────┐ уровень 2 ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ порожденные │ АВТ │ │ ФИТ │ │ ФПМ │ │ ФЭТ │ вершины └─────┘ └──┬──┘ └─────┘ └─────┘ уровня 1 ┌─────┬─┴──┬─────┐ уровень 3 ┌─┴─┐┌──┴─┐┌─┴──┐┌─┴─┐ порожденные │ Р ││ АП ││ ЭП ││ Л │ вершины └───┘└────┘└────┘└───┘ уровня 2 Рис.3. Пример БД иерархической древовидной структуры. Первую вершину называют корневой вершиной. Она удоволетво- ряет условиям: 1. Иерархия начинается с корневой вершины. 2. Каждая вершина соответствует одному или нескольким атри- бутам. 3. Hа уровнях с большим номером находятся зависимые верши- ны. Вершина предшевствующего уровня является начальной для новых зависимых вершин. 4. Каждая вершина, находящаяся на уровне i, соединена с од- - 4 - ной и только одной вершиной уровня i-1, за исключением корневой вершины. 5. Корневая вершина может быть связана с одной или несколь- ними зависимыми вершинами. 6. Доступ к каждой вершине происходит через корневую по единственному пути. 7. Существует произвольное количество вершин каждого уров- ня. Иерархическая модель данных состоит из нескольких деревьев, т.е. является лесом. Каждая корневая вершина образует начало за- писи логической базы данных. В ИМД вершины, находящиеся на уров- не i, называют порожденными вершинами на уровне i-1. Реляционные базы данных. Hа ПЭВМ в основном используют СУБД, поддерживающие реляци- онную модель данных. Это объясняется тем, что реляционная модель обладает дескрипторной мощностью других моделей при меньшем чис- ле базисных понятий. В соответствии с реляционной моделью база данных представляется в виде совокупности таблиц, над которыми могут выполняться операции, формулируемые в терминах реляционной алгебры и реляционного исчисления. Многие реляционные языки манипулирования данными предостав- ляют пользователю возможность специфицировать по своему усмотре- нию вторичные индексы по некоторым атрибутам или множествам ат- рибутов. Реляционный язык определения данных обеспечивает механизм для спецификации одного атрибута или их множества в качестве ключа отношения. Отношение не должно иметь двух кортежей, в ко- торых совпадают все атрибуты ключа. Атрибуты, которые образуют отношения, служат также и ключом для файла. Основными операциями, с помощью которых модифицируется база данных, являются: включение, удаление и модификация. Эти опера- ции применяются к кортежам. Основное достоинство реляционного подхода - его простота и доступность. Пользователи абстрагированы от физической структуры памяти. Это позволяет эксплуатировать БД без знания методов и способов ее построения. Основные достоинства РМД следующие: простота, независимость данных; гибкость;непроцедурные запросы, теоретическое обоснование на основе теории отношений. Это дает возможность пользователям формировать их запросы более компакт- но, в терминах более крупных агрегатов. Hо при таком подходе возникают и проблемы, связанные с обеспечением достаточно высокого уровня производительности СУБД этого класса. Этот вопрос решается разработчиками СУБД. Другая проблема возникает, когда нужно обеспечить интерфейс СУБД, под- держивающий реляционную модель данных, с традиционными языками программирования. Она заключается в несоответствии структур дан- ных модели и языков такого типа, ориентированных на обработку "по записям". Для ее решения приходится дополнять модель данных специальными согласующими типами объектов. Большинство СУБД для персональных ЭВМ составляют системы, поддерживающие реляционную модель данных. К этому классу следует отнести самую распространенную на ПЭВМ систему dBase фирмы Ashton-Tate Corp.(версии dBaseП, dBaseШ, dBaseШ PLUS, dBaseIV) и многочисленное семейство совметимых с нею программных продуктов - FoxBase+ и FoxPro фирмы Fox Software, Clipper'87 фирмы Nantucket Corp., QuickSilver и dBXL фирмы Wordtech, User Interfase фирмы WallSoft Systems Inc., dBFast фирмы dBFast Inc. - 5 - Широко распространены также реляционные системы Oracle фирмы Oracle Corp., Paradox фирмы Borland International, ряд версий системы R:base 4000, R:base 5000, R:base System V, R:base for DOS, R:base 3.0)фирмы Microrim, система DB2 фирмы IBM Corp. Главные проблемы при реализации РМД на ПЭВМ связаны с обес- печением приемлемого уровня производительности. Проводились комплексы исследований, направленных на разработку эффективных алгоритмов реализации реляционных операций и методов опримизации обработки запросов, а также на создание специального оборудова- ния, предназначенного для поддержки реляционной модели данных. Ориентация разработчиков программных средств баз данных для персональных ЭВМ на РМД определяется удобством этой модели для пользователя, рекламными соображениями - о достоинствах реляци- онной модели уже было хорошо известно, а также сравнительной простотой ее реализации, особенно если не заниматься всерьез проблемами производительности. Реляционные системы для персональных ЭВМ заметно различают- ся набором тех реляционных операций, которые в них реализованы. Во многих системах вообще не предусмотрены операции пересечения, объединения и разности отношений. Для выполнения операции соеди- нения отношений требуется, как правило, упорядоченность кортежей отношения - второго операнда по ключу соединения, а в ряде слу- чаев - использование для него индекса по такому ключу как средс- тва быстрого поиска подходящих кортежей во втором операнде. Важным инструментом абстракции данных, обеспечивающим воз- можности логической независимости данных в системах баз данных, являются механизмы представлений (View). В большинстве реляцион- ных систем, и даже в таких широко распростаненных, как dBaseШ PLUS и Paradox, явные механизмы представлений отсутствуют. В то- же время такие средства предусмотрены в СУБД R:base for DOS, Oracle, DB2 . Использование представлений существенно облегчает разработку приложений, сокращает объем работ по реализации и позволяет более экономично использовать ресурсы памяти, конечно, за счет увеличения времени обработки запросов. Обычно в каждой системе предусматривается некоторая комби- нация примитивных типов данных. Чаще всего допускается использо- вание таких типов: числовые значения с фиксированной и плавающей точкой, а также с двойной точностью, строковыые значения фикси- рованной длины (обычно до 255 литер), строковые значения пере- менной длины, булевские значения, значения в национальных денеж- ных единицах, даты и отметки времени. Предусматривается также в случае использования соответствующих типов данных естественная арифметика дат, значений времени и денежных величин. Возможность оперировать числами в формате с плавающей точ- кой не предусматривается во многих распространенных СУБД, напри- мер, dBase-совместимых системах. Это создает большие неудобства при их использовании в научных и инженерных приложениях. Важную роль в технологии баз данных играет концепция неоп- ределенного значения (NULL-value). Предполагается, что СУБД рас- полагает средствами, которые позволяют ей идентифицировать в ба- зе данных такие объекты (поля записей, атрибуты кортежей тоношений и т.д.), значения которых еще не были заданы пользова- телем. Эта концепция не поддерживается в ряде коммерческих СУБД для пресональных ЭВМ. Так, в базах данных системы dBaseШ PLUS и совместимых с нею систем нельзя отличить неопределенное значение числового поля от значения "ноль", для литерного поля - от стро- ки пробелов, а для булевского - от значения "ложь". От этого не- достатка свободны системы Paradox и R:base for DOS. В теории систем баз данных большое внимание уделяется - 6 - средствам спецификации ограничений целостности данных как сос- тавной части модели данных. Ограничения целостности рассматрива- ются при этом как механизм моделирования семантики пердметной области в базах данных. Hужно отметить, что возможности специфи- кации весьма примитивны. Обычно они ассоциируются не с объектами базы данных, а с командами ввода или с полями форм ввода-вывода. При этом могут поддерживаться лишь простейшие ограничения. Hап- ример, для данных количественных типов (числа, даты. денежные величины) используются, как правило, ограничения, специфицирую- щие возможные диапазоны изменения, а для литерных строк - шабло- ны представления значений. В системе Clipper'87 эти возможности были усилены. Допуска- ется использование для верификации данных в команде ввода значения специфицированных пользователем функций. Аналогично в dBaseIV с окнами форм ввода-вывода могут ассоциироваться ограни- чения, заданные пользовательскими процедурами произвольного ха- рактера. Однако ограничения такого вида, ассоциируемые лишь с про- цессами ввода данных, не позволяют контролировать нарушения целостности базы данных "изнутри" - в процессах обработки запро- сов, а также поддерживать соотношения, связывающие значения мно- жества различных компонентов базы данных. Более того, подобного рода механизмы не дают возможности поддерживать более или менее нетривиальные зависимости допустимых множеств вводимых значений от состояния базы данных. Так, в dBase-совместимых системах нет эффективных средств, позволяющих поддерживать первичный ключ от- ношений. Дубликаты кортежей включаются в отношение, хотя индекс по значениям такого ключа с параметром UNIQUE и позволяет "спря- тать" их от пользователя. Исключением является система R:base for DOS. В ней не толь- ко поддерживаются первичные ключи отношений (таблиц), но и предусмотрены средства спецификации довольно сложных ограничений целостности, называемых правилами и ассоциируемых с атрибутами отношений. Их аргументом может быть множество значений атрибутов в кортежах одного или нескольких отношений. Проверка таких огра- ничений осуществляется при выполнении всевозможных операций об- новления данных в базе данных независимо от того, вызваны ли они процессами ввода данных или внутрисистемными операциями. Анало- гичные средства предусмотрены в системе ПАЛЬМА-ПК. Система CLIPPER. CLIPPER - это созданная фирмой Nantucket Corp. система программирования приложений в среде БД, включающая в себя быст- рый компилятор программ, написанных на языке, близком к языку СУБД dBaseIII PLUS, редактор связей, развитый интерактивный сим- волический отладчик, обладающий пользовательским интрефейсом в стиле меню, который можно связать с разрабатываемой программой для облегчения ее отладки, большую библиотеку объектных модулей системных функций, а также ряд служебных программ (утилит). Система Clipper представляет собой, по существу, СУБД ком- пилирующего типа с автономным (self-contained) языком, в значи- тельной мере совместимую по входному языку программирования и организации базы данных с СУБД dBaseIII PLUS. Основная цель раз- работки этого програмного продукта - достижение более высокой производительности прикладных систем по сравнению с созданными с помощью средств dBaseIII PLUS. Эта задача решается благодаря ис- пользованию на стадии исполнения заранее скомпилированного кода вместо интерпретации исходных программ, а также за счет более - 7 - эффективных механизмов индексирования файлов БД. Clipper работает в среде операционной системы MS DOS версии 2.0 и выше. В результате компиляции текстов программ на исходном языке он порождает загрузочные программные модули, не требующие каких-либо системных средств на стадии исполнения. Тем самым разработанная прикладная программа полностью "отчуждается" от инструментальных средств его разработки, может распространяться независимо от них, и пользователь такой программы избавляется от необходимости изучать этот инструментарий. Допускается декомпозиция программных модулей на составные части, из которых на стадии редактирования можно сформировать модули оверлейной структуры. Разработка крупных прикладных прог- рамм значительно облегчается благодаря технологии сепаратной компиляции их компонентов. Clipper обеспечивает высокую скорость не только при испол- нении программ, но и на стадии их компиляции. Система польностью совместима с системой dBaseIII PLUS по организации файлов БД. Однако индексные файлы в системе Clipper имеют иную более эффек- тивную организацию, что наряду с компиляцией способствует су- щественному повышению производительности программ на стадии ис- полнения. Индексные файлы dBaseIII PLUS подменяются файлами системы Clipper аналогичного назначения автоматически на стадии исполнения либо заблаговременно с помощью специальной утилиты. В языке программирования системы Clipper отсутствуют такие полноэкранные команды языка dBase, как ASSIST, BROWSE, EDIT, имеются ограничения на использование функции макроподстановки (&). Значением строковой переменной, к которой применяется эта функция, не может быть, в частности, полная команда или фраза команды с ключевым словом, а также список имен полей записи фай- ла БД или других объектов языка с разделителями-запятыми. Вместе с тем в язык введены многие расширения. К их числу (в летней версии 1987 г.) относятся возможности работы с массивами пере- менных, которые могут объявляться при необходитости глобальными величинами, спецификации функций, определяемых пользователем, возможности обращения к функциям на языках Си и ассемблере с пе- редачей им параметров, средства программирования пользователь- ских интерфейсов, построенных в стиле меню, сохранение и восста- новление изображений, показанных на экране, большое количество новых функций различного назначения, в частности, для операций- над строками. В языке Clipper предусматриваются средства блокирования файлов и записей файлов БД, необходимые для использования прог- рамм на этом языке в мультипользовательской среде сетевых систем БД. Введены новые синтаксические конструкции, например циклы FOR...NEXT, новая фраза VALID для верификации данных, вводимых с помощью команды GET, и ряд других. К пользовательской программе можно легко подключить проце- дуру HELP, обеспечивающую глобальную и контекстно-зависимую по- мощь. Эта процедура вызывается на стадии исполнения традиционным нажатием функциональной клавиши F1. При этом ей автоматически передаются необходимые параметры. Clipper включает, как уже указывалось, весьма богатые сис- темные библиотеки функций различного характера, существенно обо- гащающих язык, позволяющих значительно сокращать затраты времени на прикладное программирование и уменьшать объем исходного кода. В летней версии 1987 г. предусмотрено около ста различных функ- ций для анализа состояния системы, операций с массивами, для вы- числения элементарных математических функций, операций над стро- ками, редактирования данных, для создания файлов DOS и - 8 - выполнения операций над ними, работы со значениями полей типа Memo в записях фаийлов БД и для других целей. Кроме того, пользователь имеет возможность создавать и ис- пользовать собственные библиотеки функций. Что касается системных библиотек, то Nantucket Corp. посто- янно расширяет их состав. В 1988 г. был дополнительно включен ряд новых функций, кроме того, фирма начала поставлять пакет Clipper, предназначенный для использования совместно с системой Clipper. Пакет содержит большую новую структуризованную библио- теку функций и расширенный драйвер экранов и клавиатуры, приз- ванный заменить имеющийся в системе Clipper драйвер. Эти функции и драйвер могут вкючаться в программу на стадии редактирования. Все функции библиотеки обладают высокой производительностью и предъявляют минимальные требования к оперативной памяти. Они реализованиы на языке ассемблера и оптимизированы. Библиотека пакета включает ряд функций для конструирования многооконных пользовательских интерфейсов, для непосредственной работы с обо- рудованием, подлюченным к последовательному интерфейсу ПЭВМ, ми- нуя BIOS и обращения к DOS. Предусмотрена большая группа строковых функций, функций для преобразования числовых значений и битовых операций, операций над датами и временем, установки системных переключателей и по- лучения информации об их состоянии, а также о характеристиках и состоянии операционной обстановки, видеофункций, функций для ра- боты с дисками, файлами БД и принтером. Всего библиотека пакета включает более 270 различных функций. Важным достоинством системы Clipper является возможность использования дополнительной (свыше 640 Кбайт) памяти персональ- ного компьютера при исполнении разработанных его средствами п/п. Вместе с тем система Clipper обладает и существенным недос- татком - порождаемые ею загрузочные модули довольно велики по объему. Один из способов преодоления этого изъяна - предоставля- емые пакетом возможности конструирования программных модулей с оверлейной структурой. Однако как "цельнотянутый" загрузочный модуль, так и корневой сегмент модуля с оверлейной структурой не могут быть размером менее 110Кбайт, поскольку в них включаются все необходимые элементы системной среды и функции стадии испол- нения. К числу недостатков этого продукта следует, вероятно, от- нести также отсутствие комфортной среды для эффективной разра- ботки и отладки Clipper-программ. Имеется в виду среда подобная той, которой обладают, например, Турбосистемы программирования фирмы Borland Int. Входящий в состав системы Clipper символичес- кий отладчик является лишь одной из составных частей такой сре- ды. Проблему сокращения объема требуемой оперативной памяти и уменьшения размеров загрузочных модулей фирма Nantucket Corp. решила в новой версии системы - Clipper 5.0. Для этой цели в состав нового программного продукта включается динамический ре- дактор связей - загрузчик, основанный на механизмах виртуальной памяти и тем самым вообще исключающий необходимость использвания оверлейной структуры при создании больших программных модулей. Версия Clipper 5.0 обладает и другими важными достоинства- ми. Пользователь (программист-разработчик прикладных систем) мо- жет расширять язык новыми командами и благодаря этому формиро- вать множества команд, удобные для программирования специфических классов задач. Предусматриваются новые типы пере- менных, а также многомерные массивы. Разработана машинно-ориен- тированная документация, к которой возможен доступ в режиме - 9 - on-line с помощью Guide to Clipper или Norton Guide. Дополнительно в Clipper 5.0 введены предопределенные объек- ты, которые облегчают написание больших программ. К ним относят- ся: Error class - обработка ошибок во время выполнения программы. Get class - предоставляет объекты и классы для создания эк- ранных форм редактирования. Tbrowse class - предоставляет объект для табличного просмотра и редактирования базы данных. TColumn class - используется Tbrowse-объектом для работы со столбцами в таблице. Наиболее частым по использованию и в то же время наиболее мощным объектом можно считать Tbrowse-класс, использование кото- рого дает возможность не прилагая больших усилий реализовать табличный редактор, ассоциированный с какой-либо базой данных, что фактически является законченной прикладной программой. Система программирования Clipper (в частности версии 5.0) может быть использована в тех случаях, когда необходимо быстрое (по срокам) создание законченной прикладной программы, ориенти- рованной на обработку информации представленной в табличной фор- ме. Нежелательно применение системы для решения задач содержащих значительное количество вычислительных операций (особенно с пла- вающей точкой). Это объясняется символьным форматом хранения чи- сел, что приводит к значительному уменьшению скорости обработки информации за счет постоянного выполнения преобразований из сим- вольного представления во внутримашинный формат и наоборот, что естественно приводит к потере точности вычислений. Сетевые базы данных. Концептуально сетевая модель данных замышлялась как инструмент для пользователей баз данных - программистов. В связи с этим в СМД больше внимания уделяется структуризации данных, чем развитию ее операционных возможностей. В ЯМД сетевой модели важное значение имеет концепция теку- щего состояния в базе данных. Для каждой из прикладных программ, параллельно взаимодействующих с базой данных, СУБД должна под- держивать ее собстевенный комплект индикаторов текущего состоя- ния. На уровне схемы базы данных операционные возможности сете- вой модели данных, называемые базисными функциями манипулирования данными, имеют концептуальный характер. Операции здесь непосредственно не могут быть активизированы. Операции над данными в базе данных на уровне подсхемы пре- дусматривают возможности перемещения по структуре базы данных и изменение индикаторов текущего состояния, запоминание и обновле- ние записей, их удаление из базы данных, включение и исключение детальных записей из наборов, переключение записи из одного на- бора данного типа в другой, переупорядочение записей в наборе, нахождение в базе данных конкретной записи данного типа и неко- торой детальной записи набора, открытие и закрытие области дан- ных базы данных. Основное значение имеет то, что предусматривается одновре- менная обработка только одиночных объектов данных из базы данных - записей, полей записей базы данных. Типичные операции в сете- вой модели: найти следующую запись данного типа и сделать ее те- кущей, извлечь текущую запись в буфер прикладной программы для обработки, заменить в извлеченной записи значения указанных эле- - 10 - ментов данных на заданные новые их значения, запомнить запись из буфера в базе данных. Основные достоинства СМД - наличие реализованных СУБД, обеспечивающих эту модель, простота в реализации отношений "мно- гие ко многим". Основной недостаток СМД - ее сложность. При ре- организации БД возможна потеря независимости данных. Среди сетевых систем одной из наиболее популярных является СУБД db_Vista III(Raima Corp.). Модель данных этой системы представляет собой упрощенную сеть CODASYL, в которой полностью исключены автоматические механизмы перемещения по структуре базы данных. Другие известные премеры сетевых систем - MDBS-Ш фирмы mdbs Inc, системы Q-Pro и Zim. СЕТЕВАЯ СИСТЕМА DB_VISTA III Система dB_VISTA III - система управления базами данных фирмы Raima Corp., поддерживающая сетевую модель данных CODASYL. Она предназначена для создания и использования БД сложной струк- туры в рамках различных программных систем, реализованных на языке Си. Для них предоставляется интерфейс включающего языка. Кроме того, конечные пользователи могут получить интерактивный доступ к базе данных с помощью языка запросов SQL. Сама система dB_VISTA реализована на языке Си и благодаря этому является переносимой. Она может эксплуатироваться в среде операционных систем MS DOS, OS/2, UNIX, XENIX, ULTRIX, VMS и ря- да других на ПЭВМ IBM PC, PS/2, SUN и VAX. Для разработки прило- жений допускается использование Microsoft C, Lattice C, Turbo C и других компиляторов языка Си. Фирма поставляет как монопользо- вательскую, так и мультипользовательскую версии системы. Обеспе- чиваются быстрые методы доступа за счет использования комбинации наборов CODASYL и эффективных механизмов индексирования, осно- ванных на В-деревьях. Система поставляется в виде совокупности трех компонентов: собственно системы - библиотеки функций, которые обычным образом подключаются к Си-программе средствами компилятора и редактора связей, компонентов dB_Query и dB_Revise, а также ряда утилит для облегчения эксплуатации системы. Компонент dB_Query предоставляет пользователю возможность обращаться в интерактивном режиме с запросами к системе БД с по- мощью языка SQL и генерировать отчеты. Входящие в него функции реляционных запросов на языке Си могут быть встроены с помощью редактора связей в прикладную Си-программу. Компонент dB_Revise служит для реструктуризации БД и кон- версии существующих в ней данных в данные новой структуры. Утилиты системы позволяют инициализировать БД, проверять непротиворечивость данных в БД, просматривать и редактировать данные в записях БД в полноэкранном режиме, строить индексы по заданным ключам, выдавать отчеты для администратора БД, выводить дампы БД для восстановления ее при разрушениях, осуществлять об- мен данными между БД системы и ASCII-файлами. Сетевая модель данных CODASYL реализована в системе dB_Vista в весьма упрощенном режиме. В ней совершенно отсутству- ет автоматика, предусмотренная в подходе CODASYL, - автоматичес- кая навигация в структуре данных, селекция экземпляров наборов, поддержка автоматического членства записей в наборах, продуциро- вание производных элементов данных в экземплярах записей, расп- ространение удалений и изменений по структуре БД. В записях не могут использоваться повторяющиеся группы. Не предусматривается поддержка ограничений целостности данных, процедуры БД, механиз- - 11 - мы управления доступом. Не реализована концепция подсхемы. Реализация сетевой модели в db_VISTA. Определение записи в сетевой модели, аналогичное определе- нию записи в Паскале или описанию структуры в Си, используется для группировки связанных элементов данных. Эти определения за- писей используются СУБД для доступа и манипуляций связанными элементами данных как простыми объектами. В последующем обсужде- нии определение запись/набор будем называть "типом" записи/набо- ра, и будем считать, что запись/набор определенного типа в БД представляет собой "экземпляр" записи/набора. Набор определяет отношения между типами записей так, что один тип записи является "главной" одного или более типов запи- сей. Подчиненные записи назаваются "детальными". db_VISTA орга- низует наборы, включающие только один экземпляр главной записи и один или более экземпляров детальных записей. Такая цепь отноше- ний, являющаяся отношением "один ко многим", представляет собой соотношение одной главной записи к потенциально большему коли- честву экземпляров детальных записей. Связи в наборе реализуются в db_VISTA формированием двунап- равленного списка между экземплярами детальных записей и уста- новкой в главной записи указателей на начало и конец списка. Преимущество такого подхода в том, что db_VISTA прозволяет прог- раммисту организовать доступ ко всем этим указателям и цепям, предоставляя тем самым очень мощную, но простую по использованию возможность построения данных. Список указателей неявно размеща- ется в записях самой СУБД, базируясь на информации, содержащейся в таблицах словаря данных, созданных из спецификации DDL. Рисунок 4 показывает как db_VISTA представляет экземпляр набора. Прямоугольники представляют собой записи, а стрелки-ука- затели, содержащиеся в записях, организуемые самой СУБД. Каждая главная запись содержит указатели на первую и последнюю запись набора. В каждой детальной записи содержатся указатели на преды- дущую и последующую детальные записи и на главную запись набора. ┌──────────────────────────────────────────────────────────────┐ │ указатель на указатель на │ │ начало набора ╔═════════╗ конец набора │ │ ┌─────────────────║ Главная ║─────────────────────┐ │ │ │ ┌────────────>║ запись ║<─────────────────┐ │ │ │ │ │ указатель на║ набора ║ указатель на │ │ │ │ │ │ главную ╚═════════╝ главную │ │ │ │ │ │ ^ указатель на │ │ │ │ │ │ │ главную │ │ │ │ v │ указатель на │ указатель на │ v │ │ ╔═══════════╗следующую╔═══════════╗ следующую ╔═══════════╗ │ │ ║ Детальная ║────────>║ Детальная ║───> .. ───>║ Детальная ║ │ │ ║ запись ║ ║ запись ║ ║ запись ║ │ │ ║ 1 ║<────────║ 2 ║<─── .. <───║ n ║ │ │ ╚═══════════╝указатель╚═══════════╝ указатель ╚═══════════╝ │ │ на предыдущую на предыдущую │ └──────────────────────────────────────────────────────────────┘ Рис.4. Реализация набора в db_VISTA. "Схема"- это обобщенная структура БД, описываемая на языке DDL. При составлении схемы для БД необходимо учитывать, что на- боры просто определяют связанные списки записей, в которых глав- ная запись содержит указатели на начало (и конец) списка. Поря- - 12 - док, по которому детальные записи размещаются в списке, определяется в множестве описаний Языка манипулирования данными (DDL). Он может быть одним из следующих: первый - новые записи помещаются в начало списка; последний - новые записи помещаются в конец списка; последующий - новые записи помещаются за текущей записью; по возрастанию- новые записи располагаются в возрастающем порядке по заданным полям; по убыванию - новые записи располагаются в убывающем по- рядке по заданным полям. Процесс добавления новой детальной записи в набор называет- ся "включением" записи в набор. Аналогично, процесс удаления за- писи из набора называется "исключением" записи из набора. В db_VISTA более чем один тип записи может быть определен как элемент определенного набора. Более того, запись может быть определена как элемент более чем одного набора. Также допускает- ся один тип записи определять как главную и детальную запись од- ного набора. Кроме доступа к записям через наборы СУБД db_VISTA обеспе- чивает индексный доступ по ключевым полям,содержащимся в записи. Индексный файл B-дерева связанный с каждым ключевым полем позво- ляет осуществить быстрый доступ к отдельным записям, так же как и быстрый просмотр размещенных по ключу данных. Функционирование db_VISTA. На рисунке 5 показано как работает db_VISTA. - 13 - ┌──────────────────────────────────────────────────────────────┐ │ ╔══════════════════╗ │ │ ║ Описание на DDL ║ │ │ ╚══════════════════╝ │ │ │ │ │ v │ │ ╔══════════════════╗ │ │ ║ Процессор DDL ║ │ │ ╚══════════════════╝ │ │ │ │ │ ┌──────────────┬──────┴────────┬──────────────┐ │ │ │ │ │ │ │ │ v v v v │ │ ╔═════════╗ ╔════════════╗ ╔══════════╗ ╔═════════╗ │ │ ║ Словарь ║ ║ Включаемый ║ ║ Исходный ║ ║ vista.h ║ │ │ ║ данных ║ ║ файл Си ║ ║ Си-текст ║ ║ ║ │ │ ╚═════════╝ ╚════════════╝ ╚══════════╝ ╚═════════╝ │ │ │ │ │ │ │ │ │ └───────┬───────┴──────────────┘ │ │ │ │ │ │ │ v │ │ │ ╔═══════════════╗ │ │ │ ║ Транслятор Си ║ │ │ │ ╚═══════════════╝ │ │ │ │ │ │ │ v │ │ │ ╔═══════════════════╗ ╔════════════╗ │ │ │ ║ Оттранслированная ║ ║ Библиотека ║ │ │ │ ║ Си программа ║ ║ db_VISTA ║ │ │ │ ╚═══════════════════╝ ╚════════════╝ │ │ │ │ │ │ │ │ ├─────────────────────┘ │ │ │ │ │ │ │ v │ │ │ ╔═══════════════╗ │ │ │ ║ Компоновщик ║ │ │ │ ╚═══════════════╝ │ │ │ │ │ │ │ v │ │ │ ╔════════════╗ │ │ └──────────────>║ Прикладная ║ │ │ ║ программа ║ │ │ ╚════════════╝ │ │ │ │ │ v │ │ ╔═══════════════╗ │ │ ║ БД db_VISTA ║ │ │ ╚═══════════════╝ │ └──────────────────────────────────────────────────────────────┘ Рис.5. Функционированние db_VISTA. Описание на языке определения БД (DDL) db_VISTA подготавли- вается для процессора DDL СУБД, который транслирует описание и сообщает обо всех синтаксических ошибках. Процессор DDL формиру- ет два файла: словарь БД и файл заголовка БД, содержащий струк- туры и определения констант для включения их в Си-программу. Исходный текст Си-программы затем транслируется, а получен- - 14 - ный объектный код компонуется с библиотекой db_VISTA для получе- ния выполняемой прикладной программы. Библиотека функций db_VISTA, которая компонуется с прикладной прогаммой, будет ма- нипулировать с БД как определено в словаре, и вызовы функций должны включаться в прикладную Си-программу. Далее описана пос- ледовательность шагов, которые необходимо сделать для написания системы с использовантем db_VISTA. 1. Проектирование БД - определяется способ организации дан- ных в базе. 2. Подготовка описания на DDL. 3. Трансляция описания с помощью процессора DDL: * исправить все синтаксические ошибки и повторить трансля- цию, если необходимо; * используя утилиту диалогого доступа к БД, проверить пра- вильность построения спроектированной БД, изменить ее, если необходимо. 4. Составить и написать программу на Си, включающую соот- ветствующие вызовы Си-функций db_VISTA. 5. Оттранслировать Си-программу. Она должна включать файл заголовка vista.h и файл заголовков, сгенерированный процессором DDL. 6. Скомпоновать Си-программу с библиотекой db_VISTA. 7. Если необходимо проинициализировать БД с помощью прог- раммы initdb. 8. Запустить программу. Из всего вышеизложенного можно сделать вывод, что применение СУБД db_VISTA для реализации данной, относительно простой, системы необоснованно, что связано с необходимостью применять дополнительные прогаммные средства для реализации диа- лога. db_VISTA может быть рекомендована для написания более сложных систем, с развитым интерфейсом, информационная модель которых однозначно описывается сетевой структурой данных. Иерархические базы данных. Операции в ИМД имеют аналогичный СМД "позаписный" характер. Аппарат перемещения по структуре в графовых моделях служит для установки тех объектов данных, к которым будет применяться оче- редная операция манипулирования данными. Такие объекты называют- ся текущими. Механизмы доступа к данным и перемещения по струк- туре данных в таких моделях достаточно сложны и существенным образом опираются на концепцию текущего состояния механизма дос- тупа. Основные достоинства ИМД: простота построения и использова- ния, обеспечение определенного уровня независимости данных, простота оценки операционных характеристик. Основные недостатки: отношение "многие ко многим" реализуется очень сложно, дает гро- моздкую структуру и требует хранения избыточных данных, что осо- бенно нежелательно на физическом уровне, иерархическая упорядо- ченность усложняет операции удаления и включения, доступ к любой вершине возможен только через корневую, что увеличивает время доступа. К числу СУБД иерархического типа можно отнести PC/Focus, Team-Up, Data Edge, а также разработанную в нашей стране систему HИКА, преемницу широко распространенной советской системы ИHЕС для ЕС ЭВМ.